所以这里我有关于find方法的第n个问题。我已经阅读了很多有关它的问题及其带来的问题,但仍然找不到解决我的问题的方法。
我只想返回特定值(日期)的行数和列数。但是,代码运行时始终出现相同的 91 错误(未设置对象变量),因为 find 方法未找到任何内容。
我尝试将变量定义为范围并通过设置变量(即设置 daterow = 等)来更改代码。但问题依然存在。
Sub actual_cash_flow()
Dim cfdate As Long
Dim today As Long
Dim daterow As Long
Dim datecolumn As Long
today = Date
cfdate = WorksheetFunction.EoMonth(today, -1)
daterow = Sheet2.Cells.Find(What:=cfdate, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, searchformat:=False).Row
datecolumn = Sheet2.Cells.Find(What:=cfdate).Column
End Sub
我想要行数和列数,以便识别单元格,然后执行一些操作。
编辑:
通过按照@mikku的建议编辑代码并调试代码中定义的值和变量的范围,我得到了相同的值,但是,我仍然没有得到任何输出。所以我真的不知道错误在哪里。看图片。
正如我在回答上一个问题时指出的那样,使用日期和
Range.Find
函数可能很棘手。原因之一似乎是 VBA 日期数据类型与 Excel 工作表上存储的日期不同。后者是 Double
格式,看起来像日期。
因此,特别是如果您希望
.Find
方法独立于日期设置,您最好不要使用 Range.Find
方法,而是循环访问数据。
在下面的代码中,我展示了一个示例,说明其工作原理,根据您提供的工作簿进行假设,并使用 VBA 数组,因为这比循环工作表上的范围运行得快得多:
Sub actualcf()
Dim cfdate As Long 'Yes --Long for this application
Dim daterow As Long
Dim datecolumn As Long
Dim fnd As Range
Dim srchRng As Range
Dim vSrch As Variant
Dim I As Long
With Worksheets("Peschiera CF")
'Find the row with the dates
Set srchRng = .Cells.Find(what:="Yr. Ending", after:=.Cells(1, 1), LookIn:=xlValues)
'Read that row into a VBA array, but only the columns with data
'Note that we are using `.Value2` which has no formatting
If Not srchRng Is Nothing Then
vSrch = .Range(.Cells(srchRng.Row, 1), .Cells(srchRng.Row, .Columns.Count).End(xlToLeft)).Value2
End If
cfdate = WorksheetFunction.EoMonth(Date, -1)
For I = 1 To UBound(vSrch, 2)
If vSrch(1, I) = cfdate Then
daterow = srchRng.Row
datecolumn = I
End If
Next I
End With
End Sub
这段代码应该可以工作:
Sub actual_cash_flow()
Dim cfdate As Date
Dim daterow As Long
Dim datecolumn As Long
Dim fnd As Range
cfdate = WorksheetFunction.EoMonth(Date, -1)
Set fnd = Worksheets("SheetName").Cells.Find(What:=cfdate, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False, searchformat:=False)
If Not fnd Is Nothing Then
daterow = fnd.Row
datecolumn = fnd.Column
End If
End Sub
在代码中输入您的工作表名称。
问题在于变量的设置,您应该在搜索日期时将它们声明为日期。
我最近遇到了这个问题,在任何地方都找不到解决方案,既然我找到了解决方案,我只想分享此信息以帮助遇到同样问题的人。尽管该值存在,但 vba .find 不返回任何内容,只是因为单元格的宽度太小,以至于它们显示为 ### 而不是值。当我更改单元格的宽度以完全显示该值时,.Find 工作很棒。 (我的值是日期,也许这就是为什么 .Find 可能不起作用,以前从未在其他类型中遇到过此类错误)。