即使值存在,查找也不会返回任何内容

时间:2019-07-10 09:56:26

标签: excel vba

所以在这里,我有关于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的建议编辑代码,并调试存在该值的区域和代码中定义的变量,我得到了相同的值,但是,我仍然没有得到任何输出。所以我真的不知道错误在哪里。看到图片。

enter image description here

2 个答案:

答案 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)

在工作表名称中输入代码。

问题在于设置变量,搜索日期时应将其声明为日期。