Access-o-Mania

Office-Forum (Deutsch/German) => Microsoft Excel => Thema gestartet von: Blaupunkt79 am Februar 01, 2025, 06:22:26

Titel: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: Blaupunkt79 am Februar 01, 2025, 06:22:26
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
Titel: Re: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: Bitsqueezer am Februar 02, 2025, 15:41:43
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
Titel: Re: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: Knobbi38 am Februar 02, 2025, 22:53:02
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


Titel: Re: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: PhilS am Februar 03, 2025, 10:03:25
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.
Titel: Re: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: Knobbi38 am Februar 03, 2025, 14:52:28
@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
 
Titel: Re: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: PhilS am Februar 03, 2025, 15:53:56
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.
Titel: Re: Unterprogramm außerhalb der eigentlichen Anwendung
Beitrag von: Blaupunkt79 am Februar 04, 2025, 13:29:32
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.