2016-08-22 135 views
1

我正在通过下面的脚本来最终从数据查询中将一系列数据从基于在inputbox中输入的值中抽取到单独的工作表中,但是我一直遇到424错误 - 对象需要。424对象VBA查找所需的错误

为了测试是否这工作我想显示一个消息框,以便然而脚本保持在Vlookup

Private Sub Workbook_Open() 


Dim NextRelease As String 

If MsgBox("Would you like to promote the next release in batch?", vbQuestion + vbYesNo, "Promote the next release?") = vbYes Then 
NextRelease = InputBox("Please enter the date of the next release", "Next Release", "DD/MM/YYYY") 
ReleaseDate = Application.WorksheetFunction.VLookup(NextRelease, TRELINFO.Range("A2:B4"), 1, False) 
If NextRelease = ReleaseDate Then 
MsgBox ("Working") 

请未能有人能提供一个答案,为什么这我就可以开始下一阶段正在发生并有望解决这个问题。 提前谢谢!

+0

什么行是错误出现在? –

+0

'TRELINFO'这是错误。你有任何代码名称为“TRELINFO”的工作表,或者你有一个工作表类型变量设置为任何工作表? – cyboashu

+0

@cyboashu - 工作表名称为TRELINFO,数据查询也命名为TRELINFO。为了避免混淆,我现在已将表格暂时重命名为TRELINFO2,但同样的错误正在返回。 – Paul

回答

0

在引用工作表之前,请尝试添加。用您的TRELINFO表替换'Sheet1'。

编辑:如果您的表的第一行中没有与用户输入匹配的值,则VLOOKUP将返回错误。在excel中对表格(使用日期格式)进行测试后,下面的内容适用于我。

Private Sub Workbook_Open() 

Set trelinfo = Sheets("TRELINFO") 
Dim NextRelease As Long 

If MsgBox("Would you like to promote the next release in batch?", vbQuestion + vbYesNo, "Promote the next release?") = vbYes Then _ 
NextRelease = CLng(CDate(InputBox("Please enter the date of the next release", "Next Release", "DD/MM/YYYY"))) 

checkblank = WorksheetFunction.CountIf(trelinfo.Range("A2:A4"), NextRelease) 

If checkblank <> 0 Then 
    ReleaseDate = Application.WorksheetFunction.VLookup(NextRelease, trelinfo.Range("A2:B4"), 1, False) 
    If NextRelease = ReleaseDate Then _ 
    MsgBox "Working" 

Else 
    MsgBox "Release not found" 

End If 

End Sub 
+0

我已经尝试添加'设置TRELINFO =工作表(“TRELINFO”)'但同样的错误正在返回。 – Paul

+0

我刚刚注意到,在添加上面的错误信息后,返回的错误信息现在是1004错误 - 应用程序定义或对象定义的错误 – Paul

+0

1004错误可能是由于您的VLOOKUP无法返回值。你有没有尝试提交一个肯定位于A2到A4的值? – Rory

0

确保工作表TRELINFO存在或被正确命名。看来该函数找不到该工作表。

+0

我已经三重检查了表单的名称,并且可以确认所有信息都是正确的。 – Paul

+0

注意到其他评论中的1004错误,请确保该值存在于查找范围中。如果VLookup在电子表格中使用它时会返回#NA或#Value,则会引发1004错误。 – Kevin

1

NextRelease是一个字符串值:你可以不看,最多的日期的表没有首先将其转换为双。

由于您没有从VLOOKUP返回值,因此您可以更简单地使用MATCH。

删除WorksheetFunction可让您测试错误的返回值,而不会在不匹配时提高运行时错误。

Private Sub Workbook_Open() 

Dim NextRelease As String 

If MsgBox("Would you like to promote the next release in batch?", _ 
      vbQuestion + vbYesNo, "Promote the next release?") = vbYes Then 

    NextRelease = InputBox("Please enter the date of the next release", _ 
          "Next Release", "DD/MM/YYYY") 

    If not IsError(Application.Match(CDbl(DateValue(NextRelease), _ 
        TRELINFO.Range("A2:B4"), 0) Then 

     MsgBox ("Working") 
0

只要用这个代替

ReleaseDate = Application.VLookup(NextRelease, Worksheets("trelinfo").Range("A2:B4"), 1, False) 

我遇到使用VLOOKUP函数时,在此之前的错误。我只是删除WorksheetFunction然后它的工作

相关问题