Excel 列表框内部和内部循环错误
我试图使用上面的代码在一个userform中遍历多个列表框。列表框从Sheet1上的命名范围派生数据,然后将标题传递给Sheet2。Sheet1范围按编号与列表框对齐。很遗憾,我收到一个运行时错误“13”:引用行的类型不匹配:Excel 列表框内部和内部循环错误,excel,loops,listbox,runtime-error,vba,Excel,Loops,Listbox,Runtime Error,Vba,我试图使用上面的代码在一个userform中遍历多个列表框。列表框从Sheet1上的命名范围派生数据,然后将标题传递给Sheet2。Sheet1范围按编号与列表框对齐。很遗憾,我收到一个运行时错误“13”:引用行的类型不匹配: Dim InputCol, InputIndex, i As Long Dim lb As ListBox InputCol = 1 For i = 1 To 7 Set lb = Me.Controls("ListBox" & i) F
Dim InputCol, InputIndex, i As Long
Dim lb As ListBox
InputCol = 1
For i = 1 To 7
Set lb = Me.Controls("ListBox" & i)
For InputIndex = 0 To lb.ListCount - 1
If lb.Selected(InputIndex) Then
Sheets("Sheets2").Cells(1, InputCol) = Sheets("Sheet1").Range("Input" & i).Cells(InputIndex)
InputCol = InputCol + 1
End If
Next
Next i
有什么想法吗?使用下面的代码在
UserForm
中循环遍历所有控件
,并检查当前控件是否是列表框
注意:Dim InputCol,inputinex,i作为Long
,表示只有i
被定义为Long
,而InputCol
和inputinex
被定义为变体
代码
Set lb = Me.Controls("ListBox" & i)
非常感谢Shai Rado为我指明了正确的方向。以下代码用于循环遍历userform上的所有列表框,并将每个选定项传递到Sheet2上的标题行:
Dim InputCol As Long, InputIndex As Long, i As Long
Dim lb As Control
InputCol = 1
' loop through all control in UserForm
For Each lb In Me.Controls
' check if current Control is a LitBox
If TypeName(lb) = "ListBox" Then
With lb
' rest of your code goes here
End With
End If
Next lb
我还是VBA新手,所以请提前道歉。原始代码的哪一部分可以放在“With lb”之后?我试着在代码中放入从“For I=1到7”到“Next I”的所有内容,但这导致同一单元格被复制到Sheet2 7次。我还尝试在“下一磅”之前删除I并创建I=I+1,但随后我开始接收定义的范围错误。出于某种原因,debug突出显示了复制工作表到工作表的行,并显示i=19(这很有意义,没有“Input19”命名范围,只有Input1到Input7)。感谢任何进一步的澄清!
Private Sub CommandButton1_Click()
Dim InputCol As Long, InputIndex As Long, i As Long
Dim lb As Control
InputCol = 1
With lb
For i = 1 To 7
Set lb = Me.Controls("ListBox" & i)
For InputIndex = 0 To lb.ListCount - 1
If lb.Selected(InputIndex) Then
Sheets("Sheet2").Cells(1, InputCol) = _
Sheets("Sheet1").Range("Input" & i).Cells(InputIndex + 1)
InputCol = InputCol + 1
End If
Next
Next i
End With
Unload Me
End Sub