使用';打开myFile进行追加';(VBA Excel)
我需要记录在Excel中运行的VBA宏的操作(100个子项和函数,10个子项)。我已经在使用一个“工作流”表作为一个用户可读的非常轻的日志(mainsub) 但是我想通过Debug.Print将当前打印在即时窗口中的内容记录下来,因为这是一个更全面的日志,所以可以生成很多内容。因此,我考虑的是:使用';打开myFile进行追加';(VBA Excel),vba,excel,logging,append,Vba,Excel,Logging,Append,我需要记录在Excel中运行的VBA宏的操作(100个子项和函数,10个子项)。我已经在使用一个“工作流”表作为一个用户可读的非常轻的日志(mainsub) 但是我想通过Debug.Print将当前打印在即时窗口中的内容记录下来,因为这是一个更全面的日志,所以可以生成很多内容。因此,我考虑的是: Open "C:\Temp\Log.txt" For Append As #1 Print #1, "This need to be logged" Close #1 Public Const log
Open "C:\Temp\Log.txt" For Append As #1
Print #1, "This need to be logged"
Close #1
Public Const log_file_nb = 1
Public Sub Open_log_file(byval log_file_nb)
Open "C:\Temp\Log myMacro.txt" For Append As #log_file_nb
End Sub
Public Sub Log_to_file(byval message as string)
Print #log_file_nb, message
End Sub
Public Sub Close_log_file()
Close #log_file_nb
End Sub
Log_to_file ("This need to be logged")
如何使用Open
和Close
命令
根据需要为每行打开/追加/关闭
比如:
Public Sub Log_to_file(byval message as string)
log_file_nb = FreeFile
Open "C:\Temp\Log.txt" For Append As #log_file_nb
Print #log_file_nb, message
Close #log_file_nb
End Sub
Log_to_file ("This need to be logged")
实现起来要简单得多,但我担心打开/关闭文件1000次的性能
在主子菜单的开头打开/根据需要追加/在主子菜单的结尾关闭
比如:
Open "C:\Temp\Log.txt" For Append As #1
Print #1, "This need to be logged"
Close #1
Public Const log_file_nb = 1
Public Sub Open_log_file(byval log_file_nb)
Open "C:\Temp\Log myMacro.txt" For Append As #log_file_nb
End Sub
Public Sub Log_to_file(byval message as string)
Print #log_file_nb, message
End Sub
Public Sub Close_log_file()
Close #log_file_nb
End Sub
Log_to_file ("This need to be logged")
- 在尝试登录之前,如何检查文件是否已打开?(某些sub可以通过按钮直接启动,也可以通过主sub递归启动)
- 当文件n°1仍然打开时,我是否可以打开第二个文件(我的宏还需要将数据输出到csv文件)以进行输出
- 保持文件打开是否会对内存产生很大影响(假设文件中有100000行)
logfileOpened
,并在log\u to\u文件子文件中添加一个检查
Public Const log_file_nb = 1
private log_file_open as boolean
Public Sub Open_log_file(byval log_file_nb)
Open "C:\Temp\Log myMacro.txt" For Append As #log_file_nb
log_file_open = True
End Sub
Public Sub Log_to_file(byval message as string)
if not log_file_open then Open_log_file log_file_nb
Print #log_file_nb, message
End Sub
Public Sub Close_log_file()
Close #log_file_nb
log_file_open = False
End Sub
这个悬而未决的一个细节是需要在某个时候关闭日志文件。通过将log_file_open作为Close_log_file子命令的一部分设置为false,您可以在运行程序的过程中多次执行此操作。但是在所有的Log\u-to\u文件调用之后,您至少需要这样做一次
最后一点注意:通过始终以追加模式打开日志文件,每次运行程序时,该文件都会增长。根据具体情况,这可能是可以接受的,或者您可能需要包含一些代码来防止日志文件变得庞大。一些可能的解决办法:
对于第一种方法-您可以在
Log\u to\u file
中的静态变量中缓冲行-当您累积了一定数量的行后,将其写出并清除缓冲区。对于第二种方法:使用全局布尔值指示文件是否已打开-在写入文件之前检查是否已打开,如果尚未打开,则打开文件。如果要打开一个文件进行附加,我认为它不会加载整个文件-它将查找文件的结尾并只写入新内容。如Rich所述,我正在使用日志进行调试,因此我不希望缓冲追加。我还测试了100000*打开/附加/关闭;需要18秒。这比执行100000*追加(只有1个打开和1个关闭)要糟糕得多,这需要1s。但是我要说,它的性能对我来说已经足够了,所以我不值得去管理关闭文件(如果宏失败,可能会失败);需要18秒。这比执行100000*追加(只有1个打开和1个关闭)要糟糕得多,这需要1s。但是我要说,它的性能对我来说已经足够了,所以我不需要管理关闭文件(如果宏失败,可能会失败)。关于日志文件增长的观点很好。我确实在使用日志中的日期,并在必要时删除旧日志。