是否可以在Excel VBA中复制立即窗口的内容?

时间:2017-03-24 15:47:58

标签: excel vba excel-vba

问题

我想知道是否可以在Excel VBA中复制或提取立即窗口的内容,因此我可以将其存储在某处。我已经知道你可以手动从窗口复制和粘贴,我感兴趣的是它是否可以用代码(最好是在VBA本身)。

解释

有关此问题的问题已经在SO上被问过几次(例如thisthis),没有人给出明确答案,我无法通过快速搜索找到答案。大多数时候,答案回答询问为什么有人想要这样做,并在问题中提供的情况下给出解决方法(例如如何将消息输出到文件或单元格范围)。鉴于此,我想到了一些示例场景,其中有人可能想要这样做并且不能(轻松地)解决它。

示例方案

A)我正在开发一个包含大量宏的大型工作簿,随时进行调试。这包括使用debug.print语句并直接在立即窗口中查询,例如: ? myVar。在会话结束时,我希望能够自动将即时窗口的内容复制到日志文件中,因此我知道之后的调试会话期间发生了什么。例如,这可以使用Workbook_BeforeClose事件过程。

B)我正在使用两个包含VBA项目的工作簿 - 一个我无法编辑,另一个我可以正在编写。我无法编辑的那个通过我想要存储的debug.print将调试信息输出到即时窗口(但我真的不关心在哪里)。

声明

我纯粹出于好奇而问这个问题。我怀疑我已经知道了答案(不可能这样做),但我不确定。

2 个答案:

答案 0 :(得分:0)

是的,但不能使用control-c...。选择所需的内容,然后拖放

答案 1 :(得分:0)

1-创建一个名为“debug.print”的工作表

2-隐藏它:

Sheets("debug.print").Visible = 2 'xlSheetVeryHidden, only can be visible with vba

3-创建这个函数:

Function debug_print(c As String)
    ThisWorkbook.Sheets("debug.print").[a1048576].End(xlUp).Offset(1).Value = c
    Debug.Print c
End Function

4-将您的代码“debug.print”替换为“debug_print”

5-示例:

Sub blablabla()
    debug_print "i am doing whatever"
End Sub

但是:使用“?”在即时窗口中不会保存

现在有很多方法可以将其导出为文件,例如 CSVTXT、保存在 SQL 等中...