1
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

这是我正在使用的代码。

问题是它覆盖了第一张纸的最后一行与第二张纸的第一行。

4

1 回答 1

0

我已经告诉您从中复制代码的人,他应该使用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),因此使用的行数比最后使用的行数少一。因此,您必须区分第一张纸和所有其他纸。

于 2013-03-25T18:46:25.290 回答