Frage von shikser, 23

VBA - Mit Makro den Editor öffnen?

Hallo zusammen.

Gibt es eine Möglichkeit, mit einem Makro den VBA-Editor zu öffnen und gleich in ein bestimmtes Modul zu springen? Hintergrund ist folgender: Über einen Button wird ein Makro gestartet, das eine andere Datei öffnen und eine bestimmte Tabelle aus der anderen Datei in die eigene Mappe holen soll. Jetzt möchte ich eine Abbruchbedingung für ne Error-Meldung implementieren, die den Anwender direkt an die Stelle im Editor navigiert, wo der Dateiname ggfs angepasst werden muss.

Ich hab bis jetzt nur das gefunden:

Application.VBE.MainWindow.Visible = True

Vielen Dank für Eure Hilfe, Jan

Expertenantwort
von Oubyi, Community-Experte für Excel, 23

Du kannst mit

Error(ErrorNumber)

eine Fehler generieren, der die Fehlermeldung zeigt und den User mit "Debuggen" automatisch zur Fehlerstelle im Code führt.
Das passiert aber eigentlich auch schon, wenn Du den Fehler einfach nicht abfängst, sonder auflaufen lässt.
Ich finde es auch nicht so sinnvoll jeden an Deinem Code herumschreiben zu lassen.
Kannst Du nicht besser versuchen einen gültigen Dateinamen über eine Input-Box in einer While-Schleife abzufragen?

Kommentar von shikser ,

Hallo,

im Prinzip hast du recht, ich wollte nur ganz gerne ne Art "Anleitung" für den Anwender einfügen, da ich die Thematik in Zukunft nicht mehr betreuen kann ;)

Es handelt sich dabei um einen Teil meiner Abschlussarbeit, da will ich zumindest in der Theorie die Möglichkeit erarbeiten um zu zeigen, dass ich dran gedacht habe ;)

Da muss ich mir wohl nochmal Gedanken machen, ob das wirklich sinnvoll ist.

Aber trotzdem, gibt es eine Möglichkeit ein bestimmtes Modul im Editor per VBA zu öffnen? Also auch ohne so einen Fehler zu generieren?

Gruß,

Jan

Kommentar von Oubyi ,

Mit:
Application.Goto Reference:="Makro1"
oder
Application.Goto Reference:="Tabelle5.MeinCode"
kannst Du ein bestimmtes Modul öffenen, allerdings, soweit ich das weiß, nicht bei einer bestimmten Zeile.

Kommentar von shikser ,

Ich hab das jetzt so gemacht, dass ich mir den Dateinamen automatisch auslese und dann verwende:

Arbeitsmappe = ThisWorkbook.Name

Sheets("Bausteinkatalog").Copy After:=Workbooks(Arbeitsmappe).Sheets(1)

Manchmal hilft es auch, vorher nachzudenken :D

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 22

Du kannst Haltepunkte codegesteuert einfügen.

Versuch mal 

If Dir( <Datei> ) = "" Then _
  Stop
Kommentar von shikser ,

Erstmal vielen Dank für die schnelle Antwort.

Mit dem Befehl komm ich aber nicht in ein bestimmtes Modul, oder?

Gruß,

Jan

Kommentar von Suboptimierer ,

Du könntest versuchen, mit GoTo nach dem Stop ins Modul zu springen oder eine Prozedur des Moduls aufzurufen.

Wenn der Dateiname vom User änderbar sein soll, würde ich allerdings diesen irgendwo im Sheet definieren.

Kommentar von shikser ,

Bisher sieht das so aus:

Dim Eingabewert As Byte

'--- nachfolgend unbedingt den Dateinamen anpassen (der Name dieses Dokuments!)
On Error GoTo ErrorFile

Sheets("Bausteinkatalog").Copy After:=Workbooks("Ergebnisse_Bausteinkatalog_Makro.xlsm").Sheets(1)
GoTo ErrorFileNot
ErrorFile:
Eingabewert = MsgBox("Achtung" & vbLf & "Der angegebene Pfad existiert nicht!" & vbLf & vbLf & "Sie müssen eine kleine Änderung im Quelltext vornehmen" & vbLf & vbLf & "Im Editor im Modul 'AA_Öffnen' den Dateinamen anpassen!", vbYesNoCancel, "Information")
If Eingabewert = vbYes Then GoTo Yes
If Eingabewert = vbNo Then GoTo No
Yes:
Application.VBE.MainWindow.Visible = True
No:
Exit Sub
ErrorFileNot:

Wenn der Dateiname also nicht passt, gibt mir Excel eine Meldung aus, dass das nicht geht. Jetzt dachte ich, dass ich über einen Klick auf den Ja-Button den VBA-Editor (genauer gesagt ein bestimmtes Modul darin) öffnen kann. Wie gesagt, in den Editor komm ich so rein, nur nicht in das Modul. Eine Haltestelle im Code brauche ich glaube ich nicht, der Text ist nicht allzu lang.

Falls das da oben nicht die "sauberste" Lösung ist, bitte ich dies zu verzeihen ;)

Kommentar von Suboptimierer ,

Ohne Haltepunkt siehe Oubyi.

Du kannst dir auch versuchen, ein Singleton zu schaffen und beim Auftreten eines Fehlers den Pfad zur Datei am Objekt über eine InputBox anzupassen.

Kommentar von Suboptimierer ,

Du kannst die Existenz der Datei auch programmtechnisch überprüfen. Kein Grund, eine Schutzverletzung auszulösen und abzufangen.
Erfahrungsgemäß sind bei sauberer Programmierung Schutzverletzungen nicht nötig, abzufangen.
Man fängt sie eigentlich nur ab, falls etwas auftritt, was nicht bedacht wurde / werden kann (zum Beispiel weil ein Fehler von außen erzeugt wird, auf den man keinen Einfluss hat).

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten