Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 列表框内部和内部循环错误_Excel_Loops_Listbox_Runtime Error_Vba - Fatal编程技术网

Excel 列表框内部和内部循环错误

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

我试图使用上面的代码在一个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)
        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