Vba 从其他工作簿获取数据-嵌套if中未实现目标
我有一段代码,其中我将多个工作簿中的数据合并到一个工作簿中。每个工作簿的数据需要根据源添加到特定范围。为此,我嵌套了一些IFs,将文件的部分名称作为条件,并提供将值发送到所需范围的操作,但当我运行代码时,它只打开所有工作簿,而不执行任何操作。我已经做了一些研究,没有发现任何东西可以帮助我解决我的问题Vba 从其他工作簿获取数据-嵌套if中未实现目标,vba,excel,if-statement,Vba,Excel,If Statement,我有一段代码,其中我将多个工作簿中的数据合并到一个工作簿中。每个工作簿的数据需要根据源添加到特定范围。为此,我嵌套了一些IFs,将文件的部分名称作为条件,并提供将值发送到所需范围的操作,但当我运行代码时,它只打开所有工作簿,而不执行任何操作。我已经做了一些研究,没有发现任何东西可以帮助我解决我的问题 Sub Update_Database() Dim directory As String Dim fileName As String Application.ScreenUpdating =
Sub Update_Database()
Dim directory As String
Dim fileName As String
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
directory = .SelectedItems(1)
Err.Clear
End With
fileName = Dir(directory & "\", vbReadOnly)
Dim mwb As Workbook
Set mwb = Workbooks("OEE_Database_Final.xlsm")
Do While fileName <> ""
On Error GoTo ProcExit
With Workbooks.Open(fileName:=directory & "\" & fileName, UpdateLinks:=False, ReadOnly:=True)
If (fileName = "NOM*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O9:Z290").Value = mwb.Sheets("Database").Range("O9:Z290")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "SZE*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O291:Z537").Value = mwb.Sheets("Database").Range("O291:Z537")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "VEC*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O538:Z600").Value = mwb.Sheets("Database").Range("O538:Z600")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "KAY*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O601:Z809").Value = mwb.Sheets("Database").Range("O601:Z809")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "BBL*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O810:Z952").Value = mwb.Sheets("Database").Range("O810:Z952")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "POG*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O953:Z1037").Value = mwb.Sheets("Database").Range("O953:Z1037")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "SC1*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O1038:Z1159").Value = mwb.Sheets("Database").Range("O1038:Z1159")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "SC2*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O1160:Z1200").Value = mwb.Sheets("Database").Range("O1160:Z1200")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "SLP*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O1201:Z1263").Value = mwb.Sheets("Database").Range("O1201:Z1263")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "UIT*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O1264:Z1348").Value = mwb.Sheets("Database").Range("O1264:Z1348")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "ANE*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O1349:Z1823").Value = mwb.Sheets("Database").Range("O1349:Z1823")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "HAL*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O1824:Z2077").Value = mwb.Sheets("Database").Range("O1824:Z2077")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "SHX*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O2078:Z2242").Value = mwb.Sheets("Database").Range("O2078:Z2242")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "BAY*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O2243:Z2415").Value = mwb.Sheets("Database").Range("O2243:Z2415")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "TAM*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O2416:Z2522").Value = mwb.Sheets("Database").Range("O2416:Z2522")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "PUC*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O2523:Z2607").Value = mwb.Sheets("Database").Range("O2523:Z2607")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "JOF*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O2608:Z2648").Value = mwb.Sheets("Database").Range("O2608:Z2648")
ActiveWorkbook.Close SaveChanges:=False
ElseIf (fileName = "MAV*.xlsx") Then
ActiveWorkbook.Sheets("Database").Range("O2649:Z2945").Value = mwb.Sheets("Database").Range("O2649:Z2945")
ActiveWorkbook.Close SaveChanges:=False
End If
End With
fileName = Dir
Loop
Application.ScreenUpdating = True
ProcExit:
Exit Sub
End Sub
子更新_数据库()
将目录设置为字符串
将文件名设置为字符串
Application.ScreenUpdating=False
使用Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect=False
显示
目录=.SelectedItems(1)
呃,明白了
以
fileName=Dir(目录&“\”,vbReadOnly)
将mwb设置为工作簿
设置mwb=工作簿(“OEE_数据库_Final.xlsm”)
文件名“”时执行此操作
错误转到PROCEXT
打开(文件名:=目录&“\”&fileName,UpdateLinks:=False,只读:=True)
如果(fileName=“NOM*.xlsx”),则
ActiveWorkbook.Sheets(“数据库”).Range(“O9:Z290”).Value=mwb.Sheets(“数据库”).Range(“O9:Z290”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“SZE*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O291:Z537”).Value=mwb.Sheets(“数据库”).Range(“O291:Z537”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“VEC*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O538:Z600”).Value=mwb.Sheets(“数据库”).Range(“O538:Z600”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“KAY*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O601:Z809”).Value=mwb.Sheets(“数据库”).Range(“O601:Z809”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“BBL*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O810:Z952”).Value=mwb.Sheets(“数据库”).Range(“O810:Z952”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“POG*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O953:Z1037”).Value=mwb.Sheets(“数据库”).Range(“O953:Z1037”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“SC1*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O1038:Z1159”).Value=mwb.Sheets(“数据库”).Range(“O1038:Z1159”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“SC2*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O1160:Z1200”).Value=mwb.Sheets(“数据库”).Range(“O1160:Z1200”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“SLP*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O1201:Z1263”).Value=mwb.Sheets(“数据库”).Range(“O1201:Z1263”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“UIT*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O1264:Z1348”).Value=mwb.Sheets(“数据库”).Range(“O1264:Z1348”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“ANE*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O1349:Z1823”).Value=mwb.Sheets(“数据库”).Range(“O1349:Z1823”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“HAL*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O1824:Z2077”).Value=mwb.Sheets(“数据库”).Range(“O1824:Z2077”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“SHX*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O2078:Z2242”).Value=mwb.Sheets(“数据库”).Range(“O2078:Z2242”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“BAY*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O2243:Z2415”).Value=mwb.Sheets(“数据库”).Range(“O2243:Z2415”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“TAM*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O2416:Z2522”).Value=mwb.Sheets(“数据库”).Range(“O2416:Z2522”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“PUC*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O2523:Z2607”).Value=mwb.Sheets(“数据库”).Range(“O2523:Z2607”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“JOF*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O2608:Z2648”).Value=mwb.Sheets(“数据库”).Range(“O2608:Z2648”)
ActiveWorkbook.Close SaveChanges:=False
ElseIf(fileName=“MAV*.xlsx”)然后
ActiveWorkbook.Sheets(“数据库”).Range(“O2649:Z2945”).Value=mwb.Sheets(“数据库”).Range(“O2649:Z2945”)
ActiveWorkbook.Close SaveChanges:=False
如果结束
以
fileName=Dir
环
Application.ScreenUpdating=True
程序出口:
出口接头
端接头
你可以“欺骗”一点,以逃避选择案例
为了使用Like
和Select
,您可以使用选择Case True
,然后使用Like
和通配符*
嵌套场景
代码
With Workbooks.Open(Filename:=directory & "\" & Filename, UpdateLinks:=False, ReadOnly:=True)
Select Case True
Case Filename Like "NOM*.xlsx"
Case Filename Like "SZE*.xlsx"
Case Filename Like "VEC*.xlsx"
Case Filename Like "KAY*.xlsx"
Case Filename Like "BBL*.xlsx"
' put all other scenarios down here....
End Select
End With
注意:如果您尝试检查的所有文件都是excel文件,因此您不需要添加.xlsx
扩展名,只需使用NOM*
、SZE*
等。您可以通过“欺骗”一点来逃避选择案例
为了使用Like
和Select
,您可以使用选择Case True
,然后使用Like
和通配符*
嵌套场景
代码
With Workbooks.Open(Filename:=directory & "\" & Filename, UpdateLinks:=False, ReadOnly:=True)
Select Case True
Case Filename Like "NOM*.xlsx"
Case Filename Like "SZE*.xlsx"
Case Filename Like "VEC*.xlsx"
Case Filename Like "KAY*.xlsx"
Case Filename Like "BBL*.xlsx"
' put all other scenarios down here....
End Select
End With
注意:如果您尝试检查的所有文件都是excel文件,那么您不需要添加.xlsx
扩展名,只需我们
Dim mwb As Workbook
Set mwb = Workbooks("OEE_Database_Final.xlsm")
Dim Ws As Worksheet
Set Ws = mwb.Sheets("Database")
Do While Filename <> ""
On Error GoTo ProcExit
With Workbooks.Open(Filename:=directory & "\" & Filename, UpdateLinks:=False, ReadOnly:=True)
Select Case True
Case Filename Like "NOM*.xlsx"
Ws.Range("O9:Z290").Value = .Sheets("Database").Range("O9:Z290").Value
.Close SaveChanges:=False
Case Filename Like "SZE*.xlsx"
' Code for this case
' Other cases...
Case Else
' Put code here that is executed if none of the previous names has been matched
' or remove 'Case Else' if you don't want anything to happen then
End Select
End With
Filename = Dir
Loop