是否可以使用excel vba为excel创建COM加载项?

时间:2016-05-30 22:21:55

标签: vb.net excel vba excel-vba

我知道可以在VBA-Excel中创建xla插件,但是如果目标是分发到第三部分则不安全。我也知道可以在Visual Studio中创建一个COM加载项,但是我已经用VBA编写了代码,在VB(VS)中完成同样的操作需要一段时间。

有谁知道是否有可能"翻译"加载到VB代码中的VBA代码来创建COM加载项?或使用VBA代码为excel创建COM加载项的任何其他方法?

感谢您的支持

2 个答案:

答案 0 :(得分:0)

这是一个很长的答案。我将举例说明如何为excel开发COM加载项以及如何从Excel VBA调用任何子加载项。下面的示例是在Visual Studio 2012上创建的。

首先创建一个新的“Office Excel Project”并将其命名为VBCommAddin。然后从Project Menu Add New Class。命名类 - > “ComAddinTest”。

ComAddinTest.vb类应具有以下代码 -

Imports System.Runtime.InteropServices

<ComVisible(True)> _
Public Interface ICommAddinUtils
    Sub SayHello()
End Interface

<ComVisible(True)> _

<ClassInterface(ClassInterfaceType.AutoDual)> _
Public Class CommAddins
       Implements ICommAddinUtils  

    Public Sub SayHello() Implements ICommAddinUtils.SayHello
        MsgBox("Hello World!")
    End Sub

End Class

现在在ThisAddin.vb中添加以下代码 -

Public utilities As ICommAddinUtils
Protected Overrides Function RequestComAddInAutomationService() As Object
    If utilities Is Nothing Then
        utilities = New CommAddinTest
    End If
    Return utilities
End Function

打开项目属性 - &gt;编译 - &gt;选中“注册COM互操作”。

现在构建并运行程序 - MS Excel将打开。转到VBA编辑器并添加下面给出的私有子 -

Private Sub HelloWorld ()
On Error GoTo ErrHandler:
      Dim HelloWrld as COMAddin
      Dim AutomationObject as Object
      Set HelloWrld = Application.COMAddins("VBCommAddin")
      Set AutomationObject = HelloWrld.Object
      AutomationObject.SayHello
      Exit Sub
ErrHandler:
MsgBox err.Description
End Sub

现在从Macro事件的任何按钮单击事件中调用HelloWorld子。如果您在这个问题上需要任何进一步的帮助,请告诉我。

答案 1 :(得分:0)

要创建COM,您需要将代码包装在一个对象中,该对象可以采用以下格式:dll,tlb,ocx,ActiveEx exe等。

要将代码包装在上面的对象中,您需要一个引擎来提供构建VB6或.NET等对象的机制。