Private Sub CommandButton1_Click()
Dim ws As Worksheet, Cel As Range, Ctrl As Control, pg As Object, labl As Object
Set ws = Sheets.Add
With ws.Range("A1:C1")
.Value = Array("Name", "Caption", "Where")
.EntireColumn.ColumnWidth = 40
End With
On Error Resume Next 'lazy but avoids hiccups!
'loop Frames and list their labels
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.Frame Then
For Each labl In Ctrl.Controls
If TypeOf labl Is MSForms.Label Then Call WriteToSheet(Ctrl.Name, labl, ws)
Next labl
End If
Next Ctrl
'loop MultiPages and list their lablels
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.MultiPage Then
For Each pg In Ctrl.Pages
For Each labl In pg.Controls
If TypeOf labl Is MSForms.Label Then Call WriteToSheet(Ctrl.Name & " " & pg.Name, labl, ws)
Next labl
Next pg
End If
Next Ctrl
'other labels
For Each Ctrl In Me.Controls
If WorksheetFunction.CountIf(ws.Range("A:A"), Ctrl.Name) = 0 Then
If TypeOf Ctrl Is MSForms.Label Then Call WriteToSheet("not identified", Ctrl, ws)
End If
Next Ctrl
On Error GoTo 0
End Sub
Private Sub WriteToSheet(Desc As String, lbl As Object, ws As Object)
ws.Cells(ws.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 3).Value = Array(lbl.Name, lbl.Caption, Desc)
End Sub