程序里如何调用ArcMap中现有的功能模块

程序里如何调用ArcMap中现有的功能模块?许多朋友问到我这个问题,今天我做个小例子.

如何调用ArcMap中现有的功能,比如菜单栏、工具栏中的某些功能。这些都可以通过UID来实现。本例是通过UID调用“另存为”功能。

可以通过两种方法得到UID:

方法一:运用ArcID模块

l 要点

通过ArcID获得UID,ArcID是ArcMap的VBA中的模块。只需要知道要调用功能的名称运用代码就可以实现。

l 程序说明

程序通过运用ArcID模块和命令名称来实现调用“另存为”的功能。

l 代码

Sub ExecuteCmd()
  Dim pCommandItem As ICommandItem
  ' Use ArcID module and the Name of the SaveAs command
Set pCommandItem = Application.Document.CommandBars.Find(arcid.File_SaveAs)
  pCommandItem.Execute
End Sub

方法二:直接写代码

l 要点

通过直接写代码获得UID实现调用功能。

l 程序说明

写入文件菜单项的GUID(CLSID或ProgID)来调用文件菜单项,同时还需要通过设置Subtype的值来调用文件菜单项的“另存为”功能。

l 代码

Sub ExecuteCmd2()
  Dim pUID As New UID
  Dim pCommandItem As ICommandItem
  ' Use the GUID of the Save command
  pUID.Value = "{119591DB-0255-11D2-8D20-080009EE4E51}"
  ' or you can use the ProgID
  ' pUID.Value = "esriCore.MxFileMenuItem"
  pUID.SubType = 3
  Set pCommandItem = Application.Document.CommandBars.Find(pUID)
  pCommandItem.Execute
End Sub