从C#.Net(VS2008)处理VBA环境

时间:2010-08-31 10:41:36

标签: c# vba ide

我需要从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位。这只是一个简单的演员?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

答案是确保所有引用都是.NET引用。我有一个隐藏在那里的COM。我删除了VB相关的引用,重新加载了项目,添加了引用(这次是所有的.NET),它们都变得生动起来。