2016-08-12 25 views
1

目标:创建一个用户表单并获取用户输入,然后从用户输入将其放入列表中,当您单击该列表时,它会自动在整个工作簿中找到它。将数组作为参数传递给列表框时的错误

是这样的:

enter image description here

我看到这个帖子:Match in whole workbook

我创造出来的东西是:

Public Sub CommandButton3_Click() 

    Dim TempArray As Variant 
    Dim RealArray() 

    TempArray = Application.InputBox("Select a range", "Obtain Range Object", Type:=64) 
    ArrayRows = UBound(TempArray) 
    ReDim RealArray(1 To ArrayRows) 
    For i = 1 To ArrayRows 
     RealArray(i) = TempArray(i, 1) 
    Next i 

    MsgBox "The number if rows selected are " & ArrayRows 
    ListBox1.List = RealArray 
    ListBox1 Arraay:=RealArray 

End Sub 

Public Sub ListBox1_Click(ByRef Arraay() As Variant) 
    Dim Sh As Worksheet 
    Dim something As Range 
    Dim ArrayRows As Long 

    For Each Sh In ThisWorkbook.Worksheets 

     With Sh.UsedRange 
      For i = 1 To ArrayRows 
       Set something = RealArray.Find(What:=RealArray(i)) 
       If Not something Is Nothing Then 
        Do Until something Is Nothing 
         test = something.Value 
         Set something = .FindNext(something) 
        Loop 
       End If 
      Next i 
     End With 
     Set something = Nothing 

    Next 
End Sub 

创建此之后,我得到一个错误关于第二个子。

过程声明不匹配事件或过程具有相同名称

+0

'公用Sub ListBox1_Click(为ByRef Arraay()为Variant)'这不带任何参数。它应该是'ListBox1_Click()' –

+0

@SiddharthRout但是我怎么传递子之间的数组?这不是那种方法吗?对不起,我对VBA很陌生 –

回答

1

列表框中单击事件不带任何参数的描述。

Private Sub ListBox1_Click() 

End Sub 

如果你想传递子之间的数组,那么你可以因此这样

Dim MyArray() As Variant 

Public Sub CommandButton3_Click() 
    '~~> Initialize array 
End Sub 

Private Sub ListBox1_Click() 
    '~~> Use array here 
    '~~> Also put an error check if the array is initialized or not 
End Sub 
相关问题