我使用Excel 2013并在几秒钟之后运行一次后再次运行宏。
在我第一次运行时,宏名义上运行。但是,如果我第二次尝试运行它,我的代码的一部分(主要是使用range.find)在我希望找到的东西时不会返回任何内容。
有问题的代码:
If facilsheet.Cells(d.Row, d.Column + 2).Value <> vbNullString Then
If facilsheet.Cells(d.Row, d.Column + 2).Value <> "--" Then
net_event = facilsheet.Cells(d.Row, d.Column + 2).Value
net_event = CDate(net_event)
Debug.Print net_event
Debug.Print "net_event is a " & TypeName(net_event)
Debug.Print timelinesheet.Cells(3, 4).Value
Debug.Print "timelinesheet cell is " & TypeName(timelinesheet.Cells(3, 4).Value)
Set rng2 = timelinesheet.Range("3:3").Find(what:=net_event, MatchCase:=False)
End if
End If
我第一次运行代码(名义情况,当一切正常时),调试返回:
2016年9月6日
net_event是一个字符串
2016年9月6日
时间表单元格是日期
并且rng2不是什么。
第二次运行时,调试返回与上面相同的内容,但rng2为Nothing。
我尝试明确说明Find的所有参数,看看是否可行。
'timelinesheet'是一个公共变量。这可能是公共变量问题吗?在我的宏中还有其他地方,我使用'timelinesheet'查找并且在第二次运行期间一切正常。
答案 0 :(得分:0)
我非常怀疑这是一些公共变量问题,如某些评论所述。
这对我有用:
Sub test()
Dim facilsheet As Excel.Worksheet, timelinesheet As Excel.Worksheet
Dim net_event, rng2 As Range
' for testing purposes only
Set facilsheet = ThisWorkbook.Sheets(1)
Set timelinesheet = ThisWorkbook.Sheets(2)
net_event = facilsheet.Cells(1, 1).Value
' purposely commented out
'net_event = CDate(net_event)
Debug.Print net_event
Debug.Print "net_event is a " & TypeName(net_event)
Debug.Print timelinesheet.Cells(3, 4).Value
Debug.Print "timelinesheet cell is " & TypeName(timelinesheet.Cells(3, 4).Value)
Set rng2 = timelinesheet.Rows(3).Find(what:=net_event, MatchCase:=False) ' notice I changed Range to Rows
Debug.Print "rng2.Address: " & rng2.Address
End Sub
我怀疑你的问题是因为我已经注释掉的行中的日期转换,并且因为在执行之间改变了所讨论的一个/两个单元格的格式。如果我在sub的执行之间更改net_value
单元格的格式并且我执行net_event
的日期转换,我可以重新创建您的问题,但如果我对这行代码进行注释,则无法重新创建。