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

时间:2011-08-10 17:55:27

标签: vba immediate-window

我正在编写一个宏,该宏遍历文档并尝试按Style解析它。现在,指定样式的任何内容都会复制到即时窗口中。有没有办法自动化宏进一步将文本从即时窗口移动到txt文件?否则,使用宏的任何人都无法看到文本,除非他们打开了VBA,对吗?

3 个答案:

答案 0 :(得分: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上的复选标记。

答案 1 :(得分:0)

将此代码置于即时窗口并按Enter键以在C#中将List写入JSON文本。

System.IO.File.WriteAllText(@"C:\Users\m1028200\Desktop\Json2.txt", 
JsonConvert.SerializeObject(resultsAll));

答案 2 :(得分: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