【问题标题】:Call COM Add-In Function in VBA在 VBA 中调用 COM 加载项函数
【发布时间】:2022-01-13 21:04:30
【问题描述】:

我想使用 VBA 调用 Microsoft Dynamics NAV Excel 插件的“刷新”功能,该插件在功能区上有一个按钮。

我尝试在单击按钮时录制宏,但由于Selection.AutoFilter 行,代码不起作用并引发运行时错误。

Sub Macro1()
'
' Macro1 Macro
'

'
    ActiveWorkbook.Names("ConnectionInfo").Delete
    ActiveWorkbook.Names.Add Name:="ConnectionInfo", RefersToR1C1:= _
        "='Sales Orders'!R1C1:R1C16"
    ActiveWorkbook.Names("ObjectInfo").Delete
    ActiveWorkbook.Names.Add Name:="ObjectInfo", RefersToR1C1:= _
        "='Sales Orders'!R2C1:R2C16"
    ActiveWorkbook.Names("ConnectionInfo").Delete
    ActiveWorkbook.Names.Add Name:="ConnectionInfo", RefersToR1C1:= _
        "='Sales Orders'!R1C1:R1C16"
    ActiveWorkbook.Names("ObjectInfo").Delete
    ActiveWorkbook.Names.Add Name:="ObjectInfo", RefersToR1C1:= _
        "='Sales Orders'!R2C1:R2C16"
    With ActiveWorkbook.Worksheets("Sales Orders").ListObjects("NavDataRegion"). _
        Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
Selection.AutoFilter
Selection.AutoFilter
End Sub

宏命名数据中包含连接地址和 NAV 列表名称的范围,但不对它们做任何事情。

它是一个 VSTO COM 加载项,据我所知没有出现在:

VBA 参考

插件

或对象浏览器

我运行了这段代码:

Sub comDATA()
    Dim oCAI As COMAddIn
    For Each oCAI In Application.COMAddIns
        Debug.Print oCAI.Description & vbTab & oCAI.progID
    Next oCAI
End Sub

发现ProgID是Microsoft.Dynamics.NAV.ExcelAddin,但是我不知道刷新按钮的函数名也不知道怎么执行。

【问题讨论】:

  • 我发现了一个关于这个问题的旧线程,多年来一直没有答案。他们谈论使用SendKeys 按下按钮以导致刷新。我不建议这样做。坏事会发生。 community.dynamics.com/ax/f/microsoft-dynamics-ax-forum/87586/…
  • 感谢您的链接。我还看到了用于键盘快捷键甚至单击仿真的 sendkeys 和 UIAutomation,但绝对不要实现这样的迂回解决方案。我觉得我错过了一些简单的东西,但似乎在 Google 上找不到任何东西。
  • 应该存在的东西并不意味着它存在。我也找不到此插件的 API 文档。最好的办法是使用 Set NAVObject = CreateObject("Microsoft.Dynamics.NAV.ExcelAddin") 之类的对象获取对象的句柄,然后在调试会话期间在本地窗口中探索 NAVObject
  • 注意:它可能不会导出任何有用的公共方法。

标签: excel vba microsoft-dynamics excel-addins microsoft-dynamics-nav


【解决方案1】:

尝试刷新ListObject 本身。

With ThisWorkbook.Worksheets("Sales Orders")
    .ListObjects("NavDataRegion").Refresh
End With

【讨论】:

  • 警告:这是未经测试的空气代码。我没有 Microsoft Dynamics NAV Excel 插件,无法测试。
  • 感谢您的建议。尝试运行代码时出现错误:“应用程序定义的或对象定义的错误”,所以我猜加载项有不同的过程来刷新数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2010-10-06
  • 2012-05-02
  • 2017-03-08
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多