我正在尝试执行以下操作:
我已成功导出数据(步骤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宏]
问题似乎是当我尝试将两者结合起来并构建数据透视表时。
.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