Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 评估误差_Vba_Excel - Fatal编程技术网

Vba 评估误差

Vba 评估误差,vba,excel,Vba,Excel,我有两张我正在处理的纸。用户按下此按钮的sheet1包含一个名为“内阁日期”的列,该列只是与每个报告相关的日期列表。 Sheet2(截止日期)还包含内阁日期列,与在此日期之前要满足的一系列截止日期相匹配(在同一行中)。 //例如,1月份内阁的任何报告草案的截止日期都将在同一行// 我想制作一个按钮,当按下该按钮时,将在表2中找到与活动单元格(表1上)中的日期相匹配的内阁日期,并选择其下的标题(searchCol),然后在表2中的正确内阁日期中返回该事件的确切截止日期值 我目前遇到的问题是,当我运

我有两张我正在处理的纸。用户按下此按钮的sheet1包含一个名为“内阁日期”的列,该列只是与每个报告相关的日期列表。 Sheet2(截止日期)还包含内阁日期列,与在此日期之前要满足的一系列截止日期相匹配(在同一行中)。 //例如,1月份内阁的任何报告草案的截止日期都将在同一行//

我想制作一个按钮,当按下该按钮时,将在表2中找到与活动单元格(表1上)中的日期相匹配的内阁日期,并选择其下的标题(searchCol),然后在表2中的正确内阁日期中返回该事件的确切截止日期值

我目前遇到的问题是,当我运行此按钮时,它似乎没有从sheet2中拾取文件柜日期值,并导致带注释的行计算为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
并非所有的人都有编码经验,因此任何帮助都将不胜感激

编辑:

您将所有不同类型的变量以及每个函数返回的类型弄混了

WorksheetFunction.Index
-返回特定单元格(或单元格范围)的值,因此需要将
cabDate定义为字符串。
因此,与其使用
如果不是cabDate,则使用
(因为它不是
范围),不如使用
如果不是IsEmpty(cabDate),则使用

使用
Set findme
Find
方法返回一个
范围
,因此您以后不能将其与
findme=findme.Address(True,True)
一起使用,但您需要将另一个变量
定义为String
,然后您可以读取字符串的
地址

最后,由于要从可打印的
中读取一个值,因此它必须是
字符串
整数
,而不是
范围

代码

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 = .Find(what:=cabDate)

        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
试一试

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


并确保
ActiveCell
是您实际期望的

您好,感谢我所做的更改:)但是我现在仍然在同一个地方跳过代码块,我认为这可能与我的数据结构或使用.Find方法搜索sheet2时在“with”中设置的范围有关,引用的是一个空白单元格,而不是包含匹配数据的单元格。@Dingge如我上面所述,在工作表中共享您的数据结构将有助于我们帮助您在这里,左边是人们搜索截止日期的工作表,使用该按钮,我希望他们能够在活动单元格上按下该按钮,并从Sheet2中检索截止日期。您可能在单元格格式一致性方面有问题,因为您使用的是日期,它可能以不同的方式格式化。仍然会得到相同的跳过,我可能会尝试在此处混淆数据类型,感谢您的帮助我不会说数据类型是罪魁祸首,而是逐步检查您的代码并检查
ActiveCell
是否符合您的实际期望,它一直在使用msgbox和调试器通知来向我显示变量被正确拾取。到目前为止,cabDate似乎打印得很好,无论我将活动单元格放置在何处,它都会从表1中为我提供正确的cabDate。我现在的问题似乎是让程序在sheet2上找到一个精确的匹配,我一直在调试器中得到'findme=nothing',我也尝试过使用Vlookup,但这也找不到匹配的值。日期真的是日期吗?我的意思是,如果您查询
?cabDate.Value
会返回什么?因此
设置cabDate=WorksheetFunction.Index(范围(“A1:O9999”),ActiveCell.Row,2)
没有按预期工作,是吗?
Set findme = .Find(what:=cabDate, lookIn:=xlValues, lookAt:=xlWhole)