Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Unterprogramm außerhalb der eigentlichen Anwendung

Begonnen von Blaupunkt79, Februar 01, 2025, 06:22:26

⏪ vorheriges - nächstes ⏩

Blaupunkt79

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

Bitsqueezer

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

knobbi38

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



PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

knobbi38

@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
 

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Blaupunkt79

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.