【问题标题】:Looping Through Txt Files using VBA - DIR() issue使用 VBA 循环遍历 Txt 文件 - DIR() 问题
【发布时间】:2023-03-23 05:47:01
【问题描述】:

我有以下代码,我试图修改特定文件夹中的一些 Txt 文件。我首先要检查循环是否有效。但是,当我运行宏时,代码只能读取第一个文件,然后在 strFileName = Dir() 处出现运行时 5 错误。我不确定问题是什么。我能想到的唯一问题是我在两个模块表之间移动代码。文件夹位置保存在 Excel 工作簿工作表 1 中的 txt 框中。

Sub Txt_File_Loop()
Public TextFile As String
Dim FolderLocation As String
Dim strFielName As String
Dim SaveLocation As String
'Location is present in a Text box
FolderLocation = Sheets(1).FolderLocationTXTBX.Text
strFileName = Dir(FolderLocation & " \ * ")
Do Until strFileName = ""
TextFile = FolderLocation & "\" & strFileName
Module2.Macro1
strFileName = Dir() 'ERROR is Here
Loop

End Sub

Sub Macro1()
Dim x As String
Open TextFile For Input As #1
Do Until EOF(1)
Line Input #1, textline
x = x & textline
Loop

Close #1
MsgBox x

End Sub

【问题讨论】:

  • uhh.. 你的代码是如何编译的?你缺少一个 Loop 语句来关闭 Do While... 你也有 Open TextFileinside 循环,那么它怎么知道文件结尾(EOF)在哪里在打开它之前?您的第一部分似乎根本不是任何子程序的一部分。根据您提供的代码,strFileName = Dir() 上不可能发生错误...
  • strFileName = Dir(FolderLocation & " \ * ") 你的意思是strFileName = Dir(FolderLocation & "\")?还有debug.print FolderLocation给你什么?
  • 我的意思是在macro1中添加一个Loop语句。
  • debug.print FolderLocation 只是给了我文件夹的链接。例如 C:\文件夹\子文件夹。我尝试删除 * 但它不起作用,我仍然得到同样的错误。
  • ... 或更笼统地说:在代码模块的顶部包含 Option Explicit,修改代码直到它编译,然后告诉我们您还剩下什么错误。照原样,代码还有很多其他更重要的问题......

标签: excel textbox vba


【解决方案1】:

看看这些修改。他们似乎纠正了几件事并且运行良好。

Option Explicit

Sub Txt_File_Loop()
    Dim FolderLocation As String
    Dim strFileName As String
    Dim SaveLocation As String
    'Location is present in a Text box
    FolderLocation = Sheets(1).FolderLocationTXTBX.Text   'Environ("TMP")
    strFileName = Dir(FolderLocation & "\*.txt")
    Do Until strFileName = ""
        Debug.Print FolderLocation & "\" & strFileName
        Module2.Macro1 FolderLocation & "\" & strFileName
        strFileName = Dir() 'ERROR is Here
    Loop
End Sub

Sub Macro1(sFPFN As String)
    Dim x As String, textline As String
    Debug.Print sFPFN

    Open sFPFN For Input As #1
    Do Until EOF(1)
        Line Input #1, textline
        x = x & textline
    Loop

    Close #1
    MsgBox x

End Sub

我将文件夹和文件名作为字符串类型参数传递。另外,我不知道您为什么在 (FolderLocation & " \ * " 中有多余的空格;我把它收紧了。有一些拼写错误和未声明的变量;这些可以通过模块代码表顶部的Option Explicit¹ 来避免。使用您的代码练习标准缩进。如果不出意外,它肯定会提高可读性。


¹ 在 VBE 的工具 ► 选项 ► 编辑器属性页面中设置 需要变量声明 会将 Option Explicit 语句放在每个新创建的代码的顶部床单。这将避免愚蠢的编码错误,如拼写错误,并影响您在变量声明中使用正确的变量类型。动态创建的没有声明的变量都是变体/对象类型。使用 Option Explicit 被广泛认为是“最佳实践”。

【讨论】:

  • 谢谢,我会在周一上班时检查这是否有效。
  • 现在可以使用了。谢谢,我将在我的宏中使用 Option Explicit。
猜你喜欢
  • 2021-12-09
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
相关资源
最近更新 更多