我已经在这个函数上工作了一段时间,似乎不能让它工作,也没有我能找到任何帮助解决我的特定问题的帖子。
我想要完成的是能够找到可能在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
,并且至少隐式地引用ActiveSheet
和ActiveCell
。
Set rFoundCell = Range("A1")
Range
调用隐式地引用活动工作表。
Set Expense = Sheet9 Set Data = Sheet4
您应该将Sheet9
重命名为Expense
,将Sheet4
重命名为Data
,而不是提出新的对象引用来保存这些引用的副本。在项目资源管理器中选择工作表,按F4并将(name)
属性更改为有意义的内容。