none
Запуск excel-макроса с помощью VBScript RRS feed

  • Вопрос

  • Доброго времени суток!

    Возникла следующая проблема с запуском макроса из VBScript.

    У меня есть excel-файл с макросом. С помощью VBScript я открываю этот файл, заполняю в нем данные и пытаюсь запустить с помощью кода

    ... Set oExcelD = CreateObject("Excel.Application") oExcelD.DisplayAlerts = False oExcelD.EnableEvents = False oExcelD.Visible = False oExcelD.AskToUpdateLinks = False

    Set oWorkbookD = oExcelD.Workbooks.Open(Template)
    oWorkbookD.CheckCompatibility = False
    ... oExcelD.Application.Run "main" ...


    следующий макрос:

    Declare Function EssVRetrieve Lib "ESSEXCLN.XLL" (ByVal sheetName As Variant, ByVal range As Variant, ByVal lockFlag As Variant) As Long
    Declare Function EssVConnect Lib "ESSEXCLN.XLL" (ByVal sheetName As Variant, ByVal username As Variant, ByVal password As Variant, ByVal server As Variant, ByVal application As Variant, ByVal database As Variant) As Long
    Declare Function EssVDisconnect Lib "ESSEXCLN.XLL" (ByVal sheetName As Variant) As Long
    
    Sub main()
    
    X = EssVConnect("Лист1", "admin", "admin", "Essbase", "App", "DB")
    
    application.Run ("EssMenuLock")
    application.Run ("EssMenuSend")
    
    'for Disconnect
    X = EssVDisconnect(Empty)
    
    End Sub

    но получаю ошибку 'Run-time error '53': File not found: 'ESSEXCLN.XLL' на строке 

    X = EssVConnect("Лист1", "admin", "admin", "Essbase", "App", "DB")

    ESSEXCLN.XLL - это add in для работы с Oracle Essbase.

    Если я запускаю макрос руками, открыв этот excel-файл, то все отрабатывает нормально, из VBScipt - не получается.

    Есть предположение, что из VBScipt при запуске макроса, игнорируется объявление функций

    Declare Function EssVRetrieve Lib "ESSEXCLN.XLL" (ByVal sheetName As Variant, ByVal range As Variant, ByVal lockFlag As Variant) As Long
    Declare Function EssVConnect Lib "ESSEXCLN.XLL" (ByVal sheetName As Variant, ByVal username As Variant, ByVal password As Variant, ByVal server As Variant, ByVal application As Variant, ByVal database As Variant) As Long
    Declare Function EssVDisconnect Lib "ESSEXCLN.XLL" (ByVal sheetName As Variant) As Long

    Пробовал указывать полный путь к надстройке ESSEXCLN.XLL, не помогает.

    Сама надстройка в excel включена и работает.

    Помогите разобраться в чем проблема, спасибо!


    • Изменено belyaevsx 20 ноября 2012 г. 13:41
    20 ноября 2012 г. 13:40

Ответы

  • Добрый день!

    Возможно я ошибаюсь, но в случае если dll, функции которой требуется получить, находится не в рабочем или системном каталоге открываемого файла Excel, то макрос его может не находить.

    Как вариант, попробуйте перед выполнением

    Set oWorkbookD = oExcelD.Workbooks.Open(Template)

    сначала установить текущий каталог приложения на каталог, в котором находится требуемая dll (т.е. если у вас dll находится в одной папке с excel-файлом, укажите в качестве рабочего данный каталог)


    • Изменено Poilov Maxim 23 ноября 2012 г. 9:20
    • Помечено в качестве ответа Abolmasov Dmitry 30 ноября 2012 г. 7:54
    23 ноября 2012 г. 9:19

Все ответы

  • Возможно проблема в правах доступа. 2 варианта - либо запускайте VBScript с правами администратора, либо попробуйте в настройках Exel выставить настройку безопасности по мнимому.

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    20 ноября 2012 г. 15:54
    Отвечающий
  • Добрый день!

    Возможно я ошибаюсь, но в случае если dll, функции которой требуется получить, находится не в рабочем или системном каталоге открываемого файла Excel, то макрос его может не находить.

    Как вариант, попробуйте перед выполнением

    Set oWorkbookD = oExcelD.Workbooks.Open(Template)

    сначала установить текущий каталог приложения на каталог, в котором находится требуемая dll (т.е. если у вас dll находится в одной папке с excel-файлом, укажите в качестве рабочего данный каталог)


    • Изменено Poilov Maxim 23 ноября 2012 г. 9:20
    • Помечено в качестве ответа Abolmasov Dmitry 30 ноября 2012 г. 7:54
    23 ноября 2012 г. 9:19