编辑:user3561813
user3561813
之后建议加入"/"
,现在它读取第一个文件。我有一个超出范围的错误消息"9"
。它会正确读取第一个文件。最终,我试图打开每个文件,并阅读名称和年龄(这是一个测试不是真正的生产形式)。并将这些值返回到我的主工作表中。Excel VBA:如何打开并从excel文件读取
原来的问题
我想要的文件夹中读取的Excel表格百,读一个特定的细胞位置,并把它们记录到我的测试工作。我google了这个教程,并试图写我的代码。但是,当我执行获取文件夹功能时,选择了一个文件夹路径,它不循环我有的Excel文件。 (或记录他们的名字)
'Source: https://www.youtube.com/watch?v=7x1T4s8DVc0
Sub GettingFolder()
Dim SelectedFolder As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select folder"
.ButtonName = "Confirm"
.InitialFileName = "U:\"
If .Show = -1 Then
'ok clicked
SelectedFolder = .SelectedItems(1)
MsgBox SelectedFolder
' This is where I want to call my function
LoopFiles (SelectedFolder)
Else
'cancel clicked
End If
End With
End Sub
' Source: http://www.excel-easy.com/vba/examples/files-in-a-directory.html
Sub LoopFiles(path As String)
Dim directory As String, fileName As String, sheet As Worksheet
Dim i As Integer, j As Integer
' Avoid Screen flicker and improve performance
Application.ScreenUpdating = False
' Fixed per suggestion below..
directory = path & "\"
fileName = Dir(directory & "*.xl??")
Do While fileName <> ""
i = i + 1
j = 2
Cells(i, 1) = fileName
Workbooks.Open (directory & fileName)
For Each sheet In Workbooks(fileName).Worksheets
Workbooks("Testing.xlsm").Worksheets(1).Cells(i, j).Value = sheet.Name
j = j + 1
Next sheet
Workbooks(fileName).Close
fileName = Dir()
Loop
' Reset the screen update setting
Application.ScreenUpdating = True
End Sub
如果你解释“它不允许我执行它”意味着你会大大增加获得答案的机会。 – SantiBailors
'fileName = Dir(directory&“* .xl ??”)'实际上是否返回一个非空字符串? 'path'参数的值是否以反斜杠结束?你可能想要打印'directory&“* .xl ??”'的结果,以确保它是一个用作'Dir()'参数的值应该返回你期望的值。 – SantiBailors
请注意,在LoopFiles中收到的'path'没有尾部的反斜杠,因此您的'filename = Dir(directory&“* .xl ??”)'不会产生正确的路径,这意味着Dir会返回一个空字符串 – Dave