使用VBA循环通过Txt文件 - DIR()问题

时间:2016-02-04 17:46:20

标签: excel excel-vba textbox vba

我有以下代码,我试图修改特定文件夹中的某些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

1 个答案:

答案 0 :(得分: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 语句放在每个新的顶部创建代码表。这将避免像拼写错误这样的错误编码错误以及影响您在变量声明中使用正确的变量类型。在没有声明的情况下即时创建的变量都是变体/对象类型。使用选项明确被广泛认为是“最佳做法”。

相关问题