Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> OA  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1701853
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

如何让EXCEL中对象的OnAction可以直接调用ComAddIn Dll文件中指定类的指定函数?

作者:cg1  摘自:access911.net  :cg1  更新日期:2011-12-16  浏览人次:

 

问题:

如何让EXCEL中对象的OnAction可以直接调用ComAddIn Dll文件中指定类的指定函数?《OA》

在帮助中找到了以下几句
本示例向命令栏“Custom”添加一个命令栏控件。COM 加载项“FinanceAddIn”将在每次单击该控件时运行。

Set myBar = CommandBars("Custom")
Set myControl = myBar.Controls _
    .Add(Type:=msocontrolButton)
With myControl
    .FaceId = 2
    .OnAction = "!<FinanceAddIn>"
End With
myBar.Visible = True

但是无论我如何设置,而且绝对保证 COM ADDIN DLL文件已经正确注册了,但是仍然无法启动对应的函数。

 

回答:

参考了微软的KB

http://support.microsoft.com/kb/238228/en

http://access911.net/csdn/FileDescription.asp?mdb=2011-12-16&id=24


   Option Explicit

   Dim oXL As Object
   Dim WithEvents MyButton As Office.CommandBarButton

   Private Sub AddinInstance_OnConnection(ByVal Application As Object, _
    ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _
    ByVal AddInInst As Object, custom() As Variant)
      On Error Resume Next
      MsgBox "My Addin started in " & Application.Name
   
      Set oXL = Application
   
      Set MyButton = oXL.CommandBars("Standard").Controls.Add(1)
         With MyButton
            .Caption = "My Custom Button"
            .Style = msoButtonCaption

          ' The following items are optional, but recommended. 
          ' The Tag property lets you quickly find the control 
          ' and helps MSO keep track of it when there is more than
          ' one application window visible. The property is required
          ' by some Office applications and should be provided.

            .Tag = "My Custom Button"
 
          ' The OnAction property is optional but recommended. 
          ' It should be set to the ProgID of the add-in, such that if
          ' the add-in is not loaded when a user presses the button,
          ' MSO loads the add-in automatically and then raises
          ' the Click event for the add-in to handle. 

            .OnAction = "!<" & AddInInst.ProgId & ">"
            .Visible = True
         End With
   
   End Sub

   Private Sub AddinInstance_OnDisconnection(ByVal RemoveMode As _
      AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
      On Error Resume Next
      MsgBox "My Addin was disconnected by " & _
         IIf(RemoveMode = ext_dm_HostShutdown, _
         "Excel shutdown.", "end user.")
      
      MyButton.Delete
      Set MyButton = Nothing
      Set oXL = Nothing
    End Sub

   Private Sub MyButton_Click(ByVal Ctrl As Office.CommandBarButton, _
     CancelDefault As Boolean)
      MsgBox "Our CommandBar button was pressed!"
   End Sub


注意看红色字体,也就是说,无论如何在Com Addin 中如果要让某个button执行你的代码,必须用WithEvents的方法来声明并Handle对象的对应事件。OnAction的设置只是个可选项,其作用只是在单击对应按钮的时候如果ComAddin未加载,加载它而已。因此OnAction中只能设置 ProgId ,而不是具体的某个方法。

 


本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利