Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Code ausführen danach Zelle auswählen
#1
Question 
Hi,

ich möchte folgendne Code ausführen. Danach soll die Zelle angewählt werden, welche vor der Codeausführung angewählt war. Wenn keine Zelle angewählt war, dann soll A1 angewählt werden:

Code:
Sub Speichern()
    Dim AktuelleAnwahl As String
    Dim varSheets As Variant
    Dim Dateiname As String
AktuelleAnwahl = Selection.Address(0, 0)
Worksheets("Calc2").Range("CI2").Value = AktuelleAnwahl
    varSheets = Array("Tabelle1", "Tabelle3")
    Dateiname = Worksheets("Calc3").Range("J111").text
    ThisWorkbook.Sheets(varSheets).Copy
    Application.DisplayAlerts = False
        With ActiveWorkbook
        .SaveAs Filename:=ThisWorkbook.Path & "\" & Dateiname, _
                FileFormat:=xlOpenXMLWorkbookMacroEnabled
        .Close
        End With
    Application.DisplayAlerts = True
Range(AktuelleAnwahl).Select
Range(Worksheets("Calc2").Range("CI2").Value).Select
Range("A1").Select
End Sub

Der Code macht alles, was ich möchte. Datei im gleichen Verzeichnis wie die Codebeinhaltende speichern & wenn vorhanden überschreiben. Die letzten 3 Zeilen habe ich abwechselnd ausprobiert - jeweils eine. Es wird aber nie eine Zelle angewählt. Man hat stets gar keine Zelle angewählt, wenn der Code durchlaufen ist. Was mache ich falsch?

Julia :)
Antworten Top
#2
Hallo,

http://www.clever-excel-forum.de/thread-9283.html

Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • o0Julia0o
Antworten Top
#3
Danke, das Anwählen an sich ist kein Problem. Der Code gibt ja keinen Fehler aus.

Selbst wenn ich folgende Sub erstelle:


Code:
Zelleanwaehlen()
Range(Worksheets("Calc2").Range("CI2").Value).Select
End Sub

Und diese dann am Ende meines Codes aufrufe: Call Zelleanwaehlen, wird keine Zelle angewählt. Wenn ich aber dann auf Play drücke im MsVB-Editor, dann wird die Zelle direkt angewählt.

Ich könnte auch am Ende des Codes:
Sub Anwahl()
Worksheets("Tabelle2").Select
Worksheets("TAbelle1").Select
Range("A1").Select
End Sub

inhaltlich machen, oder per Call als obigen Code aufrufen. Es würde nichts angwählt werden. Manuell per Play-Botton gestartet würde aber A1 angewählt.
Antworten Top
#4
Es liegt daran, dass ich Formularsteuerfelder(Checkbox) in der Tabelle1 habe(aur der ich stehe, wenn ich das Makro ausführe).

Wenn ich die Steuerfelder lösche, werden Felder auch angewählt. Selbst ohne sich das letzte Feld zu merken, wird das zuletzt angewählte Feld automatisch durch Excel angewählt. Ich habe mal alle Checkboxen gelöscht. Dann funktionierte es. Dann eine Checkbox hinzugefügt - ohne verknüpftes Feld oder Makro. Einfach nur hinzugefügt. Und es funktioniert nicht mehr.

   

Ich habe mal die Datei angehangen, da kann man das sehen. Kontrollkästchen 2 - 2x Makro ausführen unmögich, da dann kein Feld angewählt ist. Kontrollkästchen löschen. Makro funktionert durchgängig:

.xlsm   #AVKK.xlsm (Größe: 47,16 KB / Downloads: 4)
Antworten Top
#5
(29.03.2017, 17:18)o0Julia0o schrieb: Danke, das Anwählen an sich ist kein Problem. Der Code gibt ja keinen Fehler aus.

Selbst wenn ich folgende Sub erstelle:


Code:
Zelleanwaehlen()
Range(Worksheets("Calc2").Range("CI2").Value).Select
End Sub

Und diese dann am Ende meines Codes aufrufe: Call Zelleanwaehlen, wird keine Zelle angewählt.


Doch Julia,

nämlich die gerade aktive Zelle.

Du schreibst in Deinem Code am Anfang des Codes die Zelladresse der aktiven Zelle in die Zelle CI50
Nach Codeausführung ändert sich die aktive Zelle nicht, also erkennst Du gar nicht, dass die aktive Zelle selektiert wird.


Teste so:
Code:
Sub Zellauswahl()
Worksheets("Tabelle1").Range("A1").Select
End Sub



Aber ich hätte Dich eigentlich, wie Uwe auch, auf seinen Beitrag von Deiner vorherigen Frage verwiesen.
Das ist nämlich die bessere Alternative und funktioniert hier auch.

Ich habe jetzt den Code in der Beispielmappe ohne Löschen mehrmals ausführen können.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • o0Julia0o
Antworten Top
#6
danke Atilla!

(29.03.2017, 21:39)atilla schrieb: Nach Codeausführung ändert sich die aktive Zelle nicht, also erkennst Du gar nicht, dass die aktive Zelle selektiert wird.
Doch ich erkenne das daran, dass keine Zelle markiert ist. Vor Codeausführung sieht es so aus:
   
Und nach Codeausführung sieht es so aus:
   

(29.03.2017, 21:39)atilla schrieb: Teste so:
Code:
Sub Zellauswahl()
Worksheets("Tabelle1").Range("A1").Select
End Sub
Das macht keinen Unterschied. Ich habe es auch so probiert:

Code:
Sub Zellauswahl()
Worksheets("Tablle1").Select
Range("A1").Select
End Sub
Ob ich das am Ende des Codes schreibe oder per Call Zellauswahl aufrufe, macht auch keinen Unterschied. Es wird keine Zelle ausgewählt.

(29.03.2017, 21:39)atilla schrieb: Ich habe jetzt den Code in der Beispielmappe ohne Löschen mehrmals ausführen können.
Ohne das Kontrollkästchen zu löschen? Wenn ich das lösche funktioniert jede Variante der Zellauswahl. Es liegt also an der Checkbox. Aber wie gesagt, diese hat keinerlei Verknüpfung oder Makro. Nur ´reingezogen und fertig.

Ich habe die Datei nochmal mit deinem Code hinzugefügt. 1x kann ich das Makro ausführen. Danach gibt er es Problem aus, weil keine Zelle ausgewählt ist und er sich ja die aktuelle Zellauswahl in die Variable schreiben möchte:

.xlsm   #AVKK.xlsm (Größe: 47,43 KB / Downloads: 4)
Auch "Application.Goto Range("Tabelle1!A1")" klappt nicht.

Das kuriose ist ja, wenn ich die Checkbox entferne, dann benötige ich nichtmal eine Variable wo die aktuell aktivierte Zelle hineingeschrieben wird. Denn nach der Ausführung des Codes bleibt diese Zelle nach wie vor ausgewählt. Ich wähle z.b. A4 an führe folgenden Code aus(wo ich dann ja die Zellmerkesachen ausklammern kann):

Code:
Sub Erstellen()
'    Dim AktuelleAnwahl As String
    Dim varSheets As Variant
    Dim Dateiname As String
AktuelleAnwahl = Selection.Address(0, 0)
Worksheets("Tabelle1").Range("CI50").Value = AktuelleAnwahl
    varSheets = Array("Tabelle1")
    Dateiname = Worksheets("Tabelle1").Range("B50").text
    ThisWorkbook.Sheets(varSheets).Copy
    Application.DisplayAlerts = False
        With ActiveWorkbook
        .SaveAs Filename:=ThisWorkbook.Path & "\" & Dateiname, _
                FileFormat:=xlOpenXMLWorkbookMacroEnabled
        .Close
        End With
    Application.DisplayAlerts = True
'Range(AktuelleAnwahl).Select
'Range(Worksheets("Tabelle1").Range("CI50").Value).Select
'Range("A1").Select
'Worksheets("Tabelle1").Select
'Range("A1").Select
'Application.Goto Range("Tabelle1!A1")
'Worksheets("Tabelle1").Range("A1").Select
'Call Zellauswahl
End Sub


Und trotzdem bleibt A4 angewält. Also genau das, was ich möchte. Aber das geht wie gesagt nur, ohne diese Checkbox.

Julia :)
Antworten Top
#7
Wenn man den Code in der Datei so abändert:

Code:
Sub Erstellen2()
    Dim AktuelleAnwahl As String
    Dim varSheets As Variant
    Dim Dateiname As String
'AktuelleAnwahl = Selection.Address(0, 0)
Worksheets("Tabelle1").Range("CI50").Value = AktuelleAnwahl
    varSheets = Array("Tabelle1")
    Dateiname = Worksheets("Tabelle1").Range("B50").text
    ThisWorkbook.Sheets(varSheets).Copy
    Application.DisplayAlerts = False
        With ActiveWorkbook
        .SaveAs Filename:=ThisWorkbook.Path & "\" & Dateiname, _
                FileFormat:=xlOpenXMLWorkbookMacroEnabled
        .Close
        End With
    Application.DisplayAlerts = True
'Range(AktuelleAnwahl).Select
'Range(Worksheets("Tabelle1").Range("CI50").Value).Select
Range("A1").Select
'Call Zellauswahl
End Sub
Also so, dass er stets durchläuft, weil die Seleciton.Adress rausgenommen ist. Dann ist bei jedem 2. Durchlauf Feld A1 angewählt. Warum nur bei jedem 2. Durchlauf? Also immer dann, wenn zuvor(vor dem Start des Codes) KEINE Zelle angewählt war.

Hier ist die editierte Datei:
.xlsm   #AVKK_2.xlsm (Größe: 46,61 KB / Downloads: 5)
Antworten Top
#8
Hallöchen,

in Excel ist immer mindestens eine Zelle auf jedem Blatt gewählt Sad
Nach der codeausführung ist auch immer A1 in AVK_2 gewählt. Nur in der Kopie ist die Zelle gewählt, die zuvor in AVK_2 gewählt war. Falls Du die Kopie meinst, musst Du vor der Zeile mit SaveAs A1 auswählen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • o0Julia0o
Antworten Top
#9
hm, danke schauan!

(31.03.2017, 22:54)schauan schrieb: in Excel ist immer mindestens eine Zelle auf jedem Blatt gewählt Sad
Nein, das kann man doch leicht ausprobieren: Nach Codeausführung ist doch nur bei jedem 2. Durchlauf A1 angewählt. Sonst gar keine Zelle.

1. Ich öffne die #AVKK_2.xlsm & sehe A1 ist angewählt.
2. Ich drücke in der VBA-Ansicht auf Play(Sub Erstellen())
3. Ich wähle die Excelansicht an und sehe A1 ist nicht ausgewählt. Ich klicke aber nicht in irgendwo in der Excelansicht. Es ist gar keine Zelle ausgewählt.
4. Ich gehe in die VBA-Ansicht und drücke auf Play(Sub Erstellen()). Ich gehe in die Excelansicht und sehe: A1 ist angewählt.
Jetzt kann ich bei 2. fortfahren und es wiederholt sich ständig.

(31.03.2017, 22:54)schauan schrieb: Nach der codeausführung ist auch immer A1 in AVK_2 gewählt. Nur in der Kopie ist die Zelle gewählt, die zuvor in AVK_2 gewählt war. Falls Du die Kopie meinst, musst Du vor der Zeile mit SaveAs A1 auswählen.
Die Kopie(Dateiname.xlsm) ist doch aber geschlossen. Davon bekomme ich gar nichts mit. Es bleibt doch stets die #AVKK_2.xlsm geöffnet. Wenn ich die Dateiname.xlsm öffne, ist dort nach jedem Durchlauf das Feld A1 angewählt. Jedoch interessiert mich diese Datei ja nicht, sonder die Datei, wo der Code ausgeführt wird - also die: #AVKK_2".xlsm.
Antworten Top
#10
Hallo Julia,
Ein Nein akzeptiere ich nur aus anderen Gründen Smile
Wenn sich irgendwelche Objekte auf einem Blatt befinden oder es sich z.B. um ein Diagrammblatt handelt...

Nimm mal Activecell.address und Activesheet.name in die Überwachung, führe den code schrittweise aus und schaue mal, was dort steht. Vielleicht kann man da Erkenntnisse gewinnen.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste