EXCEL не находит макрос записанный в лист из программы
Такое ощущение, что на момент выполнения, он не до конца успевает записываться...
Вот код. Без текста макроса, потому что много.
var
oCodeModule :Variant;
sMacros :String;
--------------------
oCodeModule := _oExcel.VBE.VBProjects.Item(1).VBComponents.Add(1).CodeModule;
sMacros := //Здесь текст макроса NewMac()
;
oCodeModule.AddFromString(sMacros);
oExcel.Run('NewMac()');
Может кто-нибудь сталкивался с подобным? Как это исправить?
while sMacros = '' do begin
sMacros := _oExcel.VBE.VBProjects.Item(1).VBComponents.Item(1).CodeModule.Lines[1, oCodeModule.CountOfLines];
end;
Теперь в переменной содержится текст макроса. Следовательно, он благополучно записан. Пробую выполнить его: результат такой же...
Привожу текст макроса:
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="Лист1!R1C1:R97C12").CreatePivotTable TableDestination:="", TableName:="СводнаяТаблица2", DefaultVersion:=xlPivotTableVersion10
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Код узла")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields( _
"Классификатор (Тип товаров)")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Артикул")
.Orientation = xlRowField
.Position = 3
End With
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields( _
"Полное наименование")
.Orientation = xlRowField
.Position = 4
End With
ActiveSheet.PivotTables("СводнаяТаблица2").AddDataField ActiveSheet.PivotTables _
("СводнаяТаблица2").PivotFields("Остатки"), "Сумма по полю Остатки", xlSum
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Место хранения")
.Orientation = xlColumnField
.Position = 1
End With
With ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields( _
"Аббревиатура ед.изм.")
.Orientation = xlRowField
.Position = 5
End With
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Код узла").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
Range("B10").Select
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields( _
"Классификатор (Тип товаров)").Subtotals = Array(False, False, False, False, False, _
False, False, False, False, False, False, False)
Range("C8").Select
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Артикул").Subtotals = _
Array(False, False, False, False, False, False, False, False, False, False, False, False)
Range("D7").Select
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Полное наименование"). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Аббревиатура ед.изм."). _
Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
False, False)
Берет данные из первого листа и строит сводную таблицу.
Подскажите, пожалуйста, в чем тут дело.
Если его исполнить непосредственно из Excel-я все проходит так, как нужно. Однако программно (oExcel.Run('Mac1')) ничего не получается. Выводится единственный столбец "Остатки", где отображается итоговая сумма. Т.е. макрос выполняется частично. А сообщение Excel-я: "Не найден макрос такой-то" здесь получается не к месту, поскольку процедура-то исполняется...
В чем тут может быть дело?