2012-11-15 123 views
1

下面的代碼在我「進入」代碼並將來自每個文件的數據粘貼到「Cisco數據庫」文件中時效果很好。但是,當我剛剛運行它時,它始終保留最後一個文件。我添加了一個特定的行來保存數據庫文件,每次都無濟於事。有什麼建議麼?VBA代碼在逐步操作中運行,運行時跳過一個文件

Sub AppendDataFinal() 

Dim myWorkbook As String 
myDB = "CiscoDatabase.xlsx" 
myWorkbook = "Cisco.xlsm" 

Application.Run "'Cisco.xlsm'!importfile" //grabs all .csv files from a folder 

For Each wb In Workbooks 
If (wb.Name <> myWorkbook) Then wb.Activate 

Columns("A:O").Select 
Selection.Delete Shift:=xlUp 
Columns("O:AS").Select 
Selection.Delete Shift:=xlUp 


Selection.CurrentRegion.Select 
Selection.Copy 
Workbooks.Open ("file path") 
Range("A1").Select 
Selection.End(xlDown).Select 
ActiveCell.Offset(1, 0).Range("A1").Select 
ActiveSheet.Paste , False 
Range("A1").Select 
If (ActiveWorkbook.Name = myDB) Then ActiveWorkbook.Save 
ActiveWorkbook.Close 
ActiveWorkbook.Close savechanges:=False 

Next wb 


Workbooks.Open ("file path and name") 

Application.Run "Cisco.xlsm!DateFormat" //trims time off date row, pretties up data 


End Sub 
+2

這不是一個好主意,當你循環儘管它修改的集合,如'WorkBooks'不同的方法。你也許應該創建一個數組或者你想要操作的文件的名字集合,然後循環。 –

+0

這段代碼在運行什麼文件?如果它是Cisco.xlsm,那麼您不需要使用'Application.Run'來調用同一文件中的另一個宏。 –

+0

非常感謝,我真的很感謝你在看這個hotmess。無論我閱讀了多少個教程,我似乎都無法找到有關這些工作的明確解釋。 – caro

回答

0

使用集合(未經測試)

Sub AppendDataFinal() 

Const MY_DB_PATH As String = "C:\pathToYourDBHere\" 
Const MY_DB As String = "CiscoDatabase.xlsx" 

Dim colNames As New Collection, wbName 
Dim wb As Workbook 
Dim wbDB As Workbook 
Dim myDB As String 

    importfile 'grabs all .csv files from a folder 

    For Each wb In Workbooks 
     'ThisWorkbook refers to the workbook containing this code 
     If wb.Name <> ThisWorkbook.Name Then colNames.Add wb.Name 
    Next wb 

    'open the destination workbook 
    Set wbDB = Workbooks.Open(MY_DB_PATH & MY_DB) 

    For Each wbName In colNames 

     Set wb = Workbooks(wbName) 
     With wb.Sheets(1) 
      .Columns("A:O").Delete Shift:=xlUp 
      .Columns("O:AS").Delete Shift:=xlUp 
      .Range("A1").CurrentRegion.Copy _ 
        wbDB.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) 
     End With 
     wb.Close False 
     wbDB.Save 

    Next wbName 

    wbDB.Activate 
    DateFormat 'trims time off date row, pretties up data 

End Sub