VBA编码复制粘贴

时间:2015-04-10 14:05:36

标签: vba excel-vba excel

我想从两个xls文件中复制数据,Rahul.xls和Rohit.xls并将它们粘贴到主文件中" Macro.xls"

代码是复制粘贴Rahul.xls但是当粘贴Rohit.xls时它会重叠数据,导致Rahul.xls的所有数据都消失了,我只能看到来自Rohit.xls的数据。

其次,它是在复制粘贴后没有关闭源文件。

任何人都可以帮我修改此代码,以便

  • Rohit的数据将来自Rahul的数据
  • 复制粘贴Rahul的数据后,工作表将自动关闭

    Sub OpenCopyPaste()
    
    ' open the source workbook and select the source sheet
    
        Workbooks.Open Filename:="C:\Rahul.xls"
    
        Sheets("Case Tracker").Select
    
        ' copy the source range
    
        Sheets("Case Tracker").Range("A:J").Select
    
        Selection.Copy
    
        ' select current workbook and paste the values starting at A1
    
        Windows("Macro.xls").Activate
    
        Sheets("Sheet1").Select
    
        Sheets("Sheet1").Range("A1").Select
    
        ActiveSheet.Paste
    
        Application.CutCopyMode = False
    
        ActiveWorkbook.Save
    
        Workbooks.Open Filename:="C:\Rohit.xls"
    
        Sheets("Case Tracker").Select
    
        ' copy the source range
    
        Sheets("Case Tracker").Range("A:J").Select
    
        Selection.Copy
    
        ' select current workbook and paste the values starting at A1
    
        Windows("Macro.xls").Activate
    
        Sheets("Sheet1").Select
    
        Sheets("Sheet1").Range("A1").Select
    
        ActiveSheet.Paste
    
        Application.CutCopyMode = False
    
        ActiveWorkbook.Save
    
    End Sub
    

3 个答案:

答案 0 :(得分:0)

代码在打开第二个文件后覆盖Sheet1范围内从A1开始的数据。想一想找到范围结束并在那里开始新数据的方法。

    Workbooks.Open Filename:="C:\Rohit.xls"

    Sheets("Case Tracker").Select

    ' copy the source range

    Sheets("Case Tracker").Range("A:J").Select
    Selection.Copy

    ' select current workbook and paste the values starting at A1

    Windows("Macro.xls").Activate

    Sheets("Sheet1").Select

    ' the code is overwriting the data in Sheet1 range starting at A1
    Sheets("Sheet1").Range("A1").Select 

    ActiveSheet.Paste

    Application.CutCopyMode = False

    ActiveWorkbook.Save

关闭工作簿,我相信它就像:

    Workbooks(fileName).Close

答案 1 :(得分:0)

尝试这样的事情。希望它是你所需要的,但如果不是,我希望它至少可以让你走上答案的道路。干杯。

    Workbooks.Open Filename:="C:\Rahul.xls"

    Sheets("Case Tracker").Select

    ' copy the source range

    Sheets("Case Tracker").Range("A:J").Select

    Selection.Copy

    ' select current workbook and paste the values starting at A1

        Windows("Macro.xls").Activate

        Sheets("Sheet1").Select

        Sheets("Sheet1").Range("A1").Select

        ActiveSheet.Paste

        Application.CutCopyMode = False

        ActiveWorkbook.Save

        workbooks("Rahul.xls").close workbooks("Rahul.xls").saved=true

        Workbooks.Open Filename:="C:\Rohit.xls"

        Sheets("Case Tracker").Select

        ' copy the source range

        Sheets("Case Tracker").Range("A:J").Select
        Selection.Copy

        ' select current workbook and paste the values starting at A1

        Windows("Macro.xls").Activate

        Sheets("Sheet1").Select


        'Sheets("Sheet1").Range("A1").Select-take this bit and replace it with the following

     emptyrow=worksheetfunction.counta(sheets("sheet1").range("A")) 'you can use any column to reference, one with continuous data is the best
     sheets("Sheet1").cells(emptyrow,1).select

        ActiveSheet.Paste

        Application.CutCopyMode = False

        ActiveWorkbook.Save

        workbooks("Rohit.xls").close workbooks("Rohit.xls").saved=true

        End Sub

答案 2 :(得分:0)

你可以使用一个变量来定义目标表中最后一个使用过的行,并在欲望范围内添加一个加一个:

    Sub CopySheets()
    Workbooks.Open Filename:="C:\Rahul.xls"
    'Variable to the last available row
    Dim lLastRow As Long

    Sheets("Case Tracker").Range("A:J").Copy Destination:=Windows("Macro.xls").Sheets("Sheet1").Range("A1")

    Application.CutCopyMode = False

    Workbooks.Open Filename:="C:\Rohit.xls"

    'Retrieve the last used row in the destination
    lLastRow = Workbooks("Macro").Worksheets("Sheet1").Cells(Workbooks("Macro").Worksheets("Sheet1").Rows.Count, "A").End(xlUp).Row

    'Use the Lastrow variable aded to the range of the destination + 1 (the next empty row)
    Sheets("Case Tracker").Range("A:J").Copy Destination:=Windows("Macro.xls").Sheets("Sheet1").Range("A" & lLastRow + 1)

    Application.CutCopyMode = False

    Workbooks("Macro").Save
    Workbooks("Macro").Close

    End Sub

与此紧迫,你只能使用

Dim lLastRow As Long

和另一行

lLastRow = Workbooks("Macro").Worksheets("Sheet1").Cells(Workbooks("Macro").Worksheets("Sheet1").Rows.Count, "A").End(xlUp).Row

并且只添加修改第二个目标的变量,如下所示:

Sheets("Sheet1").Range("A" & lLastRow + 1)

原始代码中的