【问题标题】:Excel Vba "File already open" when its not - windows officeExcel Vba“文件已打开”当它不是 - windows office
【发布时间】:2017-12-27 18:32:07
【问题描述】:

我正在尝试从与当前打开的工作簿位于同一文件夹中的另一个电子表格中读取数据,每当我运行此代码时,我都会收到已打开的错误文件。我的语法是否有问题或任何可能阻止这种情况发生的事情?

这里是代码。

Sub ReadFile()
    Infile = ThisWorkbook.Path & "\smallDataset.csv"
    Open Infile For Input As #1
        Input #1, a, b
        Close #1
        Debug.Print (a & " " & b)
End Sub

谢谢。

【问题讨论】:

  • 当前打开的工作簿的名称是什么? (并且挑剔:.csv 文件不是电子表格;它是逗号分隔值的文本文件(又名 CSV 文件)。)
  • 重新启动您的计算机,然后重试。另外,添加一行Debug.Print ThisWorkbook.Path 以确保它返回正确的路径。 (例如,如果您的工作簿尚未保存,它将是 blank。)乍一看,我认为您的语法也有点不对劲,请参阅 this detailed example of reading csv with VBA。跨度>
  • 如果是错误 55,这可能意味着您已经打开了一个文件句柄为 #1 的文件。 (不一定是相同文件,任何文件都可以。)尝试在即时窗口中输入Close(关闭所有打开的文件),然后再次运行您的代码

标签: vba excel


【解决方案1】:

尝试以下代码以确保没有使用句柄 #1 打开的文件

Sub ReadFile()
    InFile = ThisWorkbook.Path & "\smallDataset.csv"
    Close #1
    Open InFile For Input As #1
        Input #1, a, b
        Close #1
        Debug.Print (a & " " & b)
End Sub

或者你使用 Freefile 来获取下一个数字

Sub ReadFile
FileNumber = FreeFile

InFile = ThisWorkbook.Path & "\smallDataset.csv"

    Open InFile For Input As FileNumber
        Input #FileNumber, a, b
        Close #FileNumber
        Debug.Print (a & " " & b)
End Sub

【讨论】:

    【解决方案2】:

    我也遇到了您遇到的错误,这些是所述错误的可能原因。

    1) CSVExcel 文件一起打开 2) 你的代码有memory leaks

    解决数字 1

    • 尝试在未打开 CSV 时运行 VBA 代码

    解决数字 2

    • CSVobject 中写入数据后,尝试关闭它。

    我不确定您的完整代码,但请检查您是否有类似 Excel.CloseExcel.Quit 的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多