2016-06-15 10 views
0

Ich habe versucht, die Benutzerformulare des ActiveWorkbook über meine Personal.xlsb zu durchlaufen, kann aber nicht die Syntax richtig erhalten. Hier ist, was ich versucht habe (unter einer Zillion anderer Versuche)Schleife durch Benutzerformular-Steuerelemente in anderen Arbeitsmappe

wbname = ActiveWorkbook.Name 

For Each UFm In Workbooks(wbname).Parent.UserForms 
    For Each cntrl In UFm 

    Next cntrl 
Next UFm 

Gedanken?

Dank

Dan

+0

Was sind Sie eigentlich zu den Kontrollen zu tun versuchen, ? – Rory

+0

Hallo Rory, ich habe versucht, die Benutzerformulare zu einem Listenfeld hinzuzufügen, wenn Sie darauf klicken, listet alle Objekte in diesem UF in der sekundären Listbox auf. Ich sollte die folgenden Links verwenden können, um es herauszufinden. Vielen Dank! – ExcelVbaIsFun

Antwort

2

"Workbooks (wbname) .Parent" ist das Objekt Anwendung.

Die Anwendung enthält eine "Userforms" -Auflistung - dies ist jedoch nur eine Sammlung von Benutzerformularen, die derzeit geladen sind, und enthält nicht alle Benutzerformulare, die als Codemodule in Ihrem VBA-Projekt vorhanden sind.

Sie müssten über den VBA-Editor auf die Codemodule der Benutzerformulare zugreifen. Bitte beachten Sie:

http://www.cpearson.com/excel/vbe.aspx - Anleitung dazu, wie Sie Code für den Zugriff auf Module selbst

How do I load every UserForm without having to call .Show individually? - Eine weitere Frage auf dieser Seite, die Sie in die richtige Richtung zeigen kann.

0

Schleife Benutzerform Steuerelemente sogar in einer anderen Arbeitsmappe ist nicht trivial. Eine mögliche Lösung erfordert VBE-Referenz zu MS Visual Basic für Applikationen-Erweiterbarkeit 5.3.

finde ich nicht ein komplettes Beispiel überall, so dass die folgenden Arbeits Code helfen könnten:

Sub ListAllControls() 
Dim vbc As VBIDE.VBComponent   ' Reference to MS VBA Exte 5.3 !!! 
Dim ctrl As MSForms.Control 
Dim sMsg, sLit As String 
Dim cnr, vbcnr As Long 
Dim i, imax As Integer 
imax = Workbooks.Count 
'------------------ 
'Loop all Workbooks 
'------------------ 
For i = 1 To imax 
    sLit = Chr(i + 64) & "." 
    ' a) build message new workbook 
    sMsg = sMsg & vbNewLine & String(25, "=") & vbNewLine & sLit & " WorkBook: " & _ 
      Workbooks(i).Name & _ 
      vbNewLine & String(25, "=") 
    '------------------- 
    'Loop all Components 
    '------------------- 
    For Each vbc In Workbooks(i).VBProject.VBComponents 
     ' Only if Component type is UserForm 
     If vbc.Type = vbext_ct_MSForm Then 
     ' increment component and ctrl counters 
      vbcnr = vbcnr + 1000 
      cnr = vbcnr 
     ' b) build message new component 
      sMsg = sMsg & vbNewLine & String(25, "-") & vbNewLine & sLit & cnr & " '" & _ 
        vbc.Name & "'" & vbNewLine & String(25, "-") 
     '------------------ 
     ' Loop all Controls 
     '------------------ 
      For Each ctrl In Workbooks(i).VBProject.VBComponents(vbc.Name).Designer.Controls 
      ' increment ctrl counter 
       cnr = cnr + 1 
      ' c) build messages controls) 
       sMsg = sMsg & vbLf & " " & Format(cnr, "0 000") & " " & _ 
         ctrl.Name 
      Next 
     End If 
    Next vbc 
    Next i 
Debug.Print sMsg 
End Sub 

Haben Sie Spaß,

Tony

Verwandte Themen