我已经在这个功能上工作了一段时间,似乎无法让它发挥作用,我也找不到任何有助于解决我的特定问题的帖子。
我想要完成的是能够找到可以在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
答案 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
并引用ActiveSheet
和ActiveCell
。
Set rFoundCell = Range("A1")
Range
调用隐含地引用了活动工作表。
Set Expense = Sheet9 Set Data = Sheet4
您应该将Sheet9
重命名为Expense
,将Sheet4
重命名为Data
,而不是提供新的对象引用来保存这些引用的副本。在Project Explorer中选择工作表,点击F4并将(name)
属性更改为有意义的属性。