Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

EXCEL не находит макрос записанный в лист из программы

375
18 апреля 2007 года
dominator
199 / / 16.10.2003
Работаю с EXCEL. Записываю из программы макрос, пытаюсь его выполнить. Результат несколько странный... Выполняется частично( Далее EXCEL сообщает, что не находит макрос. Захожу в редактор visual basic и вижу, что макрос есть. При всем при этом, работоспособный, запросто исполняется.
Такое ощущение, что на момент выполнения, он не до конца успевает записываться...
Вот код. Без текста макроса, потому что много.

var
oCodeModule :Variant;
sMacros :String;
--------------------
oCodeModule := _oExcel.VBE.VBProjects.Item(1).VBComponents.Add(1).CodeModule;
sMacros := //Здесь текст макроса NewMac()
;
oCodeModule.AddFromString(sMacros);
oExcel.Run('NewMac()');

Может кто-нибудь сталкивался с подобным? Как это исправить?
375
18 апреля 2007 года
dominator
199 / / 16.10.2003
Предполагая, что макрос не успевает записаться до конца делаю например следующее:

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)

Берет данные из первого листа и строит сводную таблицу.
Подскажите, пожалуйста, в чем тут дело.
375
23 апреля 2007 года
dominator
199 / / 16.10.2003
Похоже на то, что причина ошибки именно в указанном макросе. Макрос записанный таким образом благополучно находится и выполняется (пробовал подставлять простенькую процедуру).
Если его исполнить непосредственно из Excel-я все проходит так, как нужно. Однако программно (oExcel.Run('Mac1')) ничего не получается. Выводится единственный столбец "Остатки", где отображается итоговая сумма. Т.е. макрос выполняется частично. А сообщение Excel-я: "Не найден макрос такой-то" здесь получается не к месту, поскольку процедура-то исполняется...
В чем тут может быть дело?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог