Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

pruefen ob Prozedurname vorhanden ist

Forumthread: pruefen ob Prozedurname vorhanden ist

pruefen ob Prozedurname vorhanden ist
12.01.2009 16:35:03
dirk
Hallo Forumsmitglieder,
ich habe mal wieder ein kleines Problem und benoetige Eure Hilfe:
Ich schreibe per VBA Prozeduren in ein VBA Projekt und moechte vor dem Schreiben einer neuen Prozedur pruefen, ob dieser Prozedurname im Projekt schon vorhanden ist.
Ich schreibe die Proceduren in das codemodule in Tabelle1.
Bin euch fuer jede Hilfe dankbar!
Dirk aus Dubai (z.Z. in Saudi Arabia)
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: pruefen ob Prozedurname vorhanden ist
12.01.2009 16:51:13
Jan
Hi,
der Editor hat eine Suchfunktion, ganzes Projekt anhaken und nach ganzem Begriff suchen.
mfg Jan
AW: pruefen ob Prozedurname vorhanden ist
12.01.2009 16:57:00
dirk
Hallo!
Sorry, hab mich nicht genau genug ausgedrueckt:
Ich moechte das in meinem Code pruefen, bevor ich den neuen Code schreibe, damit der nameconvention Fehler nicht auftritt, falls ein Macroname mehrmals existiert.
Ich braeuchte da eine Funktion oder check-Kommando.
Danke im Voraus
Dirk aus Dubai
Anzeige
AW: pruefen ob Prozedurname vorhanden ist
12.01.2009 17:12:00
Hajo_Zi
Halolo drk,
fange an die ersten Buchstaben von Deiner neuen Orozedur zu schreiben und nach ca. 3 Buchstaben strg+Leerstelle und er zeigt Dir welche er schon hat die mit diesen Buchstaben beginnen.

AW: pruefen ob Prozedurname vorhanden ist
12.01.2009 17:27:50
dirk
Hallo nochmal,
hier zur Verdeutlichung mal etwas code:
Private sub
If i = 10 Then
'here comes some code to make the last checkbox react on clicking
LastButton = Selection.Name
'Put Code for the Button
'dimension the variables to add macro code in code module
'Open WBpath & "\" & "Trackreport.txt" For Append As 1
'Print #1, "Try to write macro code for button 10"
'Close 1
'Application.ScreenUpdating = False
'find last row in existing code
'cLines = ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule.CountOfLines + 1
With Workbooks(WBname).VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.InsertLines cLines + 1, "

Private Sub " & LastButton & "_Click()"
.InsertLines cLines + 2, "If bActive = True then Exit Sub"
.InsertLines cLines + 3, "LCell = ActiveSheet.OLEObjects(" & """" & LastButton & """" & _
").LinkedCell"
.InsertLines cLines + 4, "Range(LCell).Select"
.InsertLines cLines + 5, "Activecell.Offset(0, -14).Select"
.InsertLines cLines + 6, "If ActiveCell.Value = " & """" & "Other reason (Please  _
specify here)" & """" & "Then"
.InsertLines cLines + 7, "If Range(LCell).Value = " & """" & "True" & """" & " Then"
.InsertLines cLines + 8, "again:"
.InsertLines cLines + 9, "   OReason = InputBox(" & """Please describe the other  _
reason(s) for non compliance.""" & "," & """Non-compliance reasons""" & "," _
& """Other reason (Please specify here)""" & ")"
.InsertLines cLines + 10, "   If OReason = """" Then"
.InsertLines cLines + 11, "again2:"
.InsertLines cLines + 12, "tmpstr = MsgBox(" & """No valid entry. Try again?""" & ", _
vbRetryCancel)"
.InsertLines cLines + 13, "if not tmpstr = 4 then"
.InsertLines cLines + 14, "'Cancel had been selected by user'"
.InsertLines cLines + 15, "    bActive = True"
.InsertLines cLines + 16, "    Range(lcell).Value = " & """" & "False" & """"
.InsertLines cLines + 17, "    OReason = " & """" & "Please describe the other reason( _
s) for non compliance." & """"
.InsertLines cLines + 18, "    bActive = False"
.InsertLines cLines + 19, "    Exit Sub"
.InsertLines cLines + 20, "   Else"
.InsertLines cLines + 21, "    goto again"
.InsertLines cLines + 22, "   end if"
.InsertLines cLines + 23, "  End If"
.InsertLines cLines + 24, "  If Oreason = " & """" & "Other reason (Please specify here)"  _
& """" & " then"
.InsertLines cLines + 25, "   goto again2:"
.InsertLines cLines + 26, "  end if"
.InsertLines cLines + 27, "  ActiveCell.Value = OReason"
.InsertLines cLines + 28, "End If"
.InsertLines cLines + 29, " Else"
.InsertLines cLines + 30, "  ActiveCell.Value = " & """" & "Other reason (Please specify  _
here)" & """"
.InsertLines cLines + 31, "End If"
.InsertLines cLines + 32, " "
.InsertLines cLines + 33, "End Sub

"
End With
'Open WBpath & "\" & "Trackreport.txt" For Append As 1
'Print #1, "Button code for button 10 done"
'Close 1
jump:
End If
Next i
Der Name der Prozedur richtet sich nach dem Wert der Angelegten Checkbox und ich brauche im Macro die Pruefung, ob dieser Macroname schon vorhanden ist.
Gruesse
Dirk aus Dubai

Anzeige
AW: pruefen ob Prozedurname vorhanden ist
12.01.2009 18:28:00
Roland
Hallo Dirk,
als Ansatz (ohne Fehlerbehandlung etc.)

Private Function MakroVorhanden(ModulName As String, Bezeichnung As String) As Boolean
MakroVorhanden = ThisWorkbook.VBProject.VBComponents(ModulName).CodeModule.ProcStartLine( _
Bezeichnung, vbext_pk_Proc)  0
End Function


Sub test()
MsgBox MakroVorhanden("Modul1", "MakroVorhanden")
End Sub


Kommst Du damit weiter?
Gruß aus dem etwas kühleren Berlin
Roland Hochhäuser

Anzeige
AW: pruefen ob Prozedurname vorhanden ist
13.01.2009 09:04:00
dirk
Hallo!
Leider funktioniert das bei mir nicht. Steigt mit Fehler aus.
Ich habe fuer ModulName activeworkbook.sheet1.name und fuer Bezeichnung Bezeichnung="Private Sub " & lastbutton & "_Click"
lastbutton is zugewiesen mit lastbutton = Selection.Name waehrend der button ausgewaehlt ist.
Woran kann das liegen?
Danke fuer eure Hilfe.
Dirk aus Dubai
Anzeige
AW: pruefen ob Prozedurname vorhanden ist
13.01.2009 10:03:18
Roland
Hallo Dirk,
setze zunächst einen Verweis auf Microsoft Visual Basic for Applications Extensibility 5.3 (Extras / Verweise und dann anhaken).
Übergib dann mal ActiveWorkbook.Sheets(1).Name (mit s und Klammern), und den reinen Prozedurnamen ohne "Private Sub", dann müsste es klappen, also so:

Sub test()
MsgBox MakroVorhanden(ActiveWorkbook.Sheets(1).Name, lastbutton & "_Click")
End Sub


Gruß von
Roland Hochhäuser

Anzeige
AW: pruefen ob Prozedurname vorhanden ist
13.01.2009 11:50:00
dirk
Hallo!
Klappt!
Danke
Dirk aus Dubai
Danke fürs Feedback o.w.T.
13.01.2009 11:55:00
Roland
AW: pruefen ob Prozedurname vorhanden ist
12.01.2009 17:12:03
Hajo_Zi
Halolo drk,
fange an die ersten Buchstaben von Deiner neuen Orozedur zu schreiben und nach ca. 3 Buchstaben strg+Leerstelle und er zeigt Dir welche er schon hat die mit diesen Buchstaben beginnen.

Anzeige
Anzeige

Infobox / Tutorial

Überprüfung von Prozedurnamen in VBA


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob ein Prozedurname bereits in deinem VBA-Projekt existiert, kannst du eine Funktion erstellen. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > "Einfügen" > "Modul").

  3. Kopiere und füge den folgenden VBA-Code in das Modul ein:

    Private Function MakroVorhanden(ModulName As String, Bezeichnung As String) As Boolean
       On Error Resume Next
       MakroVorhanden = ThisWorkbook.VBProject.VBComponents(ModulName).CodeModule.ProcStartLine(Bezeichnung, vbext_pk_Proc) > 0
       On Error GoTo 0
    End Function
    
    Sub test()
       Dim lastbutton As String
       lastbutton = "YourProcedureName" ' Ändere dies in den tatsächlichen Namen
       MsgBox MakroVorhanden(ActiveWorkbook.Sheets(1).Name, lastbutton & "_Click")
    End Sub
  4. Ersetze YourProcedureName mit dem Namen der Prozedur, die du überprüfen möchtest.

  5. Führe das test-Sub aus, um zu sehen, ob die Prozedur vorhanden ist.


Häufige Fehler und Lösungen

  • Fehler: "Methode 'ProcStartLine' konnte nicht gefunden werden."

    • Stelle sicher, dass du einen Verweis auf "Microsoft Visual Basic for Applications Extensibility 5.3" gesetzt hast. (Extras > Verweise und dann anhaken).
  • Fehler: "Typen sind inkompatibel."

    • Überprüfe, ob du den korrekten Modulnamen und die korrekte Bezeichnung übergibst. Die Bezeichnung sollte nur den Prozedurnamen ohne "Private Sub" enthalten.

Alternative Methoden

Eine andere Möglichkeit zur Überprüfung von Prozedurnamen ist die Verwendung der AutoVervollständigung im VBA-Editor:

  1. Beginne, den Namen deiner neuen Prozedur einzugeben.
  2. Drücke nach etwa drei Buchstaben Strg + Leertaste.
  3. Der Editor zeigt dir eine Liste der Prozedurnamen, die mit diesen Buchstaben beginnen.

Diese Methode ist hilfreich, um schnell zu sehen, welche Prozeduren bereits existieren, ohne den Code manuell durchsuchen zu müssen.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Funktion in deinem Projekt verwenden kannst:

Sub BeispielVerwendung()
    Dim buttonName As String
    buttonName = "MeinButton" ' Setze hier den Namen deines Buttons
    If MakroVorhanden(ActiveWorkbook.Sheets(1).Name, buttonName & "_Click") Then
        MsgBox "Prozedur '" & buttonName & "_Click' existiert bereits."
    Else
        MsgBox "Prozedur '" & buttonName & "_Click' ist noch nicht vorhanden."
    End If
End Sub

In diesem Beispiel wird überprüft, ob die Prozedur für einen Button bereits existiert und du erhältst eine entsprechende Meldung.


Tipps für Profis

  • Verwende klare Namenskonventionen: Um Verwirrung zu vermeiden, halte dich an ein einheitliches Namensschema für deine Prozeduren.
  • Dokumentiere deine Prozeduren: Füge Kommentare in deinen Code ein, um den Zweck jeder Prozedur zu erklären. Das erleichtert die Wartung und Überprüfung.
  • Nutze die VBA-Fehlerbehandlung: Implementiere Fehlerbehandlung in deinen Funktionen, um unerwartete Probleme elegant zu lösen.

FAQ: Häufige Fragen

1. Wie kann ich überprüfen, ob eine Prozedur in einem anderen Modul existiert?
Du kannst die gleiche Funktion MakroVorhanden verwenden, indem du den Namen des anderen Moduls als Argument übergibst.

2. Was ist, wenn ich mehrere Prozeduren mit dem gleichen Namen habe?
In VBA kannst du keine zwei Prozeduren mit dem gleichen Namen im gleichen Modul haben. Wenn du jedoch in verschiedenen Modulen arbeitest, achte darauf, dass die Module unterschiedliche Namen haben, um Verwechslungen zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige