他のブックでもユーザーフォームコントロールをループするのは簡単ではありません。可能な解決策には、Visual Basic for Applications Extensibility 5.3へのVBE参照が必要です。
次の作業のコードを助けるかもしれないので、私は、どこにでも完全な例を見つけることができませんでした:
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
は楽しみを持って、
トニー
あなたが実際にコントロールに行うために何をしようとしています? – Rory
こんにちはRoryさん、リストフォームにユーザーフォームを追加しようとしましたが、クリックするとそのUFのすべてのオブジェクトがセカンダリリストボックスに表示されます。私はそれを理解するために下のリンクを使用することができるはずです。ありがとう! – ExcelVbaIsFun