【发布时间】: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 加载项,据我所知没有出现在:
我运行了这段代码:
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