将当前窗口的内容写入文本文件



我正在写一个宏,它通过一个文档,并试图解析它的风格。现在,任何指定样式的内容都会被复制到当前窗口中。是否有一种方法来自动化宏进一步移动文本从即时窗口到一个txt文件?否则,任何人使用宏将无法看到文本,除非他们打开VBA,正确吗?

我的建议是:同时写入当前窗口和文件。下面的例子。

为什么让信息首先在直接窗口中传输,然后才从那里写入文件?这听起来太难了!

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

注意,这最后一位代码需要设置一个引用:Tools> References> checkmark at Microsoft Scripting Runtime

把这段代码放到即时窗口,然后按回车键,用c#将List写入JSON文本。

System.IO.File.WriteAllText(@"C:Usersm1028200DesktopJson2.txt", 
JsonConvert.SerializeObject(resultsAll));

我建议使用一些基于最佳实践的日志框架,如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

相关内容

  • 没有找到相关文章

最新更新