评估错误

时间:2017-01-04 12:07:22

标签: vba excel-vba excel

我有2张我在这里工作的床单。用户将按此按钮的sheet1包含一个名为“Cabinet date”的列,它只是与每个报告相关的日期列表。 Sheet2(截止日期)还包含cabinet日期列,与此日期之前要满足的一系列截止日期相匹配(在同一行中)。 //例如,1月份内阁中任何报告草稿的截止日期都在同一行.//

我想制作一个按钮,当按下它时会在sheet2中找到与活动单元格中的橱柜日期匹配(在sheet1上),以及拾取它所在的标题(searchCol),然后返回来自sheet2的正确橱柜日期中该事件的确切截止时间值。

我目前遇到的问题是,当我运行此按钮时,似乎没有从sheet2中获取cabinet日期值,并导致带注释的行评估为nothing / true并跳过将打印截止日期的代码块日期。

当我按下这个时,我得到的是“未找到截止日期”。即使实际上有一个价值它也应该上涨。

Option Explicit

Private Sub CommandButton1_Click()
Dim cabDate As String, findme As Range
Dim searchCol As Integer

searchCol = ActiveCell.Column
cabDate = WorksheetFunction.Index(Range("A1:O9999"), ActiveCell.Row, 2)

If Not IsEmpty(cabDate) Then
    With Worksheets("Deadlines").Range("B:B")
        Set findme = Application.WorksheetFunction.VLookup(cabDate, Sheets("Deadlines").Range("A1:O9999"), 1, False)
        If Not findme Is Nothing Then
            Dim findmeAddr As String
            findmeAddr = findme.Address(True, True)
            Dim printable As String
            printable = findme.Offset(0, searchCol).Value
            MsgBox (printable)
        Else
            MsgBox ("Deadline not found")
        End If
    End With
Else
    MsgBox ("invalid or non existent cabinet date")
End If
End Sub

并非所有编码经验都如此,我们将不胜感激

编辑: made up some data as the I work with confidential data

2 个答案:

答案 0 :(得分:2)

你在所有不同类型的变量之间混淆了一下,以及每个函数返回的类型。

WorksheetFunction.Index - 返回某个单元格(或单元格范围)的值,因此您需要定义cabDate As String。 因此,您需要使用If Not cabDate Is Nothing Then而不是Range(因为它不是If Not IsEmpty(cabDate) Then)。

使用Find的{​​{1}}方法会返回Set findme,因此您以后也无法将其与Range一起使用,但您需要定义另一个变量findme = findme.Address(True, True),然后您可以阅读As String地址。

最后,由于您要阅读String中的值,因此需要printableAs String,而不是As Integer

<强>代码

Range

答案 1 :(得分:0)

Set findme = .Find(what:=cabDate, lookIn:=xlValues, lookAt:=xlWhole)

因为Find()对象的Range方法会记住这些参数的最后设置,即使是从Excel UI进行的

并确保ActiveCell正是您实际期望的目标!