При работе в BluePrism у меня проблема с запуском макроса Excel, который открывает другую книгу.
Процедура Excel-VBA
У меня есть Sub
в книге Excel с поддержкой макросов\\myCompany\myFolder\myMasterbook.xlsm
, который открывает другую рабочую книгу
Public Sub OpenMyFile(Optional book2open As String = "")
Dim openedBook As Workbook
Debug.Print "About to open", book2open
Set openedBook = Application.Workbooks.Open(book2open)
If openedBook Is Nothing Then
Debug.Print "Could not open it"
Else
Debug.Print "I found", openedBook.Worksheets(1).Cells(1, 1).Value
' Actually, I do a lot more with that workbook, of course
openedBook.Close
End If
End Sub
Когда в окне Immidiate (которое вы открываете с помощью Ctrl-G
), я ввожу
call OpenMyFile ("\\myCompany\myFolder\myWorkbook.xlsx")
Я вижу книгу открытой и закрытойи получить ответ в окне «Немедленно»Sub
и запустите его.В окне Immidiate я теперь получаю
About to open \\myCompany\myFolder\myWorkbook.xlsx
Could not open it
Я пробовал две вещи, чтобы решить его
Вызов без аргументов
Если я определяю свой Sub
в VBA как
Public Sub OpenMyFile(Optional book2open As String = "\\myCompany\myFolder\myWorkbook.xlsx")
и вызовите его с OpenMyFile
, но это не решает мою проблему, так как мне нужно , чтобы передать book2open
в VBA.
Сделать параметробязательный
Если я определяю Sub
в VBA как Public Sub OpenMyFile(book2open As String')
, я получаю эту ошибку: `Internal: Не удалось выполнить этап кода, поскольку исключение выдается этапом кода: Невозможно запустить макрос
'OpenMyFile ("C: \ Users \ P01549 \ Documents \ TestHorsten.xlsx", -1) ".Макрос может быть недоступен в этой книге или все макросы могут быть отключены.
Объект MS Excel VBO - Extended
использует взаимодействие
Часть кода dot.net можно найти в BluePrisms Объектная студия .Я запускаю следующие «Действия» этого объекта
Создать экземпляр
Dim excel as Object = CreateObject("Excel.Application")
' Create a GUID with which we can kill the instance later
' if we have to play hardball to get rid of it.
excel.Caption = System.Guid.NewGuid().ToString().ToUpper()
handle = GetHandle(excel)
Открыть книгу
Dim wb as Object = GetInstance(handle).Workbooks.Open(filename)
name = wb.Name
wb.Activate()
С
handle
: дескриптор, возвращаемый экземпляром создания filename
: \\myCompany\myFolder\myMasterbook.xlsm
Запуск макроса
GetInstance(Handle).Run(Macro_Name)
с
handle
: дескриптор, возвращенный экземпляром создания Macro_Name
: OpenMyFile("\\myCompany\myFolder\myWorkbook.xlsx")
У кого-нибудь есть объяснение или обходной путь?