不明白为什么以下VBA代码段会抛出错误52

时间:2012-10-31 15:40:56

标签: excel-vba vba excel

以下代码段抛出错误52 - 错误的文件名或编号,我不知道原因:

Private Sub InitializeLogFile()
  Dim fileNumber As Integer

  filename = Left(ThisWorkbook.Name, (InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1))
  LOG_FULL_FILENAME = "D:\data\" & Environ("USERNAME") & "\My Documents\" + filename + "_" + Format(Now, "yyyymmdd_hh:mm:ss") + ".log"

  MsgBox LOG_FULL_FILENAME

  fileNumber = FreeFile

  MsgBox fileNumber

  Open LOG_FULL_FILENAME For Append As #fileNumber

  Print #fileNumber, Date & " - " & ThisWorkbook.Name & " opened. "
  Print #fileNumber,

  Close #fileNumber
End Sub

有人可以指出我的错误吗?

2 个答案:

答案 0 :(得分:6)

错误在这一行:

LOG_FULL_FILENAME = "D:\data\" & Environ("USERNAME") & "\My Documents\" + filename + "_" + Format(Now, "yyyymmdd_hh:mm:ss") + ".log"

具体来说,来自Format(Now, "yyyymmdd_hh:mm:ss")

您无法在文件名中添加:

文件名不能包含\/:*?"<>|

尝试:Format(Now, "yyyymmdd_hhmmss")

答案 1 :(得分:0)

首先,使用Option Explicit并初始化所有变量。

其次,如果工作簿名称是例如。 “Book1”,然后(InStrRev(ThisWorkbook.Name, ".", -1, vbTextCompare) - 1)导致-1。并且调用Left(..., -1)会产生运行时错误。

使用调试器,你会看到。