【问题标题】:VBA Combo Box in Excel for Search Engine Invalid property-array index (Error 381)用于搜索引擎的 Excel 中的 VBA 组合框无效的属性数组索引(错误 381)
【发布时间】:2022-12-17 16:11:23
【问题描述】:

附加信息。

vba代码是搜索引擎,目的是在我用公式过滤的另一张纸上获取客户详细信息(姓名)列表。

这是背景数据工作表。 Worksheets "background data" 通过使用我在组合框中输入的值进行过滤。

它适用于组合框, This is the result 但是当我点击任何客户名称时, 弹出下面的错误。

我对 excel 中的 vba 代码有疑问

你们能帮我解决这个错误吗?

无效的属性数组索引(错误 381)

Option Explicit

 Private Comb_Arrow As Boolean

 Private Sub search_engine_Change()
 Dim i As Long

    If Not Comb_Arrow Then
    With Me.search_engine
       .list = Worksheets("BACKGROUND DATA").Range("B2", Worksheets("BACKGROUND DATA").Cells(Rows.Count, "B").End(xlUp)).Value
       .ListRows = Application.WorksheetFunction.Min(4, .ListCount)
       .DropDown
           If Len(.Text) Then
                For i = .ListCount - 1 To 0 Step -1
                   If InStr(1, .list(i), .Text, vbTextCompare) = 0 Then .RemoveItem i
                     Next
                      .DropDown
                       End If
     End With
     End If

End Sub


Private Sub search_engine_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Comb_Arrow = (KeyCode = vbKeyUp) Or (KeyCode = vbKeyDown)
    If KeyCode = vbKeyReturn Then Me.search_engine.list = Worksheets("BACKGROUND DATA").Range _
    ("B2", Worksheets("BACKGROUND DATA").Cells(Rows.Count, "B").End(xlUp)).Value
End Sub

【问题讨论】:

  • 要调试它,我们需要确切地知道是哪一行导致错误,以及错误发生时变量的值

标签: excel vba excel-formula


【解决方案1】:

私有子 search_engine_Change() 调暗我,LRow As Long LRow = Worksheets("背景数据").Cells(Rows.Count, 2).End(xlUp).Row 如果 LRow > 1 那么 如果不是 Comb_Arrow 那么 With Me.search_engine 搜索引擎 .List = Worksheets("BACKGROUND DATA").Range("B1", Worksheets("BACKGROUND DATA").Cells(Rows.Count, "B").End(xlUp)).Value .RemoveItem 0 .ListRows = Application.WorksheetFunction.Min(4, .ListCount) '。落下 如果 Len(.Text) 那么 对于 i = .ListCount - 1 到 0 步骤 -1 如果 InStr(1, .List(i), .Text, vbTextCompare) = 0 那么 .RemoveItem i 下一个 ' 。落下 万一 结束于 万一 万一 结束子 Private Sub search_engine_KeyDown(ByVal KeyCode As MSForms.ReturnInteger,ByVal Shift As Integer) Comb_Arrow = (KeyCode = vbKeyUp) 或 (KeyCode = vbKeyDown) 如果 KeyCode = vbKeyReturn 那么 Me.search_engine.List = Worksheets("BACKGROUND DATA").Range _ ("B1", Worksheets("背景数据").Cells(Rows.Count, "B").End(xlUp)).Value 结束子

【讨论】:

    【解决方案2】:

    问题在于这一行:

    .list = Worksheets("BACKGROUND DATA").Range("B2", Worksheets("BACKGROUND DATA").Cells(Rows.Count, "B").End(xlUp)).Value
    

    范围对象只接受一个参数,您正在尝试发送它 2。如果您希望有一个多单元格范围,例如 B2:B5,那么您不能采用该范围的值,因为它将有多个值.这条线周围似乎有多个问题。

    如果您提供更多关于您要实现的目标的数据,这将有进一步的帮助。你想用第二个参数达到什么目的?你在寻找什么价值?

    【讨论】:

    • 您好感谢您的回答。我只是在上面添加了一些更多信息,当更改范围时它仍然会发生。
    • 你把它改成了什么?你有同样的错误吗?
    • 你需要做的不仅仅是改变范围。您使用范围对象的方式不正确。您的范围对象是这样的: Range("B2", Worksheets("BACKGROUND DATA").Cells(Rows.Count, "B").End(xlUp)) "B2" 之后的逗号表示您要发送到的第二个参数范围对象。它只能接受一个参数。此外,Cells 对象只需要数字,不能向它发送文本“B”。您必须将 B 列称为第 2 列。
    • 根据您的描述,我相信您正在尝试从 B2:End of Columm B 开始范围。如果这是真的,那么列表行看起来像这样:.list = Worksheets("Sheet1").Range("B2: B" & Worksheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row) 如果这不是您想要的,那么您需要更好地解释工作表和您想要的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多