变量在vba搜索功能



我已经在这个函数上工作了一段时间,似乎不能让它工作,也没有我能找到任何帮助解决我的特定问题的帖子。

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

下面的代码是我到目前为止工作时,我有静态值,如(1/1/16)在我的搜索,但现在不工作,我试图使用一个变量。在我的语句的第二行,我刚刚有。选择当我有静态搜索条件,它工作,但是一旦我添加了一个变量,我得到了错误"对象变量或与块不设置",所以我添加了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
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,而不是提出新的对象引用来保存这些引用的副本。在项目资源管理器中选择工作表,按F4并将(name)属性更改为有意义的内容。

相关内容

  • 没有找到相关文章

最新更新