将即时窗口的内容写入文本文件

12

我正在编写一段宏代码,该代码通过样式遍历文档并尝试解析它。目前,指定样式中的任何内容都会被复制到立即窗口中。是否有一种方法可以进一步自动化宏来将文本从立即窗口移动到txt文件中?否则,使用该宏的任何人都无法查看文本,除非他们打开VBA,对吗?


你是如何将它放入即时窗口的?你能否将其存储到字符串变量中,然后在进程完成时将其放入文本文件中? - mellamokb
...或者将其弹出在一个表单中。 - Tim Williams
1
我不明白为什么你想要先将信息传输到立即窗口,然后再从那里写入文件。为什么不直接写入文件呢? - Jean-François Corbett
3个回答

20

这是我的建议:同时将信息写入立即窗口和文件中。以下是示例。

为什么要先将信息传输到立即窗口,然后再从那里将其写入文件?这听起来很反常而且毫无用处!

Dim s As String
Dim n As Integer

n = FreeFile()
Open "C:\test.txt" For Output As #n

s = "Hello, world!"
Debug.Print s ' write to immediate
Print #n, s ' write to file

s = "Long time no see."
Debug.Print s
Write #n, s ' other way of writing to file

Close #n


Dim FSO As Scripting.FileSystemObject
Set FSO = New Scripting.FileSystemObject
Dim txs As Scripting.TextStream
Set txs = FSO.CreateTextFile("C:\test2.txt")
s = "I like chickpeas."
Debug.Print s ' still writing to immediate
txs.WriteLine s ' third way of writing to file
txs.Close
Set txs = Nothing
Set FSO = Nothing

请注意,这段代码的最后一部分需要设置一个引用:工具 > 引用 > 选中 Microsoft Scripting Runtime。


你好,谢谢回答!我有一个问题:使用其中一种方法是否有优势/不便之处? - Oscar Anthony
1
是的。我建议你阅读相关资料并尝试使用它们。个人而言,我几乎总是使用 FileSystemObject 方法。 - Jean-François Corbett

1
将此代码放入立即窗口并按Enter键以在C#中将List写入JSON文本。
System.IO.File.WriteAllText(@"C:\Users\m1028200\Desktop\Json2.txt", 
JsonConvert.SerializeObject(resultsAll));

1
这是一个 VBA 问题。 - HackSlash

0
我建议使用一些基于最佳实践的日志框架,例如VBA Logging,它支持文件记录或可配置并行控制台等。
示例用法(例如在某个Foo.bas模块中):
Sub MySub()
  Logging.setModulName (Application.VBE.ActiveVBProject.Name)

  Set log = Logging.getNewLogger(Application.VBE.ActiveVBProject.Name)
  Call log.setLoggigParams(Logging.lgALL, True, True, True) ' log  ALL to Console, Buffer, File

  log.logINFO "This is my message ..", "MySub"
End Sub

导致类似以下结果(无论是在控制台还是vba_logging.log文件中):

(16.12.2018 13:08:30)[XlsxMgr::MySub]-INFO:  This is my message ..

日志配置文件看起来像这样:

## vba_logging.properties
LOG_LEVEL = info
LOG_TO_CONSOLE = True
LOG_TO_BUFFER = True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接