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

标签 c# vba com interop

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

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

我发现有几篇帖子(例如 this )提出了这个问题,但并没有真正提供答案。

最佳答案

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

这是我在进行研究和实验后刚刚编写的一个 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

关于c# - 是否可以从 C# COM 互操作对象写入 VBA 立即窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939632/

相关文章:

c# - 将返回值转换为泛型

excel - Do While,循环在初始循环后找不到文件

c++ - 如何在 C++ 中将 Windows DATE 转换为 Unix 时间

c# - 我如何知道执行更新的 SQL Server 存储过程是否有效?

c# - json.net: DateTimeStringConverter 在 ReadJson() 中获取一个已经转换为 DateTime 的对象

vba - 在 VBA 过滤表中选择第一 10 行可见单元格

python - 使用 win32inet.WinHttpGetProxyForUrl 的正确方法是什么

C++/COM/代理 Dll : method override/method forwarding (COM implementation inheritance)

c# - 将数组作为命令行参数传递给 Asp.Net Core

excel - 在 VBA 中访问 Microsoft Forms 2.0 框架控件