vba搜索函数中的变量

时间:2016-06-27 20:46:52

标签: vba excel-vba excel-vba-mac excel

我已经在这个功能上工作了一段时间,似乎无法让它发挥作用,我也找不到任何有助于解决我的特定问题的帖子。

我想要完成的是能够找到可以在Sheet4的任何一列A:G中的日期,使用Date9中我的活动单元格左侧的一个单元格的Date值。

下面的代码是我到目前为止在我的搜索中有静态值(例如(1/1/16))时有效,但现在我不能使用变量。在我的声明的第二行,我刚才有。选择当我有静态搜索术语并且它有效时,但是一旦我添加了一个变量,我得到了错误"对象变量或With Block not Set",所以我在它前面添加了ActiveCell,但现在只是让它选择我的光标所在的任何单元格。对此的任何帮助将不胜感激。

Sub test()

Dim rFoundCell As Range
Dim vDate As Variant
Dim Expense As Worksheet
Dim Data As Worksheet

Set Expense = Sheet9
Set Data = Sheet4
Set rFoundCell = Range("A1")
Set vDate = ActiveCell.Offset(0, -1)


        Set rFoundCell = Data.Range("A:G").find(What:=vDate, After:=rFoundCell, _
            LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False)

         Sheet4.Activate

         With rFoundCell
            ActiveCell.Select
            ActiveCell.Offset(1, 0).Copy
            Sheets("Expense Data").Select
            Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Transpose:=True
            ActiveCell.Offset(1, 0).Select
         End With

1 个答案:

答案 0 :(得分:1)

Set vDate = ActiveCell.Offset(0, -1)

因为您声明了vDate As Variant,所以此Set指令会指定一个指向Range对象的对象引用

使用实际数据类型声明它,删除Set语句,并为其指定

Dim vDate As String
vDate = ActiveCell.Offset(0, -1).Value

Set rFoundCell = Data.Range("A:G").Find(...)
If rFoundCell Is Nothing Then
    Debug.Print "Not Found!"
    Exit Sub
End If

'rFoundCell cannot be Nothing if we're here
With rFoundCell
    .Select
    '...
End With
  

所以我在它前面添加了ActiveCell,但现在只是让它选择我的光标所在的任何单元格

嗯,这就是ActiveCell的作用。请至少隐式使用.Select.Activate并引用ActiveSheetActiveCell

Set rFoundCell = Range("A1")

Range调用隐含地引用了活动工作表。

Set Expense = Sheet9
Set Data = Sheet4

您应该将Sheet9重命名为Expense,将Sheet4重命名为Data,而不是提供新的对象引用来保存这些引用的副本。在Project Explorer中选择工作表,点击F4并将(name)属性更改为有意义的属性。