Guten Morgen,
ich habe ein Tool, welches auf Excel VBA basiert. In einem Sheet kann man via Doppelklick auf eine Zeile in eine Detailansicht verzweigen, klappt soweit gut. Da das Tool relativ groß ist, hat der Benutzer die Möglichkeit, sich einzelne Sheets separat zu speichern.
Nun hatte ich es so programmiert, dass nach dem "Doppelklick Event" geprüft wird, wo man sich aktuell befindet, sprich im Haupttool oder aber in dem separat gespeicherten Sheet, auch das klappt gut. Anhand dessen, was bei der Abfrage herauskommt, wird unterschiedlich vorgegangen, im Haupttool wird ein Unterprogramm aufgerufen, im Einzelsheet nicht, da nicht vorhanden. Der Sheet "Minus_Statistik" kommt nur im Haupttool vor:
Dim ws As Worksheet
Dim aaa As Long: aaa = 0
For Each ws In ActiveWorkbook.Sheets
If ws.name = "Minus_Statistik" Then aaa = 1
Next ws
Das Problem ist jetzt, dass sobald ich im einzelnen Sheet das "Doppelklick Event" starte, eine Fehlermeldung kommt, "Sub oder Funktion nicht definiert", obwohl ich es via "If Abfrage" starte.
If aaa = 1 Then Call artikel_aufloesung
If aaa = 1 Then Call disponent_aufloesung
Kann ich das anders lösen?
Grüße
Mirko
Hallo,
zum einen würde ich mal prüfen, ob aaa=1 ist (was für ein komischer Variablenname...) und zum anderen einfach mit On Error Resume Next übergehen.
Gruß
Christian
Hallo Mirko,
die Fehlermeldung ist ein Compiler-Error und kann somit nicht einfach mit "On Error ..." oder IF abgefangen werden. Für so etwas gibt es die Möglichkeit, per "bedingter Compilierung" mit #IF solche Zeilen auszublenden.
Ansonsten mußt du deine Programmlogik nochmal überdenken.
Gruß
Knobbi38
Zitat von: Blaupunkt79 am Februar 01, 2025, 06:22:26Das Problem ist jetzt, dass sobald ich im einzelnen Sheet das "Doppelklick Event" starte, eine Fehlermeldung kommt, "Sub oder Funktion nicht definiert", obwohl ich es via "If Abfrage" starte.
Das Problem dürfte hier schon ein Kompilierfehler sein. Ein solcher Fehler tritt schon auf wenn das jeweilige Modul kompiliert werden soll, nicht erst bei der Ausführung. Somit ist der Ablauf innerhalb deines Codes irrelevant für den Fehler, weil der Code gar nicht erst ausgeführt werden kann.
Wenn du eine Prozedur aufrufen willst, die es u.U. gar nicht gibt, dann musst du das über
Application.Run machen.
@PhilS Bei Application.Run sollte die Funktion aber schon in einem Modul stehen und nicht in einem Sheet, zumindest bin ich bisher immer davon ausgegangen. Zudem sind die Argumente vom Typ Variant, was u.U. auch beachtet werden sollte.
Grüße
Knobbi38
Zitat von: knobbi38 am Februar 03, 2025, 14:52:28Bei Application.Run sollte die Funktion aber schon in einem Modul stehen und nicht in einem Sheet, zumindest bin ich bisher immer davon ausgegangen.
Korrekt.
Falls sich die aufzurufende Prozedur in einem Sheet befindet, wäre CallByName eine Alternative.
Ich habe es jetzt so gelöst, dass ich innerhalb des Sheets auf ein Unterprogramm verweise und von diesem aus rufe ich das eigentliche Unterprogramm auf.