【问题标题】:vlookup directory pointing to a specific directoryvlookup 目录指向特定目录
【发布时间】:2018-12-26 13:26:06
【问题描述】:

我在运行我的 vba 脚本时遇到了这个问题。它应该打开4个excel文件和一个带有宏的模板。然后它激活宏并使用 vlookup 将每个表填充到特定的 excel 文件。 2 张有 3 列,2 列在寻找 1 个 excel 文件,第 3 列在寻找第 2 个 excel 文件。但是当我运行脚本时,前两列是#NA,而第三列是excel文件的文件目录。当我手动执行此操作时(手动打开所有 4 个 excel 文件并单击一个按钮以运行宏),它成功填充了两个工作表的所有 3 列。可能是什么问题呢?我四处搜索,vlookup 搜索打开的 excel 文件,这就是为什么我在运行宏以填充表格之前打开 4 个 excel 文件的原因。 这是我的 VBA 脚本:

Option Explicit

Dim xlApp, xlBook, shell
Dim folderPath


' Set shell = CreateObject("WScript.Shell")   
' shell.Run "C:\Users\NLTAdmin\Desktop\Extraction_Automation\TABLE_COUNT_SCRIPT\All_in_one.bat", 1, True


folderPath = "C:\Users\NLTAdmin\Desktop\Extraction_Automation\TABLE_COUNT_SCRIPT\"

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.DisplayAlerts = False

xlApp.Workbooks.Open(folderPath & "Assetco\Assetco.csv")
xlApp.Workbooks.Open(folderPath & "BIOS\BIOS.csv")
' xlApp.Workbooks.Open(folderPath & "FDS\FDS.csv")
' xlApp.Workbooks.Open(folderPath & "FTTH\FTTH.csv")
' xlApp.Workbooks.Open(folderPath & "FTTH_Filter\ftth_union_filter_queries.csv")
' xlApp.Workbooks.Open(folderPath & "Gtech_Filter\Gtech_filter_queries.csv")
' xlApp.Workbooks.Open(folderPath & "Gtechv1\Gtech.csv")
' xlApp.Workbooks.Open(folderPath & "MARS\MARS.csv")
' xlApp.Workbooks.Open(folderPath & "MARS_Filter\mars_filter_queries.csv")
' xlApp.Workbooks.Open(folderPath & "WOMS\WOMS.csv")
' xlApp.Workbooks.Open(folderPath & "Workflow\WORKFLOW.csv")
' xlApp.Workbooks.Open(folderPath & "Workflow_Filter\workflow_filter_queries.csv")

folderPath = "C:\Users\NLTAdmin\Desktop\Extraction_Automation\Union_queries\"

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
xlApp.DisplayAlerts = False

xlApp.Workbooks.Open(folderPath & "ASSETCO_union.csv")
xlApp.Workbooks.Open(folderPath & "BIOS_union.csv")
' xlApp.Workbooks.Open(folderPath & "FDS_union.csv")
' xlApp.Workbooks.Open(folderPath & "FTTH_union.csv")
' xlApp.Workbooks.Open(folderPath & "GTECH_union.csv")
' xlApp.Workbooks.Open(folderPath & "MARS_union.csv")
' xlApp.Workbooks.Open(folderPath & "WOMS_union.csv")
' xlApp.Workbooks.Open(folderPath & "WORKFLOW_union.csv")

set xlBook = xlApp.Workbooks.Open("C:\Users\NLTAdmin\Desktop\Extraction_Automation\extraction_report_template.xlsm",0,True)
xlApp.Run "Macro1"

xlApp.DisplayAlerts = True
xlApp.Quit

Set xlApp = Nothing

WScript.Quit

第一个 Workbooks.open 假设打开 excel 文件以填充前 2 列,而第二个 Workbooks.Open 用于填充第 3 列。只有第三列被填充。 第三列具有文件目录并填充: 找不到第一列和第二列

【问题讨论】:

  • 也许我可以使用 INDIRECT() 因为 excel 文件都已打开?有人可以指导我如何使用此功能吗?

标签: excel vba vlookup


【解决方案1】:

VBScript 中的 Excel

Option Explicit

Dim xlApp, xlBook, shell
Dim folderPath

'  Set shell = CreateObject("WScript.Shell")
'  shell.Run "C:\Users\NLTAdmin\Desktop\Extraction_Automation\ _
'      & "TABLE_COUNT_SCRIPT\All_in_one.bat", 1, True

  folderPath = "C:\Users\NLTAdmin\Desktop\Extraction_Automation\" _
      & "TABLE_COUNT_SCRIPT\"

  ' To avoid multiple instances of Excel, when it is running,
  ' the GetObject Method has to be used, but when Excel is not running
  ' the CreateObject Method has to be used to open it.
  On Error Resume Next
  ' When Excel is running:
  Set xlApp = GetObject(, "Excel.Application")      ' Excel is running
  If Err Then
    Set xlApp = CreateObject("Excel.Application")   ' Excel not running.
  End If
  On Error GoTo 0

  With xlApp
    .Visible = True
    .DisplayAlerts = False

    .Workbooks.Open (folderPath & "Assetco\Assetco.csv")
    .Workbooks.Open (folderPath & "BIOS\BIOS.csv")
' .Workbooks.Open(folderPath & "FDS\FDS.csv")
' .Workbooks.Open(folderPath & "FTTH\FTTH.csv")
' .Workbooks.Open(folderPath & "FTTH_Filter\ftth_union_filter_queries.csv")
' .Workbooks.Open(folderPath & "Gtech_Filter\Gtech_filter_queries.csv")
' .Workbooks.Open(folderPath & "Gtechv1\Gtech.csv")
' .Workbooks.Open(folderPath & "MARS\MARS.csv")
' .Workbooks.Open(folderPath & "MARS_Filter\mars_filter_queries.csv")
' .Workbooks.Open(folderPath & "WOMS\WOMS.csv")
' .Workbooks.Open(folderPath & "Workflow\WORKFLOW.csv")
' .Workbooks.Open(folderPath & "Workflow_Filter\workflow_filter_queries.csv")

    folderPath = "C:\Users\NLTAdmin\Desktop\Extraction_Automation\" _
        & "Union_queries\"

    .Workbooks.Open (folderPath & "ASSETCO_union.csv")
    .Workbooks.Open (folderPath & "BIOS_union.csv")
' .Workbooks.Open(folderPath & "FDS_union.csv")
' .Workbooks.Open(folderPath & "FTTH_union.csv")
' .Workbooks.Open(folderPath & "GTECH_union.csv")
' .Workbooks.Open(folderPath & "MARS_union.csv")
' .Workbooks.Open(folderPath & "WOMS_union.csv")
' .Workbooks.Open(folderPath & "WORKFLOW_union.csv")

    Set xlBook = .Workbooks.Open(folderPath _
        & "extraction_report_template.xlsm", 0, True)
    .Run "Macro1"

    .DisplayAlerts = True
    .Quit

  End With

  Set xlApp = Nothing

  WScript.Quit

【讨论】:

    【解决方案2】:

    您创建了多个 Excel 实例。消除除第一个CreateObject("Excel.Application")'以外的所有内容

     Set xlApp = CreateObject("Excel.Application")
    

    【讨论】:

      猜你喜欢
      • 2015-05-08
      • 2016-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多