VBScript调用VBA宏以构建数据透视表

问题描述 投票:0回答:1

我正在尝试执行以下操作:

  1. 使用VBScript,将数据从QlikView导出到Excel中
  2. 使用VBScript,触发Excel宏
  3. 具有一个根据步骤1加载的数据构建数据透视表的Excel宏

我已成功导出数据(步骤1)并触发了Excel宏(步骤2)。

理论上,此宏应该可以完成步骤3(如果我从Excel手动运行它,则它可以成功完成)。

但是,在步骤3中触发的宏创建数据透视表时,它将失败,并且在QlikView中,VBScript消息为:

无法运行宏'procBuildPivot'。该宏可能在此工作簿中不可用,或者可能禁用了所有宏。

绝对不是这种情况,因为如果我直接在Excel中触发宏,则会构建数据透视表。或者,如果我从QlikView调用宏以执行任何操作(直到并且不建立数据透视表),则它可以工作。

我的VBScript:

Set objExcelApp = CREATEOBJECT("Excel.Application")

Set objExcelSheet = objExcelApp.Worksheets("Sheet 1")

objExcelApp.Workbooks.Open "Test.xlsm"

objExcelApp.Application.Run "procBuildPivotReport"

objExcelSheet.SaveAs "Test2.xlsm"

SET objExcelSheet = NOTHING
SET objExcelApp = NOTHING

我的VBA:

Sub procBuildPivotReport()

Dim wb As Workbook
Set wb = ThisWorkbook

Dim ws as Worksheet
Set ws as ActiveSheet

Dim pvtCache as PivotCache
Dim pvt as PivotTable

Set pvtCache = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets("QV Data").Range("A1:D10"), Version:=6)
Set pvt = ws.PivotTables.Add(PivotCache, TableDestination:=Range("J1"), TableName:= "Sales Analysis")

With pvt
    .PivotFields("Project ID").Orientation = xlRowField
    .PivotFields("Name").Orientation = xlColumnField
    .PivotFields("Hours").Orientation = xlDataField
Emd With

End Sub

[VBA独立起作用(当在Excel内部直接调用时,而VBScript有效发送数据并调用Excel宏]

问题似乎是当我尝试将两者结合起来并构建数据透视表时。

excel vba vbscript pivot-table qlikview
1个回答
0
投票
打开工作簿之前,您无法获得工作表。您需要捕获工作簿对象,以便以后可以将其关闭。将工作簿名称添加到.Run调用中,以确保您到达要去的地方。释放对象句柄之前,关闭并退出。

workbookPath = "Test.xlsm" Set objExcelApp = CREATEOBJECT("Excel.Application") Set thisWorkBook = objExcelApp.Workbooks.Open workbookPath Set objExcelSheet = thisWorkBook.Worksheets("Sheet 1") objExcelApp.Application.Run "'" & workbookPath & "'!procBuildPivotReport" objExcelSheet.SaveAs "Test2.xlsm" thisWorkBook.Close False objExcelApp.Quit Set objExcelSheet = Nothing Set thisWorkBook = Nothing Set objExcelApp = Nothing

© www.soinside.com 2019 - 2024. All rights reserved.