所以在这里,我有关于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的建议编辑代码,并调试存在该值的区域和代码中定义的变量,我得到了相同的值,但是,我仍然没有得到任何输出。所以我真的不知道错误在哪里。看到图片。
答案 0 :(得分:2)
正如我在对上一个问题的回答中所指出的那样,使用日期和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
答案 1 :(得分:0)
此代码应该有效:
M = Create_Doping_Matrix(m1,N,p,sb_degree)
在工作表名称中输入代码。
问题在于设置变量,搜索日期时应将其声明为日期。