2016-05-30 274 views
-1

我知道可以在VBA-Excel中创建一个xla插件,但是如果目标是分发给第三方,那么它就不是那么安全。我也知道可以在Visual Studio中创建一个COM加载项,但是我已经使用VBA编写代码,并且需要一段时间才能在VB(VS)中完成相同的工作。是否可以使用excel vba为excel创建COM加载项?

有谁知道是否可以将外接程序的VBA代码“翻译”成VB代码来创建COM加载项?或者使用VBA代码以任何其他方式为Excel创建COM加载项?

谢谢你的支持

+0

我相信你的问题的答案是“不”。 Excel VBA和VB.Net是相似的语言,但没有自动翻译工具。 – Blackwood

+1

不幸的是,自从Office 2003以来,一直没有Office的开发者版本(它允许你直接创建COM加载项)。如果您有VB6的副本,则所需的代码与VBA非常相似,但对于.Net版本的VB,需要一些工作。可能有商业节目会转换为你,但我不知道任何。 – Rory

回答

0

这是一个很长的答案。我只给你一个关于如何开发用于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子。让我知道你是否需要任何进一步的帮助。

0

要创建您将需要包裹的物体,可能是以下格式的DLL,TLB,OCX,ActiveEx EXE等

为了总结在上述对象的代码,你将需要你的代码COM一个提供机制来构建像VB6或.NET这样的对象的引擎。