2015-10-27 93 views
1

我试着合并第三个内部2个Excel表格用下面的代码VBA Excel宏2文件中读取

`Sub CommandButton1_Click() 
Dim MyFile As String 
Dim Filepath As String 
Filepath = "C:\temp\" 
MyFile = Dir(Filepath) 
    'MyFile = "12_10_15_par.xlxs" 
    'If MyFile = "12_10_15_par.xlsx" Then 
    If MyFile = Cells(4, 2) Then 
     Workbooks.Open (Filepath & MyFile) 
     Worksheets("par").Range("A1:K1000").Copy 
     ActiveWorkbook.Close 
     ActiveSheet.Paste Destination:=Worksheets("match").Range("T1:AF1001") 
     'Application.CutCopyMode = False 
    End If 
    MyFile2 = Dir(Filepath) 
    If MyFile2 = Cells(5, 2) Then 
     Workbooks.Open (Filepath & MyFile2) 
     Worksheets("ops").Range("A1:K1000").Copy 
     ActiveWorkbook.Close 
     ActiveSheet.Paste Destination:=Worksheets("match").Range("D1:S1001") 
     'Application.CutCopyMode = False 
    End If 

End Sub` 

也许处理合并的错误,我所做的一切错误的,因为Myfile2保持第一值,而不是领新的...

+0

你需要循环有下一个值,答案来了;) – R3uK

回答

0

这里是如何使用Dir(),注意在循环结尾MyFile = Dir(),它会在循环之前加载下一个文件名MyFile

试试这个:

Sub CommandButton1_Click() 
Dim MyFile As String, _ 
    Filepath As String, _ 
    oWb As Workbook, _ 
    pWb As Workbook 

Filepath = "C:\temp\" 
Set pWb = ThisWorkbook 

MyFile = Dir(Filepath) 
Do While MyFile <> "" 
    If MyFile <> Cells(4, 2) And MyFile <> Cells(5, 2) Then 
    Else 
     Set oWb = Workbooks.Open(Filepath & MyFile) 
     If MyFile <> Cells(5, 2) Then 
      oWb.Worksheets("par").Range("A1:K1000").Copy Destination:=pWb.Worksheets("match").Range("T1:AF1001") '4 
     Else 
      oWb.Worksheets("ops").Range("A1:K1000").Copy Destination:=pWb.Worksheets("match").Range("D1:S1001") '5 
     End If 
     'Application.CutCopyMode = False 
     oWb.Close 
    End If 
    MyFile = Dir() 
Loop 

End Sub 
+0

亲爱R3uK,太感谢你了!不仅仅是答案...首先我要感谢你的标准程序观点,必须在每个地方(1 + 1模式)。所以我必须打开2个工作簿(据我了解),以完成这项工作。再次感谢!!! –

+1

@NektariosKyriakou:不客气!事实上,我在代码中添加了2个工作簿对象,以便轻松地引用您正在工作的这些对象,一个对象用于初始工作簿,另一个用于打开并在循环之前关闭并在另一个打开工作簿中使用相同对象的对象。如你所见,对象变量非常实用! – R3uK

+0

如此欢迎! –