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