Excel 是否打开具有特定名称模式的不同文件夹和工作表?
我正在尝试编写一个VBA代码,允许我选择多个excel文件,并根据文件名导入数据。例如,如果有两个excel文件具有相同的名称前缀,例如名称以N开头。它应该打开并导入数据,但是如果名称前缀存在一次,它应该忽略该文件。 我编写以下代码来迭代工作簿集合并提取工作表名称,但是在第二次迭代中,它只迭代一次,数组超出范围错误显示。我们非常感谢您的任何建议或帮助Excel 是否打开具有特定名称模式的不同文件夹和工作表?,excel,vba,Excel,Vba,我正在尝试编写一个VBA代码,允许我选择多个excel文件,并根据文件名导入数据。例如,如果有两个excel文件具有相同的名称前缀,例如名称以N开头。它应该打开并导入数据,但是如果名称前缀存在一次,它应该忽略该文件。 我编写以下代码来迭代工作簿集合并提取工作表名称,但是在第二次迭代中,它只迭代一次,数组超出范围错误显示。我们非常感谢您的任何建议或帮助 Sub import() Dim shName1 As Worksheet Dim shName2 As Worksheet Dim
Sub import()
Dim shName1 As Worksheet
Dim shName2 As Worksheet
Dim FileToOpen As Variant
Dim FileName As String
Dim selectedBook As Workbook
Dim selectedBook2 As Workbook
Dim i As Byte ''
Dim FileCnt As Long
'On Error GoTo Handle:
' Pick only excel files to import and allow multipleselection
FileToOpen = Application.GetOpenFilename(Filefilter:="Excel Files (*.xlsx), *.xlsx", Title:="Select Workbook to Import", MultiSelect:=True)
If IsArray(FileToOpen) Then
For FileCnt = LBound(FileToOpen) To UBound(FileToOpen)
Set selectedBook = Workbooks.Open(FileName:=FileToOpen(FileCnt))
Set shName1 = selectedBook.Worksheets(FileCnt)
For i = FileCnt + 1 To UBound(FileToOpen) - 1
Set shName2 = selectedBook.Worksheets(i)
If shName1 <> shName2 Then
'do samething
Else:
' do otherthing
MsgBox shName2.Name
Next i '
Next FileCnt '
End If 'is Array
子导入()
将shName1设置为工作表
将shName2设置为工作表
Dim FileToOpen作为变体
将文件名设置为字符串
将所选书本设置为工作簿
将所选书本2设置为工作簿
Dim i作为字节“”
将文件变长
'在错误转到句柄时:
'仅选择要导入的excel文件并允许多次选择
FileToOpen=Application.GetOpenFilename(Filefilter:=“Excel文件(*.xlsx),*.xlsx”,Title:=“选择要导入的工作簿”,MultiSelect:=True)
如果是IsArray(FileToOpen),那么
对于FileCnt=LBound(FileToOpen)到UBound(FileToOpen)
设置selectedBook=Workbook.Open(文件名:=FileToOpen(FileCnt))
Set shName1=selectedBook.Worksheets(FileCnt)
对于i=FileCnt+1到UBound(FileToOpen)-1
Set shName2=selectedBook.Worksheets(i)
如果shName1 shName2,则
“做同样的事
其他:
“做别的事吧
MsgBox shName2.Name
接下来我会
下一个文件
“如果”是数组,则结束
端接头
流放文件如下所示:
为了在工作簿及其工作表之间进行迭代,请尝试使用下一个代码。如果您需要根据床单名称对其进行处理,请更准确地说明您需要什么
Sub WorkbooksAndSheetsIteration()
Dim FileToOpen As Variant, FileCnt As Long, sh As Worksheet, selectedBook As Workbook
FileToOpen = Application.GetOpenFilename(Filefilter:="Excel Files (*.xlsx), *.xlsx", _
Title:="Select Workbook to Import", MultiSelect:=True)
If IsArray(FileToOpen) Then
For FileCnt = LBound(FileToOpen) To UBound(FileToOpen)
Set selectedBook = Workbooks.Open(fileName:=FileToOpen(FileCnt))
For Each sh In selectedBook.Sheets
For shNo = 1 To selectedBook.Sheets.Count - 1
If left(sh.Name, 1) = left(selectedBook.Sheets(i).Name, 1) And _
sh.Index <> i Then
boolOK = True: Exit For
End If
Next
Next
If boolOK Then
'do here the operation you need
'...
Else
selectedBook.Close False
End If
boolOK = False
Next FileCnt
End If
End Sub
谢谢我想对这些工作表做的是,在fileToOpen数组中进行迭代,并根据工作表名称的第一个字母对照第二个工作表进行检查,如果它们的名称相同,我可以导入工作表中的所有数据。但是如果它们的第一个字母在其他文件中不存在,则忽略该文件,意味着不导入数据。您是在谈论工作簿的“名称前缀”还是工作表的“名称前缀”?换句话说,您写了一些关于工作簿的内容,在代码中尝试了一些与工作表名称相关的内容。即使你这样做的方式很奇怪。。。你能澄清一下这方面吗?我指的是工作表的名称。根据他们的名字,我想决定是否导入数据。好的。从这个角度来看,我将根据我的理解修改代码…@abraham foto:修改我的答案代码。它适合你的需要吗?
Sub WorkbooksAndSheetsIterationBis()
Dim FileToOpen As Variant, FileCnt As Long, sh As Worksheet, selectedBook As Workbook
Dim shNo As Long, boolOK As Boolean, i As Long, wName As Variant, strN As String, strN2 As String
FileToOpen = Application.GetOpenFilename(Filefilter:="Excel Files (*.xlsx), *.xlsx", _
Title:="Select Workbook to Import", MultiSelect:=True)
If IsArray(FileToOpen) Then
For Each wName In FileToOpen
strN = Split(wName, "BV.xlsx")(0)
Debug.Print Right(strN, Len(strN) - InStrRev(strN, " ")): Stop
For FileCnt = LBound(FileToOpen) To UBound(FileToOpen)
strN2 = Split(FileToOpen(FileCnt), "BV.xlsx")(0)
If Right(strN, Len(strN) - InStrRev(strN, " ")) = _
Right(strN2, Len(strN2) - InStrRev(strN2, " ")) Then
boolOK = True: Exit For
End If
Next
If boolOK Then
Set selectedBook = Workbooks.Open(fileName:=FileToOpen(wName))
'do here the operation you need
'...
End If
boolOK = False
Next
End If
End Sub