从dot.net

时间:2019-02-13 15:36:08

标签: .net excel vba excel-interop blueprism

在BluePrism中工作时,运行Excel宏会打开另一个工作簿时遇到问题。

Excel-VBA例程

我在启用宏的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调用VBA

在使用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_NameOpenMyFile("\\myCompany\myFolder\myWorkbook.xlsx")

有人有解释或麻烦吗?

1 个答案:

答案 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”