在BluePrism中工作时,运行Excel宏会打开另一个工作簿时遇到问题。
我在启用宏的excel工作簿Sub
中有一个\\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
在“模拟”窗口(您用Ctrl-G
打开)中,输入
call OpenMyFile ("\\myCompany\myFolder\myWorkbook.xlsx")
我看到工作簿已打开并关闭,并在“即时”窗口中得到了响应
About to open \\myCompany\myFolder\myWorkbook.xlsx
I found Cell A1 content
在使用BluePrism的机器人自动化过程(RPA)中,我需要打开包含此VBA Sub
的工作簿并运行它。
在“模仿”窗口中,我现在得到
About to open \\myCompany\myFolder\myWorkbook.xlsx
Could not open it
我尝试了两件事来解决它
如果我在VBA中将Sub
定义为
Public Sub OpenMyFile(Optional book2open As String = "\\myCompany\myFolder\myWorkbook.xlsx")
并使用OpenMyFile
进行调用,但这不能解决我的问题,因为我需要将book2open
传递给VBA。
如果我在VBA中将Sub
定义为Public Sub OpenMyFile(book2open As String')
,则会收到以下错误消息:内部:无法执行代码阶段,因为代码阶段抛出了异常:无法运行宏
'OpenMyFile(“ C:\ Users \ P01549 \ Documents \ TestHorsten.xlsx”,-1)'。该宏可能在此工作簿中不可用,或者所有宏都可能被禁用。
MS Excel VBO - Extended
对象使用互操作dot.net代码的一部分可以在BluePrisms Object Studio 中找到。我运行此对象的以下“操作”
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")
有人有解释或麻烦吗?
答案 0 :(得分:0)
Application.Run通常将参数作为单独的参数使用:
此参数不适用于Application.Run:
OpenMyFile("\\myCompany\myFolder\myWorkbook.xlsx")
您可以尝试修改VBO以使其具有带有参数的运行参数: 编写另一个名为“使用参数运行宏”(或任何您想调用的代码)的代码阶段
GetInstance(Handle).Run(Macro_Name, param1)
其中Macro_Name是“ OpenMyFile”,param1是“ \\ myCompany \ myFolder \ myWorkbook.xlsx”