Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
在excel中使用vba创建第一个空单元格后,如何正确地将数据从一张工作表复制到另一张工作表?_Vba_Excel - Fatal编程技术网

在excel中使用vba创建第一个空单元格后,如何正确地将数据从一张工作表复制到另一张工作表?

在excel中使用vba创建第一个空单元格后,如何正确地将数据从一张工作表复制到另一张工作表?,vba,excel,Vba,Excel,我的工作表上有一个按钮,当单击该按钮时,应该会从第一个空白单元格下方的“模板”工作表复制数据。不幸的是,它用复制的数据创建了一个全新的工作簿。我已将其设置为在创建新工作表时复制模板数据,该工作表按预期工作,但由于某些原因,此按钮不起作用。这是我的密码: Sub paste_newcalc() Set WshSrc = ThisWorkbook.Worksheets("Template") Dim rFirstBlank As Range ThisWorkbook.Ac

我的工作表上有一个按钮,当单击该按钮时,应该会从第一个空白单元格下方的“模板”工作表复制数据。不幸的是,它用复制的数据创建了一个全新的工作簿。我已将其设置为在创建新工作表时复制模板数据,该工作表按预期工作,但由于某些原因,此按钮不起作用。这是我的密码:

Sub paste_newcalc()
    Set WshSrc = ThisWorkbook.Worksheets("Template")

    Dim rFirstBlank As Range

    ThisWorkbook.Activate

    WshSrc.Copy

    Set rFirstBlank = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1)

    With ActiveSheet.Cells
        .PasteSpecial

    End With

End Sub

我在那里使用的是通过搜索internet找到的解决方案。

好的。在上述注释的帮助下,我修改了vba代码并找到了解决方案。如果我在一张工作表上有一个默认的数据范围,我们称之为“模板”,我想通过点击按钮将其复制到我当前工作表中已有的数据下面,下面的代码就可以了

Sub paste_newcalc()
    Dim rFirstBlank As Range

    Set rFirstBlank = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1)

    Worksheets("Template").Range("A4:D40").Copy

    rFirstBlank.PasteSpecial


End Sub

这将从第一个空单元格中已有的数据下方的另一个工作表中粘贴所需的范围。谢谢你的评论

可能
WshSrc.cells(1,1).currentregion.Copy
会让您开始。
WshSrc.Copy
是复制工作表/工作簿的行。作为@Jeeped,您希望复制该工作表的一个范围(即使是所有单元格,使用
WshSrc.cells.copy
(但我建议不要复制所有单元格,因为数据大小可能会使速度减慢).是的,刚刚发现。需要复制的单元格区域是A1:D40太棒了!现在,尝试复制/粘贴该区域,并让我们知道它是如何进行的,以及是否出现任何错误,等等。好的。将.cells(1,1)替换为.cells(A1,D40),单击按钮,得到400个错误。您的子对象可以折叠到
工作表(“模板”).range(“A4:D40”).Copy Cells(Rows.Count,1)。End(xlUp)。Offset(1)
。因为1)您实际上没有使用
PasteSpecial
功能2)
ActiveSheet
是默认的工作表限定
Sub paste_newcalc()
     Dim rFirstBlank As Range
     Set rFirstBlank = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1)
     Worksheets("Template").Range("A4:D40").Copy rFirstBlank
End Sub