2013-03-25 43 views
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 

这是我使用的代码中其他Excel的一张粘贴。复制从一个Excel的所有表内容并使用VBScript

问题在于它将第一张纸的最后一行与第二张纸上的第一行挂在一起。

回答

0

我已经告诉你这个人的代码copied他应该使用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中),所以使用的行数比一个小于最后一次使用的行数。因此,您必须区分第一张纸和所有其他纸张。

+0

嗨Ansgar,我试过使用上面提到的代码,但它仍然做同样的事情。过度骑行的问题仍然存在。 – pratyush 2013-03-26 03:46:58

相关问题