Registriert seit: 08.07.2016
Version(en): 2016
29.03.2017, 16:54
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 :)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
29.03.2017, 18:18
(Dieser Beitrag wurde zuletzt bearbeitet: 29.03.2017, 18:18 von o0Julia0o.)
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.
Registriert seit: 08.07.2016
Version(en): 2016
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:
#AVKK.xlsm (Größe: 47,16 KB / Downloads: 4)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
(29.03.2017, 18: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:1 Nutzer sagt Danke an atilla für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
30.03.2017, 15:27
(Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2017, 15:27 von o0Julia0o.)
danke Atilla! (29.03.2017, 22: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, 22: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, 22: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:
#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 :)
Registriert seit: 08.07.2016
Version(en): 2016
31.03.2017, 17:41
(Dieser Beitrag wurde zuletzt bearbeitet: 31.03.2017, 17:44 von o0Julia0o.)
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:
#AVKK_2.xlsm (Größe: 46,61 KB / Downloads: 5)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, in Excel ist immer mindestens eine Zelle auf jedem Blatt gewählt 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:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
01.04.2017, 10:40
(Dieser Beitrag wurde zuletzt bearbeitet: 01.04.2017, 10:40 von o0Julia0o.)
hm, danke schauan! (31.03.2017, 23:54)schauan schrieb: in Excel ist immer mindestens eine Zelle auf jedem Blatt gewählt 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, 23: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.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Julia, Ein Nein akzeptiere ich nur aus anderen Gründen 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)
|