我正在尝试按照this指南从VBA调用C#代码。我可以在工作簿属性中看到ReferenceAssemblyFromVbaProject
并将其设置为true,但解决方案资源管理器不会在工作簿或工作表属性中显示EnableVBACallers。 VS2015和2017也是如此。
代码与上面链接的msdn示例完全相同。以下是ThisWorkbook类。如果它提供任何额外信息,我可以通过GetManagedClass从VBA调用ImportData函数,但我在VBA中的工作簿上没有CallVSTOAssembly方法。
[ComVisible(true)]
public interface IVSTOCallWrapper
{
void ImportData();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class VSTOWrapper : IVSTOCallWrapper
{
public void ImportData()
{
Excel.Worksheet activeWorksheet = Globals.ThisWorkbook.Application.ActiveSheet as Excel.Worksheet;
if (activeWorksheet != null)
{
Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
range1.Value2 = "Some junk";
}
}
}
public VSTOWrapper vcall;
protected override object GetAutomationObject()
{
if (vcall == null)
vcall = new VSTOWrapper();
return vcall;
}