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