Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 Vlookup不工作_Vba_Excel - Fatal编程技术网

可变工作簿上的VBA Vlookup不工作

可变工作簿上的VBA Vlookup不工作,vba,excel,Vba,Excel,我需要一些帮助来查找和更正下面的代码。 首先解释它的作用: 提示用户选择文件(vFileName1) 在打开的文件中添加一些必需的列和数据 提示用户选择第二个文件(vFileName2) 添加一些帮助列(可以简化),并尝试将基于第2个文件中的值的数据vlookup到第1个文件中,并从3列中提取数据 我遇到的问题是最后一个,因为我似乎无法让vlookup工作。我不知道如何在公式中引用第一个打开的工作簿,因为我不能通过其名称来引用它(因为它将是可变的,并且每个月都在变化) 任何帮助都将不胜感激

我需要一些帮助来查找和更正下面的代码。 首先解释它的作用:

  • 提示用户选择文件(vFileName1)
  • 在打开的文件中添加一些必需的列和数据
  • 提示用户选择第二个文件(vFileName2)
  • 添加一些帮助列(可以简化),并尝试将基于第2个文件中的值的数据vlookup到第1个文件中,并从3列中提取数据
我遇到的问题是最后一个,因为我似乎无法让vlookup工作。我不知道如何在公式中引用第一个打开的工作簿,因为我不能通过其名称来引用它(因为它将是可变的,并且每个月都在变化)

任何帮助都将不胜感激

代码如下:

Sub Activate_sheet()
  Application.ScreenUpdating = False  
  Call ReconFile    
  Application.ScreenUpdating = True    
End Sub

Sub ReconFile()
' Activate_sheet Macro
' Select the source workbook and activates the proper sheet and prepares columns

  Dim vFileName1 As Variant

  ' Prompt user to select a file
  vFileName1 = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*, All Files (*.*),*.*", , "Select the Recon file to be used")
  If vFileName1 = "False" Then
    MsgBox "No file selected", vbExclamation, "Cancelled"
    Exit Sub 'user canceled
  End If

  With Workbooks.Open(Filename:=vFileName1, UpdateLinks:=0)
    Worksheets("Data").Select
    Columns("A:B").Insert Shift:=xlToRight        
    Columns("T:T").Copy
    Range("A1").PasteSpecial Paste:=xlPasteValues
    Columns("A:A").TextToColumns Destination:=Range("A1")
    Lngth = Range("$A$" & Rows.Count).End(xlUp).Row
    Final = "$B$3:$B" & Lngth
    Range(Final).FormulaR1C1 = "=RC[-1]&RC[14]"
    Call WorkbenchFiles
    .Close False
  End With      
End Sub

Sub WorkbenchFiles()    
  Dim CF As Long
  Dim vFileName2 As Variant

  CF = MsgBox("Would you like to select a new Workbench file?", vbYesNo)

  If CF = vbYes Then
    vFileName2 = Application.GetOpenFilename("Excel Files (*.xl*), *.xl*, All Files (*.*),*.*", , "Select the Workbench File to update")
    If vFileName2 = "False" Then
      MsgBox "No file selected", vbExclamation, "Cancelled"
      Exit Sub 'user canceled
    End If

    Workbooks.Open (vFileName2)
    Worksheets("Sheet1").Select

    Lngth = Range("$A$" & Rows.Count).End(xlUp).Row
    Final = "$K$2:$K" & Lngth
    Range(Final).FormulaR1C1 = "=MID(RC[-10],8,8)"

    Final = "$L$2:$L" & Lngth
    Range(Final).FormulaR1C1 = "=RC[-1]&RC[-7]"

    Final = "$M$2:$M" & Lngth
    Range(Final).FormulaR1C1 = "=VLOOKUP(RC[-1], '[" & vFileName1 & "]Data'!$B:$H,3,0)"

    Final = "$N$2:$N" & Lngth
    Range(Final).FormulaR1C1 = "=VLOOKUP(RC[-2],'[" & vFileName1 & "]Data'!$B:$H,4,0)"

    Final = "$O$2:$O" & Lngth
    Range(Final).FormulaR1C1 = "=VLOOKUP(RC[-3],'[" & vFileName1 & "]Data'!$B:$H,7,0)"    
  Else: Exit Sub        
  End If

End Sub

您遇到的问题是混合使用R1C1和A1表示法,请将
$B:$H
更改为
C2:C8
@ScottCraner谢谢。这是问题的一部分,以及我后来发现的其他一些东西。