【发布时间】:2014-07-16 19:58:24
【问题描述】:
我的老板保留了一个小型 Excel 文件,该文件模仿了我们用来跟踪工作中随机事物的台历,例如小时数和发送报告的数量。它以 7x5 的网格布局(大约 5 个,最后一行只有几个单元格,因为月份通常不能被 7 整除)。
日期和这样的工作方式是第一个单元格 A1 具有该月的第一个日期。随后的每个单元格都是由我的老板手动编码的,以获取它前面的瓦片中日期单元格的值并加 1。但是,这些单元格不是并排的,它们是展开的。我试图将每周的总小时数(和报告)相加,但是当我尝试调用 Cells.Find 方法时,它不会返回任何内容。
我认为可能是因为单元格以mm/dd/yy 的美国方式格式化,所以我尝试搜索05/12/14,但没有成功。所以我试图搜索Date()函数返回的默认日期格式m/d/yyyy,但它仍然没有找到任何东西。我试图设置.Find() 来检查值和公式,但都不起作用。即使我使用ctrl+F 手动找到它们,它也会告诉我工作表中没有这样的值。
我四处搜索,发现没有一个帖子有有效的解决方案 - Cells.Find 方法总是在第一次调用时返回 A1,或者在每次后续调用时返回 Nothing .
我的代码目前很少,但在这里。
代码
Sub Worksheet()
Dim r As Range, d As Date, fwkn As Integer, lwkn As Integer, wkn As Integer, col As Collection
'The purpose of this is to get the week totals using the below functions.
d = DateValue([A1].Value)
fwkn = WeekNum(d) 'First week number
d = DateSerial(Year(d), month(d) + 1, 1) - 1 'Gets us the last day of the month
lwkn = WeekNum(d) 'Last Week Number
last_of_month = Day(d)
For i = 1 To last_of_month
d = DateSerial(Year(d), month(d), i)
Set r = Cells.Find(What:=d, LookIn:=xlFormulas, LookAt:=xlWhole, After:=Range("a1"))
If Not r Is Nothing Then
Debug.Print r.Address
End If
Next
End Sub
Function WeekNum(d As Date) As Integer
' You can see examples of this at
' http://www.cpearson.com/excel/weeknum.htm
WeekNum = CInt(Format(d, "ww", vbMonday))
End Function
有人知道为什么 Excel 找不到日期吗?
【问题讨论】:
-
您是否查看了单元格中的实际内容以及正在应用的格式规则?
-
是的,我做到了。除了 A1 单元格之外,所有单元格都是
A1+1、E1+1、...、Y1+1、A14+1、...,并且都格式化为mm/dd/yy -
如前所述,我在 VBA 窗口和程序本身的常规“查找”窗口中都尝试了 xlValues 和 xlFormulas。
-
您正在搜索日期 - Excel 将日期内部存储为数字。要获取代表日期的数字(并能够在电子表格中找到它),请使用
CLng -
@SeanCheshire,试过了,没有找到任何结果(现在它在 A1 中找到了值,但在其他地方没有)