VBA-打开文件夹中的文件并打印名称

VBA-打开文件夹中的文件并打印名称,vba,excel,printing,directory,Vba,Excel,Printing,Directory,我想打开某个文件夹中的所有文件,并让它打印出这些文件的名称 我已经设置了一个打开文件的代码,但是我无法让它打印名称。我有一个单独的代码,将打印名称,但只打开一个文件。我无法将两者正确地结合起来。有什么想法吗 打开所有Excel文件的代码: ‘set path to progress folder Sub OpenFiles() Dim MyFolder As String Dim MyFile As String MyFolder = “C:\Users\trembos\Documents\TD

我想打开某个文件夹中的所有文件,并让它打印出这些文件的名称

我已经设置了一个打开文件的代码,但是我无法让它打印名称。我有一个单独的代码,将打印名称,但只打开一个文件。我无法将两者正确地结合起来。有什么想法吗

打开所有Excel文件的代码:

‘set path to progress folder
Sub OpenFiles()
Dim MyFolder As String
Dim MyFile As String
MyFolder = “C:\Users\trembos\Documents\TDS\progress"
MyFile = Dir(MyFolder & "\*.xlsx")
Do While MyFile <> ""
Workbooks.Open fileName:=MyFolder & "\" & MyFile
    MyFile = Dir
Loop
End Sub
'set path to TDS_Working
Sub TDS()
    Workbooks.Open ("C:\Users\trembos\Documents\TDS\progress")
End Sub

'set up dim
Sub LoopThroughDirectory()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object

Dim i As Integer

'create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'get the folder object
Set objFolder = objFSO.GetFolder("C:\Users\trembos\Documents\TDS\progress\")
i = 1
'loop through directory file and print names
For Each objFile In objFolder.Files
    'print file name
    Cells(i + 1, 1) = objFile.Name
Next objFile
End Sub
“设置进度文件夹的路径”
子OpenFiles()
将MyFolder设置为字符串
将MyFile设置为字符串
ActiveSheet.Unprotect(“密码”)
MyFolder=“C:\Users\trembos\Documents\TDS\progress”
MyFile=Dir(MyFolder&“\*.xlsx”)
i=1
当我的文件“”时执行此操作
工作簿。打开文件名:=MyFolder&“\”&MyFile
MyFile=Dir
单元格(i+1,1)=Myfile
i=i+1
环
ActiveSheet.Protect(“密码”)
端接头

这不起作用吗?

您只需要在循环中迭代i:
i=i+1

这应该可以顺利工作:

   Sub LoopThroughDirectory()

    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim MyFolder As String
    Dim Sht As Worksheet
    Dim i As Integer

    MyFolder = "C:\Users\trembos\Documents\TDS\progress\"

Set Sht = ActiveSheet

    'create an instance of the FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'get the folder object
    Set objFolder = objFSO.GetFolder(MyFolder)
    i = 1
    'loop through directory file and print names
    For Each objFile In objFolder.Files

        If LCase(Right(objFile.Name, 3)) <> "xls" And LCase(Left(Right(objFile.Name, 4), 3)) <> "xls" Then
        Else
            'print file name
            Sht.Cells(i + 1, 1) = objFile.Name
            i = i + 1
            Workbooks.Open Filename:=MyFolder & objFile.Name
        End If
    Next objFile

    End Sub
Sub-LoopThroughDirectory()
作为对象的Dim objFSO
将文件夹变暗为对象
Dim objFile作为对象
将MyFolder设置为字符串
将Sht变暗为工作表
作为整数的Dim i
MyFolder=“C:\Users\trembos\Documents\TDS\progress\”
设置Sht=ActiveSheet
'创建FileSystemObject的实例
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
'获取文件夹对象
设置objFolder=objFSO.GetFolder(MyFolder)
i=1
'循环浏览目录文件并打印名称
对于objFolder.Files中的每个objFile
如果LCase(Right(objFile.Name,3))“xls”和LCase(Left(Right(objFile.Name,4),3))“xls”,则
其他的
'打印文件名
单元格(i+1,1)=objFile.Name
i=i+1
工作簿。打开文件名:=MyFolder&objFile.Name
如果结束
下一个objFile
端接头

这会尝试更改我的excel文档中的单元格,我只是试图从中提取信息,而不是更改我的excel文件受保护…这会影响它吗?因此您尝试从工作表中读取?单元格(I+1,1)=objFile.Name会将名称放在该单元格内吗?如果您的工作表受到保护,您只需在希望将文件名写入工作表时取消保护。我最终将尝试从工作表中读取,但目前正在尝试了解如何打开该文件,以及如何将文件名添加到“主工作表”中的列中“,如果您愿意的话。我相信它只会作为一个错误返回:如果我试图打开的文件试图以某种方式更改,则此sheeet是受保护的消息…您知道如何获取文件名吗?宏运行的工作簿(因此称为主工作簿)是因为代码试图将“MyFile”写入“cells(i+1,1)”,所以向您发送该消息。若要绕过保护错误,您必须取消对主工作簿/工作表的保护,然后在完成后重新进行保护。我已在上面的代码中说明了保护问题。我确实在其中一个循环中使用了I+1。您能否更具体地说明您指的是哪一行?我已尝试使用I+1对其进行故障排除,但似乎无法解决找到正确的方法将其放入我的代码中。首先,您在发布的代码中没有使用此公式。我不是指
单元格()中的公式
。具体来说,在使用FSO的第二个示例中,将
i=i+1
放在单元格行后的For循环中。我收到一条错误消息,说代码试图更改单元格(我的Excel文档处于保护模式,因此无法更改)。你知道我做错了什么吗?在Excel中手动取消保护,或者添加
单元格。在
单元格(I+1,1)上方取消保护
=…
statement创建了一个错误,因此我使用了ActiveSheet.Unprotect。但是这仍然只打印了我的Excel列表中的一个名称files@R3uK,如果希望在打开的第一个文件中输出,则在打开
工作簿
时使用对
单元格
的非限定调用将失败。请保存对第一个工作表的引用
Set sht=ActiveSheet
并在稍后使用它。Cells
。实际上@Byron,我忘了检查它,因为我刚刚编译了两个sub
   Sub LoopThroughDirectory()

    Dim objFSO As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim MyFolder As String
    Dim Sht As Worksheet
    Dim i As Integer

    MyFolder = "C:\Users\trembos\Documents\TDS\progress\"

Set Sht = ActiveSheet

    'create an instance of the FileSystemObject
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    'get the folder object
    Set objFolder = objFSO.GetFolder(MyFolder)
    i = 1
    'loop through directory file and print names
    For Each objFile In objFolder.Files

        If LCase(Right(objFile.Name, 3)) <> "xls" And LCase(Left(Right(objFile.Name, 4), 3)) <> "xls" Then
        Else
            'print file name
            Sht.Cells(i + 1, 1) = objFile.Name
            i = i + 1
            Workbooks.Open Filename:=MyFolder & objFile.Name
        End If
    Next objFile

    End Sub