我需要从C#addin操作应用程序的VBA环境,这样我就可以将模块,事件处理程序等添加到由插件创建的文档中。
我之前在VB.Net中已经完成了它,但是看不到如何在C#中获取IDE对象。我只是缺少一个引用或一个Using指令吗?我在参考文献中看不到任何合适的内容。
在VB.Net中,我引用了 Microsoft.VisualBasic ,我已经这样做了:
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel
Public Module VBA
Private m_VBEnv As VBIDE.VBE
Private m_dlg As AddInDialog
Private Structure EventHandler
Public objectName As String
Public eventName As String
Public action As String
End Structure
Private m_handlers As New Collection
Public Function InitVBA(ByVal app As PBObjLib.Application, ByVal dlg As AddInDialog, ByVal scrWidth As Integer, ByVal scrHeight As Integer) As Boolean
InitVBA = False
Try
m_dlg = dlg
m_VBEnv = DirectCast(app.VBE, VBIDE.VBE)
m_VBEnv.MainWindow.Height = 480
m_VBEnv.MainWindow.Width = 640
m_VBEnv.MainWindow.Left = (scrWidth - m_VBEnv.MainWindow.Width)
m_VBEnv.MainWindow.Top = ((scrHeight - m_VBEnv.MainWindow.Height) - 50)
m_VBEnv.MainWindow.WindowState = VBIDE.vbext_WindowState.vbext_ws_Minimize ' .vbext_ws_Normal
HideVBWindow()
InitVBA = True
Catch e As Exception
dlg.LogMessage(AddInDialog.LogLevel.Err, "Failed to initialise VBA: " & e.Message)
End Try
End Function
...
End Module
我已将 Microsoft.VisualBasic 的引用添加到我的C#中,但它无法识别VBIDE.VBE。
另外,我如何在C#中执行DirectCast位。这只是一个简单的演员?
有什么建议吗?
答案 0 :(得分:1)
答案是确保所有引用都是.NET引用。我有一个隐藏在那里的COM。我删除了VB相关的引用,重新加载了项目,添加了引用(这次是所有的.NET),它们都变得生动起来。