问题
我想知道是否可以在Excel VBA中复制或提取立即窗口的内容,因此我可以将其存储在某处。我已经知道你可以手动从窗口复制和粘贴,我感兴趣的是它是否可以用代码(最好是在VBA本身)。
解释
有关此问题的问题已经在SO上被问过几次(例如this和this),没有人给出明确答案,我无法通过快速搜索找到答案。大多数时候,答案回答询问为什么有人想要这样做,并在问题中提供的情况下给出解决方法(例如如何将消息输出到文件或单元格范围)。鉴于此,我想到了一些示例场景,其中有人可能想要这样做并且不能(轻松地)解决它。
示例方案
A)我正在开发一个包含大量宏的大型工作簿,随时进行调试。这包括使用debug.print
语句并直接在立即窗口中查询,例如: ? myVar
。在会话结束时,我希望能够自动将即时窗口的内容复制到日志文件中,因此我知道之后的调试会话期间发生了什么。例如,这可以使用Workbook_BeforeClose
事件过程。
B)我正在使用两个包含VBA项目的工作簿 - 一个我无法编辑,另一个我可以正在编写。我无法编辑的那个通过我想要存储的debug.print
将调试信息输出到即时窗口(但我真的不关心在哪里)。
声明
我纯粹出于好奇而问这个问题。我怀疑我已经知道了答案(不可能这样做),但我不确定。
答案 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
但是:使用“?”在即时窗口中不会保存