0

我在 VBA 中遇到以下问题

Dim backupFile As Integer
Dim backupFName As String

backupFName = xBackupDirName & "\" & "swap_backup_cf_" & xSwapID & ".txt"
backupFile = fopenForReading(backupFName)

Dim tmp  As String
tmp = getLine(backupFile)

Dim b As Boolean
b = EOF(backupFile)

fopenforReadingandgetLine正是您所期望的(我刚来自 C++ 背景,这些名字会更快地浮现在脑海中)。问题是最后一行给了我“错误的文件名或编号”错误。但是,tmp=getLine(backupFile)读取backupFile成功。我究竟做错了什么?

PS 只是为了完整性:

Public Function fopenForReading(xFname As String) As Integer
    Dim iFile As Integer
    iFile = FreeFile            
    Open xFname For Input As #iFile
    fopenForReading = iFile
End Function

Public Function getLine(iFile As Integer) As String
   Dim line As String
   Line Input #iFile, line
   getLine = line
End Function
4

1 回答 1

0

它对我来说很好(Excel 2010),唯一的修改是文件名。我最好的猜测是(假设是一个提取,这可能是一个安全的假设)backupFile 的值被更改或丢失或文件已经以某种方式关闭的过程中的某个地方。

我建议在代码中放置两个断点,一个在 Freefile 命令以检查返回的数字(很可能它将为“1”,但无论如何都要检查),一个在 EOF 命令,以便您可以检查backupFile 执行前的值。

我想到的另一件事是 getLine 函数调用可能在循环内的某个地方。确保在循环内也不会再次调用 fopenforReading 。只是一种可能。

于 2012-11-14T09:28:43.257 回答