VBA 1004错误从其他工作表中提取数据

时间:2016-08-17 08:05:25

标签: excel vba excel-vba macros

我有一个奇怪的对象/用户定义的1004错误..也许我只是忽略了一些东西。

我正在寻找与我在另一张表上使用的代码非常相似的代码。本质上,工作表是一个仪表板,用户使用的唯一单元格是活动表格中的“b1”,因为这允许用户从选项的下拉菜单中进行选择。更改后,信息应引用ClientDB表以找到正确的行,然后从中提取信息。

我之前使用过非常相似的代码而没有任何障碍..只是想知道我是否有可能忽略的东西?

这是我的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim DBWS As Worksheet, cws As Worksheet, sws As Worksheet
Dim aa As Integer, bb As Integer, cc As Integer, dd As Integer

Set DBWS = ActiveWorkbook.Sheets("ClientDB")
Set cws = ActiveWorkbook.Sheets("ClientBoard")

aa = DBWS.Columns("a").Find(what:=cws.Range("b1").Value, after:=DBWS.Range("a1")).Row
bb = Range("a" & aa).Row


'contact
Range("b3").Value = DBWS.Cells(bb, "H").Value
'number
Range("b4").Value = DBWS.Cells(bb, "I").Value
'email

Range("b5").Value = DBWS.Cells(bb, "J").Value

'等等..等等..

额外注意:如果我运行错误处理程序以绕过1004错误,它将最终在几个错误处理程序循环后填充

非常感谢任何帮助!

谢谢!

3 个答案:

答案 0 :(得分:1)

考虑将DBWS.Columns("a")...更改为DBWS.Columns("a:a")...

a不是有效的参考。

答案 1 :(得分:1)

正如@SickDimesion所提到的,您必须将Columns("a")更改为DBWS.Columns("a:a")或更改为DBWS.Columns(1)

执行此更改后,您可能仍然会收到错误,因为您正在直接尝试获取该行。如果.Find没有返回匹配怎么办?

考虑将您的代码更改为此

Dim aCell as Range

set aCell = DBWS.Columns(1).Find(what:=cws.Range("b1").Value, _
                                 after:=DBWS.Range("a1"))

If Not aCell Is Nothing Then
    aa = aCell.Row
Else
    Msgbox "Value Not Found"
    Exit Sub
End If

答案 2 :(得分:0)

您没有对

的上下文进行限定
bb = Range("a" & aa).Row

Excel不知道此范围引用的工作表。其他不合格的Range语句也是如此。