ich wollte ein globales sub schreiben,
dass den klickwert (funktionname) an eine startfunktion
uebergibt …
die diese dann im modul startet.
funktioniert das nicht ?
Hallo Pixelkönig,
vielleicht reden wir aneinander vorbei, oder ich versteh dich nicht oder beides 
Eine „Sub“ kann man starten, die läuft dann vor sich hin und macht das was drinsteht.
M.E. kann man eine Funktion nur aufrufen und ggfs. auswerten (ja, irgendwie ist aufrufen auch starten, aber irgendwie auch nicht)
Ich versuchs mal so.
Dein Makro sieht so aus:
Sub Global(Makroname as string)
Call Makroname
End Sub
dann klappt das für Subs *annehm*
Für Funktionen aber nicht.
Dann müßte das theoretisch so aussehen:
Sub Global(Funktionsname as string)
MsgBox Funktionsname()
End Sub
Was höchstwahrscheinlich nicht geht *annehm*
Aber lassen wir das mal wech.
Ich habe meine Datei verbessert, durch Klick auf die Prozedurnamen in Spalte C wird die jeweilige Prozedur in einer Userformtetxbox angezeigt.
Die Datei:
http://www.hostarea.de/server-12/Dezember-872f1b9c06…
hat den nachfolgenden Code.
Benötigt wird eine UF mit einem Textfeld, Größen sind beliebig, TextBox sollte nur oben links in der UF anecken.
Und in der Tabelle eine Schaltfläche der das makro Alle_Makros_Liste
zugewiesen wird.
Gruß
Reinhard
in Modul1:
Option Explicit
'Public M
'
Sub test()
Call EineProzedurAufListen("ListeAllerProzeduren.xls", "Modul2", "ProzedurAuflisten")
End Sub
'
Sub EineProzedurAufListen(wb, Mdl, Proz)
'Verweis auf MS Vba Extensibility muß gesetzt sein!
Dim Zei As Long, Spa As Integer, Z As Long, M As String, B
With Workbooks(wb).VBProject.VBComponents(Mdl).CodeModule
Z = .CountOfDeclarationLines + 1
If .CountOfDeclarationLines \> 0 Then M = .Lines(1, .CountOfDeclarationLines) & Chr(13)
Do While Z = .CountOfLines
Zei = Zei + 1
Cells(Zei, 3) = .ProcOfLine(Z, vbext\_pk\_Proc)
Z = Z + .ProcCountLines(.ProcOfLine(Z, vbext\_pk\_Proc), vbext\_pk\_Proc)
Loop
On Error GoTo 0
End With
Next Mdl
Next wb
ActiveSheet.Columns("A:C").AutoFit
Exit Sub
Fehler:
Z = Z + 1
Cells(Zei, 3) = "property!"
Resume Next
End Sub
'
Sub ProzedurAuflisten(wb, Mdl)
Dim VBMdl 'As CodeModule
Dim Zei As Long, Inhalt As String, Z As Long
Set VBMdl = Workbooks(wb).VBProject.VBComponents(Mdl).CodeModule
With VBMdl
If .CountOfLines \> 2 Then '2 wg Option Explicit und leerzeile
Inhalt = .Lines(1, .CountOfLines)
MsgBox Inhalt
End If
End With
End Sub
'
Sub tt()
Call ProzedurAuflisten2(ActiveWorkbook.Name, "Modul1")
End Sub
'
Sub ProzedurAuflisten2(wb, Mdl)
'Verweis auf MS Vba Extensibility muß gesetzt sein!
Dim VBCodeMod As CodeModule
Dim Zei As Long, strMsg As String, Inh()
Set VBCodeMod = Workbooks(wb).VBProject.VBComponents(Mdl).CodeModule
With VBCodeMod
Zei = .CountOfDeclarationLines + 1
Do Until Zei \>= .CountOfLines
strMsg = strMsg & .ProcOfLine(Zei, vbext\_pk\_Proc) & Chr(13)
Zei = Zei + .ProcCountLines(.ProcOfLine(Zei, vbext\_pk\_Proc), vbext\_pk\_Proc)
Loop
End With
MsgBox strMsg
End Sub
in Tabelle1:
Option Explicit
'
Private Sub Worksheet\_SelectionChange(ByVal Target As Excel.Range)
Dim wb As String, Mdl As String
If Target.Cells.Count 1 Then Exit Sub
If Target = "" Then Exit Sub
If Target.Column 2 And Target.Column 3 Then Exit Sub
If Target.Row = 1 Then Exit Sub
Select Case Target.Column
Case 2
wb = Cells(Target.Offset(0, -1).End(xlUp).Row, 1).Value
Mdl = Target.Value
Call ProzedurAuflisten(wb, Mdl)
Case 3
wb = Cells(Target.Offset(0, -2).End(xlUp).Row, 1).Value
Mdl = Cells(Target.Offset(0, -1).End(xlUp).Row, 2).Value
On Error Resume Next 'wegen property-Prozedur Fehlern
Call EineProzedurAufListen(wb, Mdl, Target.Value)
Case Else
MsgBox "Ei, wo klickste denn da herum?"
End Select
End Sub