【发布时间】:2017-06-12 11:38:42
【问题描述】:
我是 excel vba 的新手,我目前被这个问题困住了。希望有人能指出我正确的方向。
我正在搜索从该月的最后一天开始的一系列单元格。 例如:
varEOM = "31"
varMM = "03"
varYYYY = "2006"
如果 2006 年 3 月 31 日没有数据,则它不会出现在列表/列中。因此,我想以编程方式回顾 30 日、29 日等。我正在回顾 10 年的数据。
另外,由于数据的性质,varYYYY、varMM 和 varEOM 是字符串而不是整数,所以我认为我需要在某个时候将它们从字符串转换为整数。
我在寻找一种合理的方式来循环和递减计数器直到达到有效日期时遇到问题。
这是我目前的代码:
Dim varYYYY As String, varMM As String, varEOM As String, varInteger As Integer, varString As String
varEOM = "31"
varMM = "03"
varYYYY = "2006"
varInteger = CInt(varEOM)
varValueToFind = varYYYY & varMM & varEOM
Do Until Not IsNull(el)
Set rng = Range("b1", Range("b65536").End(xlUp))
' Find the cell reference on the varValuetoFind
Set el = rng.Find(varValueToFind, LookIn:=xlValues)
Set fl = rng.Find(varValueToFind, LookAt:=xlPart)
Debug.Print varYYYY
Debug.Print varMM
Debug.Print varEOM
Debug.Print el
Debug.Print fl.Address
Debug.Print varValueToFind
varInteger = varInteger - 1
Debug.Print varInteger
Loop
如果 31 日有数据,则代码有效。但是如果 31 号没有数据,需要回溯到 20060330,那么代码就崩溃了。
提前致谢。任何帮助将不胜感激。
【问题讨论】:
-
如果有多个相同的日期怎么办?
-
旁注:我建议不要使用
Integer,除非您需要与旧 API 通信。而是始终使用Long和CLng()。阅读here 了解更多信息以及原因。