使用适用于Microsoft Office 2000或Visual Studio 6(Visual Basic 6)的旧开发人员工具,可以创建可在VBA项目中引用和调用的ActiveX DLL。有没有办法使用最新的Visual Basic / VBA编码工具?
答案 0 :(得分:0)
我自己不是专家,但这是一个让你入门的小例子。一个简单的DLL,用于计算在Visual Studio 2017中编写的两个数字的总和。
步骤:
1)创建一个类库项目。
2)在Assembly Information下,选择“Make assembly COM-Visible”。
3)在Build下,选择“Register for COM interop”。
ICalculator
界面:
[Guid("097E4850-4880-45B8-A20E-AFECC5D11D44")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface ICalculator
{
void Calculate(double number1, double number2);
}
ICalculatorEvents
界面:
[Guid("A3C988C8-9DA8-4981-AC11-6653FDDA6B30")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)]
public interface ICalculatorEvents
{
void CalculationSuccessfull(double result);
}
Calculator
类:
using System;
using System.Runtime.InteropServices;
namespace ComCalculator
{
public delegate void SuccessDelegate(double result);
[Guid("79B9BB64-AA3A-4FBB-BAAA-0FAC448CC695")]
[ClassInterface(ClassInterfaceType.None)]
[ComSourceInterfaces(typeof(ICalculatorEvents))]
[ComVisible(true)]
public sealed class Calculator : ICalculator
{
public event SuccessDelegate CalculationSuccessfull = null;
public Calculator()
{
}
public void Calculate(double number1, double number2)
{
double _calc = 0;
_calc = number1 + number2;
OnSuccess(_calc);
}
private void OnSuccess(double result)
{
CalculationSuccessfull?.Invoke(result);
}
}
}
在VBA中:
Option Explicit
Private WithEvents objCalc As ComCalculator.Calculator
Private Sub Calculate()
Set objCalc = New Calculator
objCalc.Calculate 7, 5
End Sub
Private Sub objCalc_CalculationSuccessfull(ByVal result As Double)
Debug.Print result
End Sub
'Output: 12
注意:
您需要以管理员身份运行Visual Studio。
答案 1 :(得分:-1)
是的,看起来是这样。
我用Google搜索“Create ActiveX DLL”,第一个是关于如何使用Visual Studio 6创建ActiveX DLL(名为ThingDemo.DLL
)的Microsoft教程。
也有很多其他好的链接。