2017-10-20 111 views
0

尝试使用此vlookup时出现此错误1004。我使用一个窗口来选择一个文件,然后在vlookup中使用该文件。我在另一个宏中使用它,我使用了基本相同的代码。但由于某种原因,这一个不工作。任何人都可以看到任何明显的问题?我无法弄清楚我做错了什么。使用vlookup错误1004应用程序定义或对象定义的错误?

我上第一VLOOKUP公式错误后右侧的“使​​用WS”

Dim iRet As Integer 
Dim strPrompt As String 
Dim strTitle As String 
Dim shtName As String 


' Prompt 
strPrompt = "Please select the last Kronos Full File before the dates of this Report." & vbCrLf & _ 
    "For example, if the date of this report is 9-8-17, you would want to use the closest date Kronos Full File." & vbCrLf & _ 
    "If one was not ran in the past couple days, then run a new Kronos Full File, and then choose that file." 

' Dialog's Title 
strTitle = "Latest Kronos Full File" 

'Display MessageBox 
iRet = MsgBox(strPrompt, vbOK, strTitle) 

Dim Window2 As String 
Dim X As String 
Dim lNewBracketLocation As Long 
Dim wb2 As Workbook 


Window2 = Application.GetOpenFilename(_ 
    FileFilter:="Excel Files (*.xls*),*.xls*", _ 
    Title:="Choose the Newest Kronos Full File", MultiSelect:=False) 

Set wb2 = Workbooks.Open(Filename:=Window2, ReadOnly:=True) 
shtName = wb2.Worksheets(1).name 
wb2.Close 

MsgBox "You selected " & Window2 
'Find the last instance in the string of the path separator "\" 
lNewBracketLocation = InStrRev(Window2, Application.PathSeparator) 
'Edit the string to suit the VLOOKUP formula - insert "[" 
X = Left$(Window2, lNewBracketLocation) & "[" & Right$(Window2, Len(Window2) - lNewBracketLocation) 


With ws 
.Range("M2").Formula = "=VLOOKUP($K2,'" & X & "]shtName'!$B$2:$E$99999,4,0)" 
.Range("N2").Formula = "=VLOOKUP($K2,'" & X & "]shtName'!$B$2:$C$99999,2,0)" 
.Range("O2").Formula = "=VLOOKUP($K2,'" & X & "]shtName'!$B$2:$U$99999,20,0)" 
.Range("P2").Formula = "=VLOOKUP($K2,'" & X & "]shtName'!$B$2:$Q$99999,16,0)" 
.Range("Q2").Formula = "=VLOOKUP($K2,'" & X & "]shtName'!$B$2:$S$99999,18,0)" 
End With 
+0

您确定x =您认为应该如何? –

+0

好问题我猜这可能是什么,但我从我的其他代码复制它,这些工作。我会再看看它。 – Robillard

+1

你不需要'.Range(“M2”)。Formula =“= VLOOKUP($ K2,'”&X&“]”&shtName&“'!$ B $ 2:$ E $ 99999,4,0) “'作为'shtName'是一个变量? – SJR

回答

0

看来我的问题与我尝试使用VLOOKUP的范围有关。它看起来像我一次将99999改为只有9999,那么它看起来像VLOOKUP的工作。我仍然不确定为什么,但我很肯定这是它。当我降低数字范围时,我没有收到任何错误消息。我猜测是因为它超出了实际工作表的范围。

1

另一种方式来绕去使用从另一个工作簿中Range的地址,在设定的范围,后来就你可以使用Range.Address(True, True, xlR1C1, xlExternal)。如有必要,第四部分将添加工作表和工作簿的名称。

Dim Rng1 As Range ' new Range Object 

Window2 = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*),*.xls*", _ 
           Title:="Choose the Newest Kronos Full File", MultiSelect:=False) 

Set wb2 = Workbooks.Open(Filename:=Window2, ReadOnly:=True) 
'shtName = wb2.Worksheets(1).Name '<-- not necessary 

Set Rng1 = wb2.Worksheets(1).Range("B2:E99999")  
wb2.Close 

With ws 
    .Range("M2").Formula = "=VLOOKUP($K2," & Rng1.Address(True, True, xlR1C1, xlExternal) & ",4,0)" 
    ' define more ranges for the other formulas 

End With 
相关问题