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

これは私が使用しているコードです。

問題は、最初のシートの最後の行を 2 番目のシートの最初の行で上書きすることです。

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) であるため、使用された行の数は、最後に使用された行の数よりも 1 少なくなります。このため、最初のシートと他のすべてのシートを区別する必要があります。

于 2013-03-25T18:46:25.290 に答える