В «c:» есть несколько файлов xlsx, экспортированных из таблицы Microsoft Access.Имеется около 4 файлов с одинаковым количеством и именами столбцов, но с разными данными.
Когда код запускается, он корректно выполняет первый поворот xlsx без проблем, но вторая итерация приводит к ошибкам:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
fileName, Version:=6).CreatePivotTable TableDestination:= _
"Sheet1!R3C1", TableName:="PivotTable1", DefaultVersion:=6
Ошибка: ошибка времени выполнения '91': переменная объекта или переменная блока не установлена
Я уже пытался использовать "myWorkbook" до Sheets
, ActiveWorkbook
и т. Д., Но это не сработало или я сделал это неправильно.
Все файлы Excel должны иметь сводные таблицы.
Sub test()
Dim strF As String, strP As String
Dim wb As Workbook
Dim ws As Worksheet
'Edit this declaration to your folder name
strP = "c:\" 'change for the path of your folder
strF = Dir(strP & "\*.xls*") 'Change as required
Do While strF <> vbNullString
'MsgBox strP & "\" & strF
createPivot strP & "\" & strF, strF
strF = Dir()
Loop
End Sub
Sub createPivot(path As String, fileName As String)
fileName = Replace(fileName, ".xlsx", "")
Dim appExcel As Excel.Application
Dim myWorkbook As Excel.Workbook
Set appExcel = CreateObject("Excel.Application")
Set myWorkbook = appExcel.Workbooks.Open(path)
appExcel.Visible = True
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
fileName, Version:=6).CreatePivotTable TableDestination:= _
"Sheet1!R3C1", TableName:="PivotTable1", DefaultVersion:=6
Sheets("Sheet1").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Field1")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Field2")
.Orientation = xlPageField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Field3")
.Orientation = xlColumnField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields("FieldN"), "Sum of FieldN", xlSum
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Field+1")
.Orientation = xlRowField
.Position = 1
End With
myWorkbook.Save
myWorkbook.Close
appExcel.Quit
Set myWorkbook = Nothing
Set appExcel = Nothing
Exit Sub
End Sub