Вопрос по excel, vba, vbscript – vbScript открывает Excel, но не загружает макросы / модули?

1

Я в очень странной ситуации. Я создал скрипт VBS, который откроет мой файл Excel. Я определил код VBA в методе WorkBook_open. Я думал, что создание скрипта VBS для открытия моего Excel вызовет мой метод workBook_open и выполнит код VBA внутри него. Но я был неправ. Ниже мой код VBS.

filePath = "E:\data_extracts\mydata.xlsm"
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open(filepath)
oExcel.Visible = True
oExcel.Run "RefreshDataFromIQY"
oExcel.ActiveWorkbook.Save
oExcel.ActiveWorkbook.Close
oExcel.Quit
Set oExcel = Nothing

При отладке происходит сбой в oExcel.Run «RefreshDataFromIQY», сообщая, что макросы недоступны или отключены. Следовательно, этот код просто успешно открывает приложение Excel, и это все, что он делает. У меня есть макрокоды в module1, module2. Как / где я пишу для выполнения моих макросов в VBS скрипт ниже. Мои макросы / модули должны выполняться последовательно, а некоторые из моих макросов являются записанными макросами. Любая помощь горячо приветствуется. Благодарность

Спасибо за ваш вклад, Скотт. Вот что я сделал изменения в своем коде

Dim oExcelApp
Dim oExcelWkb

set oExcelApp = createobject("Excel.Application")
set oExcelWkb = oExcelApp.Workbooks.Open("\\myserver\data_extracts\TestTOPTMay307.xlsm")
oExcelWkb.Close True
oExcelApp.Quit

Однако, когда он запускается из командной строки, он вызывает ошибку во время выполнения. Требуется объект: «Закрыть». Есть идеи почему? Почему не удается закрыть? Что я делаю не так? Благодарность

просто пересекая все мысли -> у вас есть приложение Excel для доверия VBA? Scott Holtzman
Еще 2 мысли. 1) вы можете попробовать «E: \ data_extracts \ mydata.xlsm! RefreshDataFromIQY» или «E: \ data_extracts \ mydata.xlsm! Module1.RefreshDataFromIQY» 2) Если «RefreshDataFromIQY» является частной подпрограммой / функцией, она может не работать в это (вероятно, не относится к вам, но просто подумал, что я добавлю это в Scott Holtzman

Ваш Ответ

1   ответ
1

который я сделал. Это сработало, когда я поместил код внутри модуля и оставил его открытым. Однако, когда я помещаю в закрытый модуль -> как модуль уровня рабочего листа, я получаю ошибку, которую вы получили.

Однако когда я ссылался на закрытый объект, код пробежал. Так что мой ответ вам заменить

oExcel.Run "RefreshDataFromIQY"

oExcel.Run "[yourClassName].RefreshDataFromIQY"

Также я поместил workbook_event в свой файл. Событие успешно сработало при открытии, поэтому, если у вас возникли проблемы, это, скорее всего, в коде внутри события.

Скотт Я внес изменения в свой пост. Пожалуйста, смотрите выше. Спасибо за ваше руководство. : 0 Nemo
здорово. рад, что вы получили это Scott Holtzman
code отлично работает для меня. проверьте и убедитесь, что ваш путь правильный. Кроме того, если у вас есть макрос, работающий с событием workbook_open, вы можете захотеть быть оператором таймера в коде vbs для ожидания X секунд, чтобы макрос в рабочей книге мог обрабатываться. Кроме того, для дальнейшего использования ваш второй вопрос кажется отличным от вашего первого. Лучше всего принять ответ на свой вопрос, чем публиковать новый, если это отдельная проблема. Scott Holtzman
Спасибо Скотту. Проблема заключалась в том, что я заставлял 'Close' в моем vbscipt, в то время как макрос, который выполняется в Workbook_Open, автоматически сохраняет и закрывает. Поэтому я просто должен был опустить oExcelWkb.Close True, и это сработало. Спасибо. Что касается этой темы, я буду публиковать новую тему (новая проблема, с которой я столкнулся). Еще раз спасибо Nemo
+ 1 За то, что видел это :) @Nemo:gets executed under Workbook_Open automatically saves and closes. Если бы вы не проигнорировали мой комментарий, мы бы решили это раньше :) В конце концов, я удалил свой комментарий Siddharth Rout

Похожие вопросы