wie ruft man Private Subs von einem anderen Modul/Makro aus auf und muß mam sie in ein Modul oder ein Klassenmodul schreiben? Bin Anfänger darin und bekomme sie nicht mal testweise im Editor zum Laufen.
Schönen Dank für Eure Hilfe
Dieter
Private Sub ist z.B. Selection_Change
Workbook_open.
Ansonsten
sub Makro1()
hallo <<<<<<Aufruf eines Makros
End Sub
Private Sub TPRDataStream_Bezahlt(ByVal SymbolNr As Long, ByVal Kurs As Single, _
ByVal Volume As Single, ByVal Zeit As Date)
If SymbolNr = 79514 Then Range("A1").Value = Kurs
End Sub
Private Sub ist leider so "private", daß es sich nicht mal durch blau anlegen im VBA-Editor ausführen läßt, aber irgendwie
müssen sie sich doch ausführen lassen und auch per VBA aus ansprechen lassen - hoffe ich ...
Danke und Grüße
Dieter
Private Sub nur aus dem selben Modul ansprechen.
Dein Beispielcode:
Private Sub TPRDataStream_Bezahlt(ByVal SymbolNr As Long, ByVal Kurs As Single, _
ByVal Volume As Single, ByVal Zeit As Date)
If SymbolNr = 79514 Then Range("A1").Value = Kurs
End Sub
Was soll da Volume und Zeit, die spielen da gar keine Rolle?
Ulf
Private Sub läßt sich also aus dem gleichen Modul anspreche, aber wie?
Ein schlichtes Call sagt Sub nicht definiert, schreibe ich den Text des private in ein anderes Sub hinein, (oben private Sub, unten End Sub
) gibt es Fehlermeldungen, weil man halt nicht zwei in eins schreiben soll.
Private Sub und die aufrufende Sub müssen jeweils im
<b>selben</b> Modul stehen.
Wichtig ist, dass du verstehst, wozu eine
Private Sub überhaupt gut ist.
Option Explicit
Private Sub teste01()
MsgBox "
Private Sub teste01 wurde gestartet!"
End Sub
Sub ruf_teste01()
Call teste01
End Sub
Private Sub teste02(text As String, wert1 As Long, wert2 As Long)
MsgBox "
Private Sub teste02 wurde gestartet!" & Chr(10) & _
"Text: " & text & Chr(10) & _
"Wert1: " & wert1 & Chr(10) & _
"Wert2: " & wert2
End Sub
Sub ruf_teste02()
Call teste02("Übergebener Testtext", 12345, 98765)
End Sub
Ulf
Private Sub Workbook_Open()
MsgBox "Workbook_Open wurde aufgerufen"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub
Private Sub teste01()
MsgBox "
Private Sub teste01 wurde gestartet!"
End Sub
Sub ruf_teste01()
Call teste01
End Sub
Private Sub teste02(text As String, wert1 As Long, wert2 As Long)
MsgBox "
Private Sub teste02 wurde gestartet!" & Chr(10) & _
"Text: " & text & Chr(10) & _
"Wert1: " & wert1 & Chr(10) & _
"Wert2: " & wert2
End Sub
Sub ruf_teste02()
Call teste02("Übergebener Testtext", 12345, 98765)
End Sub
Private Sub Workbook_Open()
MsgBox "Workbook_Open wurde aufgerufen"
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub
Private Sub teste01()
MsgBox "
Private Sub teste01 wurde gestartet!"
End Sub
Sub ruf_teste01()
Call teste01
End Sub
Private Sub teste02(text As String, wert1 As Long, wert2 As Long)
MsgBox "
Private Sub teste02 wurde gestartet!" & Chr(10) & _
"Text: " & text & Chr(10) & _
"Wert1: " & wert1 & Chr(10) & _
"Wert2: " & wert2
End Sub
Sub ruf_teste02()
Call teste02("Übergebener Testtext", 12345, 98765)
End Sub
Erstelle ein neues Modul:
ALT + F11
.Einfügen
> Modul
.Definiere deine Private Subs:
Private Sub teste01()
MsgBox "Private Sub teste01 wurde gestartet!"
End Sub
Private Sub teste02(text As String, wert1 As Long, wert2 As Long)
MsgBox "Private Sub teste02 wurde gestartet!" & Chr(10) & _
"Text: " & text & Chr(10) & _
"Wert1: " & wert1 & Chr(10) & _
"Wert2: " & wert2
End Sub
Rufe die Private Subs aus einem anderen Sub auf:
Sub rufePrivateSubs()
Call teste01
Call teste02("Testtext", 123, 456)
End Sub
Führe die öffentliche Sub aus:
F5
oder gehe zurück zu Excel und führe die rufePrivateSubs
Sub aus, um die Private Subs zu starten.Fehler: "Sub nicht definiert":
Fehler: Event-Handler nicht aufrufbar:
Workbook_Open
oder Worksheet_SelectionChange
) können nicht manuell aufgerufen werden. Diese werden automatisch bei den entsprechenden Ereignissen ausgelöst.Verwendung von Application.Run
:
Application.Run
aufrufen, wenn sie in einem anderen Modul definiert sind:
Application.Run "DeinModulName.teste01"
Application.Run "DeinModulName.teste02", "Text", 1, 2
Öffentliche Subs nutzen:
Hier sind einige Beispiele, um das Verständnis zu fördern:
Workbook-Ereignis:
Private Sub Workbook_Open()
MsgBox "Workbook wurde geöffnet!"
End Sub
Aufruf eines Private Sub aus einem anderen Modul:
' In Modul1
Private Sub teste01()
MsgBox "Teste01 gestartet."
End Sub
' In Modul2
Sub rufeTeste01()
Application.Run "Modul1.teste01"
End Sub
Verwende Option Explicit
:
Option Explicit
am Anfang jeder Moduldatei hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler durch Tippfehler zu vermeiden.Nutze die Debugging-Tools:
Dokumentiere deinen Code:
1. Kann ich Private Subs aus einem anderen Modul aufrufen?
Nein, Private Subs können nur innerhalb des Moduls aufgerufen werden, in dem sie definiert sind.
2. Was ist der Unterschied zwischen Public und Private Subs?
Public Subs können von jedem Modul aus aufgerufen werden, während Private Subs nur innerhalb des Moduls sichtbar sind, in dem sie definiert wurden.
3. Wie kann ich ein Ereignis in einem Arbeitsblatt auslösen?
Ereignisse wie Worksheet_SelectionChange
werden automatisch ausgelöst, wenn die entsprechende Aktion (z. B. Auswahländerung) erfolgt. Sie können nicht manuell aufgerufen werden.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen