Remove the RowSource and populate the listbox on activation. This helps ensure compatibility; better thought to use Find & Offset in case data is changed and the Row is not correct.
Private Sub UserForm_Activate()Dim r As Range
With Sheets("Macros")
Set r = Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
End With
Me.ListBox100.List = r.Value
End Sub
You can avoid the loop in the code
Private Sub ListBox100_Change() ' or click the item
Dim ws As Worksheet
Dim i As Integer
Set ws = Worksheets("Macros")
i = ListBox100
Application.Run ws.Cells(i + 2, 2).Value
End Sub