是否可以从C#COM互操作对象写入VBA立即窗口?

时间:2012-10-17 17:07:44

标签: c# vba com interop

我编写了一个由MSAccess使用的C#COM对象。它对我的目的非常有效,但我想在创建新对象时进行版本检查,并通过即时窗口通知VBA程序员新版本可用。

这可能吗?我已经尝试过Debug.Print和Console.WriteLine,但都不起作用。

我找到了几个提问的帖子(如this),但没有真正提供答案。

1 个答案:

答案 0 :(得分:2)

这是可能的......但不是很漂亮或可靠。

这是我刚做完研究和试验后写的VBA,可以做你想做的事。基本上作为概念证明提供。

Sub ImmediateWindowSendKeys(keys As String)
    set w = Application.VBE.windows("Immediate")
    w.SetFocus
    SendKeys keys
    w.Visible = True
End Sub

我假设您可以将其转换为您想要的语言,甚至可以从C#调用此子语句。此方法的主要问题是,如果您单步执行代码,在当前处理中的任何位置设置断点或生成弹出警报(这是发送密钥的限制),则它不起作用。但是,如果使用F5或从即时窗口运行,它确实有效。

我会尝试找出一种访问窗口内容的方法,但是现在这是我能提供的最好的。

编辑:

根据您的评论,这应该同样无用。但是,我刚刚开始涉足这类事情,所以这是一种游戏。这将在当前模块的末尾添加注释。

Sub AddCommentsToEndOfModule()
    Set cm = Application.vbe.ActiveCodePane.CodeModule
    cm.InsertLines cm.CountOfLines + 1, "'Dear Developer " & vbCrLf & "'Hi" & vbCrLf & "'Sincerely," & vbCrLf & "'Me"
End Sub