我知道可以在VBA-Excel中创建xla插件,但是如果目标是分发到第三部分则不安全。我也知道可以在Visual Studio中创建一个COM加载项,但是我已经用VBA编写了代码,在VB(VS)中完成同样的操作需要一段时间。
有谁知道是否有可能"翻译"加载到VB代码中的VBA代码来创建COM加载项?或使用VBA代码为excel创建COM加载项的任何其他方法?
感谢您的支持
答案 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等对象的机制。