Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#.Net(VS2008)操作VBA环境_C#_Vba_Ide - Fatal编程技术网

从C#.Net(VS2008)操作VBA环境

从C#.Net(VS2008)操作VBA环境,c#,vba,ide,C#,Vba,Ide,我需要从C#addin操作应用程序的VBA环境,以便可以向由该addin创建的文档添加模块、事件处理程序等 我以前在VB.Net中做过,但不知道如何在C#中获取IDE对象。我只是缺少一个引用或使用指令?我在参考资料中看不到任何合适的东西 在VB.Net中,我引用了Microsoft.VisualBasic,并完成了以下操作: Imports System Imports System.Collections.Generic Imports System.Collections.ObjectMod

我需要从C#addin操作应用程序的VBA环境,以便可以向由该addin创建的文档添加模块、事件处理程序等

我以前在VB.Net中做过,但不知道如何在C#中获取IDE对象。我只是缺少一个引用或使用指令?我在参考资料中看不到任何合适的东西

在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
我在我的C#中添加了对Microsoft.VisualBasic的引用,但它无法识别VBIDE.VBE

另外,如何在C#中执行DirectCast位。这只是一个简单的演员阵容吗


有什么建议吗?

答案是确保所有引用都是.NET引用。我有一个通讯器藏在那里。我删除了与VB相关的引用,重新加载了项目,添加了引用(这次全部是.NET),所有的引用都变为现实。

答案是确保所有引用都是.NET引用。我有一个通讯器藏在那里。我删除了与VB相关的引用,重新加载了项目,添加了引用(这次全部是.NET),所有这些都变得栩栩如生