我知道可以在VBA-Excel中创建一个xla插件,但是如果目标是分发给第三方,那么它就不是那么安全。我也知道可以在Visual Studio中创建一个COM加载项,但是我已经使用VBA编写代码,并且需要一段时间才能在VB(VS)中完成相同的工作。是否可以使用excel vba为excel创建COM加载项?
有谁知道是否可以将外接程序的VBA代码“翻译”成VB代码来创建COM加载项?或者使用VBA代码以任何其他方式为Excel创建COM加载项?
谢谢你的支持
我知道可以在VBA-Excel中创建一个xla插件,但是如果目标是分发给第三方,那么它就不是那么安全。我也知道可以在Visual Studio中创建一个COM加载项,但是我已经使用VBA编写代码,并且需要一段时间才能在VB(VS)中完成相同的工作。是否可以使用excel vba为excel创建COM加载项?
有谁知道是否可以将外接程序的VBA代码“翻译”成VB代码来创建COM加载项?或者使用VBA代码以任何其他方式为Excel创建COM加载项?
谢谢你的支持
这是一个很长的答案。我只给你一个关于如何开发用于excel的COM加载项以及如何从Excel VBA调用任何子集的例子。以下示例在Visual Studio 2012上创建。
首先创建一个新的“Office Excel项目”并将其命名为VBCommAddin。然后从项目菜单添加新类。命名类 - >“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
打开项目属性 - >编译 - >检查“注册为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
现在叫宏从事件的任何按钮单击事件的HelloWorld子。让我知道你是否需要任何进一步的帮助。
要创建您将需要包裹的物体,可能是以下格式的DLL,TLB,OCX,ActiveEx EXE等
为了总结在上述对象的代码,你将需要你的代码COM一个提供机制来构建像VB6或.NET这样的对象的引擎。
我相信你的问题的答案是“不”。 Excel VBA和VB.Net是相似的语言,但没有自动翻译工具。 – Blackwood
不幸的是,自从Office 2003以来,一直没有Office的开发者版本(它允许你直接创建COM加载项)。如果您有VB6的副本,则所需的代码与VBA非常相似,但对于.Net版本的VB,需要一些工作。可能有商业节目会转换为你,但我不知道任何。 – Rory