VBA错误1004应用程序定义错误或对象定义

时间:2019-01-25 14:44:31

标签: excel vba

如果可能,我会寻求帮助。
我在同一工作簿中有两个工作表。通过表单,我搜索“ Dados”工作表并将结果复制到“ Pesquisa”工作表。结果显示在列表视图中。当我双击结果时,会发生:“错误1004应用程序定义错误或对象定义” 。我不了解发生错误的原因,因为我已经检查了代码,没有发现任何问题。

非常感谢您的帮助。在下面,按照我的代码。

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)  
      Sheets("Dados").Range("A" & Sheets("Pesquisa").Range("W" & ListBox1.ListIndex + 2)).Select
    End Sub

3 个答案:

答案 0 :(得分:4)

Sheets("Dados").Range("A" & Sheets("Pesquisa").Range("W" & ListBox1.ListIndex + 2)).Select

很多事情都在一个语句中进行,并且有几个错误原因。

将其分解。

首先获取您的Worksheet对象:

Dim dadosSheet As Worksheet
Set dadosSheet = ActiveWorkbook.Worksheets("Dados") 'possible error 9 here

Dim pesquisaSheet As Worksheet
Set pesquisaSheet = ActiveWorkbook.Worksheets("Pesquisa") 'possible error 9 here

接下来,我们要在Range的列W中建立一个ListBox1.ListIndex地址字符串,并从rowIndex的那个单元格中获得一个pesquisaSheet

Dim rowSourceAddress As String
rowSourceAddress = "W" & ListBox1.ListIndex + 2 ' definitely a positive integer

Dim rowIndex As Long
rowIndex = pesquisaSheet.Range(rowSourceAddress).Value ' possible error 13 here
Debug.Assert rowIndex > 0 ' suspect this assertion will fail

然后,我们要在列Range中建立另一个A地址字符串:

Dim targetAddress As String
targetAddress = "A" & rowIndex ' if rowIndex isn't a positive integer...

Dim targetRange As Range
Set targetRange = dadosSheet.Range(targetAddress) '...error 1004 is thrown here

最后,我们要Select该范围:

targetRange.Select

当然,这是更多的代码-局部变量可能比需要的多。但是,由于所有内容都是显式的,并且每个成员都在其自己的指令中进行调用,因此任何给定指令只有一个失败原因,这使得调试变得更加容易。

答案 1 :(得分:2)

不确定这是否是问题所在,但您可能需要在表达式中包含.Value

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)  
    Sheets("Dados").Range("A" & Sheets("Pesquisa").Range("W" & ListBox1.ListIndex + 2).Value).Select
End Sub

此外,您是否确信Sheets("Pesquisa").Range("W" & ListBox1.ListIndex + 2).Value处的值是正整数?如果没有,这将引发您收到的错误。

答案 2 :(得分:1)

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "You selected:" & vbCrLf & ListBox1.ListIndex & ": " & ListBox1.List(ListBox1.ListIndex)
    'Sheets("Dados").Range("A" & Sheets("Pesquisa").Range("W" & ListBox1.ListIndex + 2)).Select
End Sub