查找功能在第二次运行宏

时间:2016-09-16 14:11:25

标签: excel vba

我使用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'查找并且在第二次运行期间一切正常。

1 个答案:

答案 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的日期转换,我可以重新创建您的问题,但如果我对这行代码进行注释,则无法重新创建。