Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA编码复制粘贴_Vba_Excel - Fatal编程技术网

VBA编码复制粘贴

VBA编码复制粘贴,vba,excel,Vba,Excel,我想复制两个xls文件(Rahul.xls和Rohit.xls)中的数据,并将它们粘贴到主文件Macro.xls中 代码是复制粘贴Rahul.xls,但粘贴Rohit.xls时,它与数据重叠,导致Rahul.xls中的所有数据都消失了,我只能看到Rohit.xls中的数据 第二,它不是在复制粘贴后关闭源文件 有谁能帮我修改一下这个守则,这样 罗希特的数据将在拉胡尔的数据之后 复制粘贴Rahul的数据后,工作表将自动关闭 Sub OpenCopyPaste() ' open the source

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

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

第二,它不是在复制粘贴后关闭源文件

有谁能帮我修改一下这个守则,这样

罗希特的数据将在拉胡尔的数据之后 复制粘贴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

打开第二个文件后,代码将覆盖从A1开始的Sheet1范围内的数据。想办法找到范围的终点,并在那里开始新的数据

    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

试试这样的。希望这是你需要的,但如果不是,我希望它至少能让你找到答案。干杯

    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

您可以使用变量定义目标工作表中最后使用的行,并在所需范围内添加一行:

    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
同时,在紧急情况下,您只能使用

昏暗的灯塔一样长

另一行呢

lLastRow=WorkbooksMacro.worksheetsheets1.CellsWorkbooksMacro.worksheetsheets1.Rows.Count,A.EndxlUp.Row

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

活页表1.A和lLastRow+1


在您的原始代码中

Hi@USFBS。。。我认为有一些错误。。。因为我无法执行此代码。在子OpenCopyPaste上显示错误我的语法可能有问题。我编写了类似的代码,但在我的代码中,我总是将要打开的文件设置为变量,例如set b1=workbooks.open filename。另外,我错误地将.Save=True写成.Save=True。为了澄清,它应该是。保存一些调整应该会产生你想要的结果。它是Sub-OpenCopyPaste而不是Sub-OpenCopyPaste谢谢你帮助我的朋友们。但是,运行此代码时,调试位于emptyrow=WorksheetFunction.CountAsheetsSheets1.RangeA上。有人能帮忙吗。为什么?如果该行显示错误,那么您可能需要在工作表和范围之前定义工作簿名称,例如addingemptyrow=WorksheetFunction.CountAWorkbooks.Sheetssheet1.RangeAHi@Zegad,我尝试了此方法,但弹出的错误对象不支持此属性或方法。。。。任何关于这一切的想法都是未经测试的,但是如果你告诉我调试发送给你的是哪一行,我可以更正它。参见编辑