VBA:写入日志文件的子对象
我在工作簿中定义了一组宏,我想向用户提供在日志文件中记录与这些宏相关的事件的选项 我通过在此工作簿中创建以下内容来启动日志:VBA:写入日志文件的子对象,vba,excel,Vba,Excel,我在工作簿中定义了一组宏,我想向用户提供在日志文件中记录与这些宏相关的事件的选项 我通过在此工作簿中创建以下内容来启动日志: Public writeLog as Boolean Public logWrite as Object Public log as Object Private Sub Worksheet_Open() Dim prompt as Integer prompt = MsgBox("Would you like to log events for this
Public writeLog as Boolean
Public logWrite as Object
Public log as Object
Private Sub Worksheet_Open()
Dim prompt as Integer
prompt = MsgBox("Would you like to log events for this session?", vbYesNo, "Log Events?")
If prompt Then
writeLog = True
Set logWrite = CreateObject("Scripting.FileSystemObject")
Set log = logWrite.CreateTextFile("C:/TEST.txt", False)
Else
writeLog = False
End If
End Sub
Private Sub Workbook_Open()
initLog
End Sub
然后我创建了一个过程,我可以用它来为这个对象写一个参数,我已经将它存储在它自己的模块中:
Public Sub PrintLog(obj as Object, argument as String)
If writeLog = True Then
obj.WriteLine argument
End If
End Sub
不幸的是,这不起作用,我也不知道为什么:即使我没有把obj
作为函数的参数(因为log
和logWrite
都是作为全局变量创建的),我也不能调用WriteLog(“这里的字符串”)
或调用WriteLog(log,“这里的字符串”)
而没有错误(编译错误:参数不是可选的。
)
有没有可能让这样一个
Sub()
工作,这样我就可以从工作簿中的任何地方调用它(例如,在用户表单中按下按钮后)无需在每个模块中定义新的脚本.FileSystemObject
?我相信您遇到了问题,因为writeLog已经作为布尔值存在。错误应该是弹出“检测到不明确的名称”
试试下面的方法
Public bLog as Boolean
Public logWrite as Object
Public log as Object
Private Sub Worksheet_Open()
Dim prompt as Integer
prompt = MsgBox("Would you like to log events for this session?", vbYesNo, "Log Events?")
If prompt Then
bLog = True
Set logWrite = CreateObject("Scripting.FileSystemObject")
Set log = logWrite.CreateTextFile("C:/TEST.txt", False)
Else
bLog = False
End If
End Sub
Public Sub WriteLog(Optional obj as Object, Optional argument as String)
If bLog = True Then
obj.WriteLine argument
End If
End Sub
编辑:在WriteLog(或PrintLog)中将参数设置为可选,以便进一步测试我认为您可以通过对代码进行一些小的更改来解决问题。我尝试了以下设置: 记录器模块:
Option Explicit
Private log As Object
Public Sub initLog()
Dim prompt As VbMsgBoxResult
Dim fso As Object
prompt = MsgBox("Would you like to log events for this session?", vbYesNo, "Log Events?")
If prompt = vbYes Then
Set fso = CreateObject("Scripting.FileSystemObject")
Set log = fso.CreateTextFile("C:/TEST.txt", False)
End If
End Sub
Public Sub PrintLog(argument As String)
If Not log Is Nothing Then
log.WriteLine argument
End If
End Sub
Public Sub yadda()
'test
PrintLog "yadda"
End Sub
此工作簿:
Public writeLog as Boolean
Public logWrite as Object
Public log as Object
Private Sub Worksheet_Open()
Dim prompt as Integer
prompt = MsgBox("Would you like to log events for this session?", vbYesNo, "Log Events?")
If prompt Then
writeLog = True
Set logWrite = CreateObject("Scripting.FileSystemObject")
Set log = logWrite.CreateTextFile("C:/TEST.txt", False)
Else
writeLog = False
End If
End Sub
Private Sub Workbook_Open()
initLog
End Sub
您可以在与
WriteLog
子模块相同的模块中编写例程来启动日志。然后在工作表中调用它_Open
事件我是否应该启动连接(设置日志写入
,设置日志
)在每次的过程中,如果是这样的话?我很抱歉:这是我在编写代码时的疏忽。布尔值和函数在我的代码中的命名与在你的代码中的命名不同。奇怪的是,调用PrintLog(log,“String here.”)那么应该可以了。我将编辑并使参数成为可选的,因为可能在调用代码的某个地方,它可能不包括对象?