簡體   English   中英

從一個Excel復制所有工作表內容,然后使用VBscript粘貼到另一個Excel的工作表中

[英]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

這是我正在使用的代碼。

問題在於,它將第一張紙的最后一行與第二張紙的第一行相重疊。

我已經告訴過您復制代碼的人,他應該使用Cells屬性而不是使用范圍。 但是,如果您絕對必須使用范圍,則至少不要一直激活和選擇。 以下幾行足以復制:

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

編輯: UsedRange行計數至少為1,因此從第一張紙復制數據時, usedRowCount1+1會生成一個空的第一行。 該行保持未使用狀態(即,它不包含在UsedRange ),因此使用的行數比最后使用的行數少一。 因此,您必須區分第一張紙和所有其他紙。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM