2013-04-29 28 views
0

我想修改RDBMerge工具,將選定的工作簿合併到已打開的工作簿中。我爲許多計算使用了大量的工作簿(有很多其他宏),我需要將「數據」表合併到它中。所以我通常是單擊RDBMERge,然後該工具創建一個新的合併數據的工作簿,我想阻止這種情況的發生並使其合併數據粘貼到工作簿即時貼中運行該工具。修改RDBMerge,以便將「合併的工作表」粘貼到特定的woorkbook中

這可能嗎?

我在Microsoft.com中找到了下面的代碼,但是我確實不知道如何閱讀它。

Sub MergeAllWorkbooks() 
    Dim MyPath As String, FilesInPath As String 
    Dim MyFiles() As String 
    Dim SourceRcount As Long, FNum As Long 
    Dim mybook As Workbook, BaseWks As Worksheet 
    Dim sourceRange As Range, destrange As Range 
    Dim rnum As Long, CalcMode As Long 

    ' Change this to the path\folder location of your files. 
    MyPath = "C:\Users\Ron\test" 

    ' Add a slash at the end of the path if needed. 
    If Right(MyPath, 1) <> "\" Then 
     MyPath = MyPath & "\" 
    End If 

    ' If there are no Excel files in the folder, exit. 
    FilesInPath = Dir(MyPath & "*.xl*") 
    If FilesInPath = "" Then 
     MsgBox "No files found" 
     Exit Sub 
    End If 

    ' Fill the myFiles array with the list of Excel files 
    ' in the search folder. 
    FNum = 0 
    Do While FilesInPath <> "" 
     FNum = FNum + 1 
     ReDim Preserve MyFiles(1 To FNum) 
     MyFiles(FNum) = FilesInPath 
     FilesInPath = Dir() 
    Loop 

    ' Set various application properties. 
    With Application 
     CalcMode = .Calculation 
     .Calculation = xlCalculationManual 
     .ScreenUpdating = False 
     .EnableEvents = False 
    End With 

    ' Add a new workbook with one sheet. 
    Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 
    rnum = 1 

    ' Loop through all files in the myFiles array. 
    If FNum > 0 Then 
     For FNum = LBound(MyFiles) To UBound(MyFiles) 
      Set mybook = Nothing 
      On Error Resume Next 
      Set mybook = Workbooks.Open(MyPath & MyFiles(FNum)) 
      On Error GoTo 0 

      If Not mybook Is Nothing Then 
       On Error Resume Next 

       ' Change this range to fit your own needs. 
       With mybook.Worksheets(1) 
        Set sourceRange = .Range("A1:C1") 
       End With 

       If Err.Number > 0 Then 
        Err.Clear 
        Set sourceRange = Nothing 
       Else 
        ' If source range uses all columns then 
        ' skip this file. 
        If sourceRange.Columns.Count >= BaseWks.Columns.Count Then 
         Set sourceRange = Nothing 
        End If 
       End If 
       On Error GoTo 0 

       If Not sourceRange Is Nothing Then 

        SourceRcount = sourceRange.Rows.Count 

        If rnum + SourceRcount >= BaseWks.Rows.Count Then 
         MsgBox "There are not enough rows in the target worksheet." 
         BaseWks.Columns.AutoFit 
         mybook.Close savechanges:=False 
         GoTo ExitTheSub 
        Else 

         ' Copy the file name in column A. 
         With sourceRange 
          BaseWks.Cells(rnum, "A"). _ 
            Resize(.Rows.Count).Value = MyFiles(FNum) 
         End With 

         ' Set the destination range. 
         Set destrange = BaseWks.Range("B" & rnum) 

         ' Copy the values from the source range 
         ' to the destination range. 
         With sourceRange 
          Set destrange = destrange. _ 
              Resize(.Rows.Count, .Columns.Count) 
         End With 
         destrange.Value = sourceRange.Value 

         rnum = rnum + SourceRcount 
        End If 
       End If 
       mybook.Close savechanges:=False 
      End If 

     Next FNum 
     BaseWks.Columns.AutoFit 
    End If 

ExitTheSub: 
    ' Restore the application properties. 
    With Application 
     .ScreenUpdating = True 
     .EnableEvents = True 
     .Calculation = CalcMode 
    End With 
End Sub 

回答

0

更改此

Set BaseWks = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 

Set BaseWks = Thisworkbook.Sheets("sheet1") 
+0

完美謝謝!!!!我還有一個問題,我如何修改正在合併的工作簿的複製和粘貼範圍?我需要把所有東西從單元格A2複製到最後一個活動單元格(第一行是標題),然後粘貼到行A4上的主文件中......預先感謝您的回覆。 – user2030857 2013-04-29 14:12:49

相關問題