简体   繁体   中英

Copy all sheet contents from one excel and paste in one sheet of other excel using VBscript

Sub Prats
  Set objExcel = CreateObject("Excel.Application") 
  objExcel.Visible = True
  Set objRawData = objExcel.Workbooks.Open("C:\A.xlsx")  'Copy From File
  Set objPasteData= objExcel.Workbooks.Open("C:\B.xlsx") 'Paste To File
  Set obj1 = objPasteData.WorkSheets("Sheet1")           'Worksheet to be cleared
  obj1.Cells.Clear
  countSheet = objRawData.Sheets.Count
  log.Message("Prats    " &countsheet)

  For i = 1 to countSheet
    objRawData.Activate
    name = objRawData.Sheets(i).Name
    objRawData.WorkSheets(name).Select
    objRawData.Worksheets(name).Range("A1").Select
    objExcel.ActiveSheet.UsedRange.Select
    usedRowCount2 = objExcel.Selection.Rows.Count 
    objExcel.Range("A1:B" & usedRowCount2).Copy

    objPasteData.Activate
    objPasteData.WorkSheets("Sheet1").Select
    objExcel.ActiveSheet.UsedRange.Select
    usedRowCount1= objExcel.Selection.Rows.Count
    objExcel.ActiveSheet.UsedRange.Select
    objExcel.Range("A" & usedRowCount1).Select
    objPasteData.Worksheets("Sheet1").Range("A" &(usedRowCount1+1)).PasteSpecial Paste =xlValues

  Next
  objPasteData.Save

End sub

This is the code that I am using.

The problem is it over rides the last row of the first sheet with the first row from the second sheet.

I already told the person you copied the code from that he should use the Cells property instead of working with ranges. However, if you absolutely must use ranges, at least refrain from activating and selecting all the time. The following lines should suffice for copying:

For i = 1 To countSheet
  usedRowCount2 = objRawData.Sheets(i).UsedRange.Rows.Count
  If i = 1 Then
    usedRowCount1 = 0
  Else
    usedRowCount1 = objPasteData.Sheets(1).UsedRange.Rows.Count
  End If

  objRawData.Sheets(i).Range("A1:B" & usedRowCount2).Copy
  objPasteData.Sheets(1).Range("A" & (usedRowCount1+1)).PasteSpecial -4163
Next

Edit: The UsedRange row count is at least 1, so usedRowCount1+1 produces an empty first row when copying the data from the first sheet. This row remains unused (ie it's not included in UsedRange ), so the used row count is one less than the number of the last used row. Because of this you have to distinguish between the first sheet and all other sheets.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM