Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
448to452
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wie kann man Private Sub's ablaufen lassen?

Wie kann man Private Sub's ablaufen lassen?
02.07.2004 21:42:04
Dieter
Hallo Excelfans,
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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie kann man Private Sub's ablaufen lassen?
02.07.2004 21:53:31
DieterB
Hallo Diter,
ich glaube das geht nicht.

Private Sub ist z.B. Selection_Change
Workbook_open.
Ansonsten
sub Makro1()
hallo    &lt&lt&lt&lt&lt&ltAufruf eines Makros
End Sub

sub hallo()
Code
End Sub
Gruß
DieterB
Man muß sie doch aufrufen können?
02.07.2004 22:29:03
Dieter
Hallo,
ich bin etwas verblüfft, daß es solche Probleme macht, an sie heran zu kommen.
Beispiel:

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

Das Object Datastream wird in einem anderen Sub definiert, die müssen also schon zusammenarbeiten.
Das ist nur ein Beispielschnipsel zum Üben; bisher habe ich einfach Module als Subs oder Funktionen geschrieben - und untereinander aufgerufen, klappt immer.
Ein

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

Anzeige
AW: Man muß sie doch aufrufen können?
Ulf
Prinzipiell kannst du eine

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
Und wie konkret?
02.07.2004 23:14:20
Dieter
Hallo Ulf,
der Code ist aus der Hilfe zu einem Programm und von mir zum Üben auf das Einfachste reduziert, Zeit und Volume spielen daher keine Rolle, ich möchte nur das Schema verstehen.
Ein

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.
Grüße
Dieter
Anzeige
AW: Und wie konkret?
Ulf
Beispiel, die

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
Anzeige
Tja, ich fürchte, das ich für heute abbrechen muß
Dieter
Hallo Ulf,
ich habe Deinen Code in ein Tabellenblatt gegeben und nun erscheinen mehrere Subs parallel.
Ich were morgen damit weiterspielen, schönen Dank erstmal für Deine Mühe und Geduld.
Grüße
Dieter
AW: Wie kann man Private Sub's ablaufen lassen?
Ulf
Poste mal den gesamten Code der Private Sub
Ulf
AW: Wie kann man Private Sub's ablaufen lassen?
03.07.2004 11:45:34
Melanie
Hallo Dieter,
vielleicht kann ich etwas Licht ins Dunkle bringen :-)
Es spielt gar keine Rolle, in welchen Modulen Prozeduren hinterlegt sind und ob sie Private oder Public sind ;-)
Es kommt nur darauf an, wie man sie aufruft!
In einer Arbeitsmappe seinen folgende Prozeduren:
' DieseArbeitsmappe

Private Sub Workbook_Open()
MsgBox "Workbook_Open wurde aufgerufen"
End Sub

' Tabelle1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub

' Modul1

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

Aufgerufen werden alle diese Prozeduren aus Modul2 heraus:
' Modul2
Sub RufeMakros()
' Public Prozeduren
' nach Eingabe des Punktes werden globale Prozeduren des Moduls angezeigt
Modul1.ruf_teste01
Modul1.ruf_teste02
' Private Prozeduren
Application.Run "Modul1.teste01"
Application.Run "Modul1.teste02", "Melanie", 3, 12
Application.Run "DieseArbeitsmappe.Workbook_Open"
Application.Run "Tabelle1.Worksheet_SelectionChange", Range("A1")
End Sub
Die Ereignisprozeduren werden zwar aufgerufen und der hinterlegte Code ausgeführt,
dass Ereignis selbst wird aber nicht ausgeführt, z.B. beim Close-Ereignis, wird die Mappe nicht durch den manuellen Aufruf geschlossen.
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Anzeige
AW: Wie kann man Private Sub's ablaufen lassen?
03.07.2004 11:45:45
Melanie
Hallo Dieter,
vielleicht kann ich etwas Licht ins Dunkle bringen :-)
Es spielt gar keine Rolle, in welchen Modulen Prozeduren hinterlegt sind und ob sie Private oder Public sind ;-)
Es kommt nur darauf an, wie man sie aufruft!
In einer Arbeitsmappe seinen folgende Prozeduren:
' DieseArbeitsmappe

Private Sub Workbook_Open()
MsgBox "Workbook_Open wurde aufgerufen"
End Sub

' Tabelle1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox Target.Address
End Sub

' Modul1

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

Aufgerufen werden alle diese Prozeduren aus Modul2 heraus:
' Modul2
Sub RufeMakros()
' Public Prozeduren
' nach Eingabe des Punktes werden globale Prozeduren des Moduls angezeigt
Modul1.ruf_teste01
Modul1.ruf_teste02
' Private Prozeduren
Application.Run "Modul1.teste01"
Application.Run "Modul1.teste02", "Melanie", 3, 12
Application.Run "DieseArbeitsmappe.Workbook_Open"
Application.Run "Tabelle1.Worksheet_SelectionChange", Range("A1")
End Sub
Die Ereignisprozeduren werden zwar aufgerufen und der hinterlegte Code ausgeführt,
dass Ereignis selbst wird aber nicht ausgeführt, z.B. beim Close-Ereignis, wird die Mappe nicht durch den manuellen Aufruf geschlossen.
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige