Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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,其中,Rng1是要复制的数据范围,Destination当前是单元格引用(例如B2) 此代码将被多次调用。我如何修改它,使目标是同一列(例如B列),但行是下一个空单元格 例如,在第一次调用中,B2向前是值复制到的位置,然后在下一次调用中,第一次调用后的下一个空单元格是第二次调用应开始输出其值的位置。然后下一个空单元格开始第三次通话,依此类推 我可以将Destination变量更改为仅声明列字母,如果出现以下情况: Rng1.Copy Destination:=Worksheets("Refind

其中,
Rng1
是要复制的数据范围,
Destination
当前是单元格引用(例如
B2

此代码将被多次调用。我如何修改它,使目标是同一列(例如B列),但行是下一个空单元格

例如,在第一次调用中,B2向前是值复制到的位置,然后在下一次调用中,第一次调用后的下一个空单元格是第二次调用应开始输出其值的位置。然后下一个空单元格开始第三次通话,依此类推

我可以将
Destination
变量更改为仅声明列字母,如果出现以下情况:

Rng1.Copy Destination:=Worksheets("RefindData").Range(Destination)
这条线对吗?

你是说这样

Rng1.Copy Destination:=Worksheets("RefindData").Range(Destination & ???)
每次运行宏时,它都会粘贴到最后一行之后的下一个可用行。

您的意思是这样吗

Rng1.Copy Destination:=Worksheets("RefindData").Range(Destination & ???)
Sub Sample()
    Dim rng1 As Range
    Dim wsO As Worksheet

    Set wsO = Worksheets("RefindData")
    Set rng1 = Range("A1:A10")

    rng1.Copy Destination:=wsO.Range("B" & _
                                     wsO.Range("B" & wsO.Rows.Count).End(xlUp).Row + 1)
End Sub

每次运行宏时,它都会粘贴到最后一行之后的下一行。

您也可以尝试下面的代码

Sub Sample()
    Dim rng1 As Range
    Dim wsO As Worksheet

    Set wsO = Worksheets("RefindData")
    Set rng1 = Range("A1:A10")

    rng1.Copy Destination:=wsO.Range("B" & _
                                     wsO.Range("B" & wsO.Rows.Count).End(xlUp).Row + 1)
End Sub
假设:

  • 活动单元格位于要粘贴结果的列中(要粘贴B列中的结果->从B列中选择单元格[例如B2]
  • 第一行用标题填充,因此结果将从第二行粘贴
代码

Sub CopyPasteCells()
Dim Rng1 As Range, Rng2 As Range, ws As Worksheet

Set ws = Worksheets("RefindData")
Set Rng1 = ws.Range("C2:C10") 'Copy range as you like
Set Rng2 = ws.Range("B" & ws.Rows.Count).End(xlUp).Offset(1, 0) 'Paste range starting from B2 and then first empty cell

Rng1.Copy Destination:=Rng2 'Copy/Paste
End Sub

您也可以尝试下面的代码

假设:

  • 活动单元格位于要粘贴结果的列中(要粘贴B列中的结果->从B列中选择单元格[例如B2]
  • 第一行用标题填充,因此结果将从第二行粘贴
代码

Sub CopyPasteCells()
Dim Rng1 As Range, Rng2 As Range, ws As Worksheet

Set ws = Worksheets("RefindData")
Set Rng1 = ws.Range("C2:C10") 'Copy range as you like
Set Rng2 = ws.Range("B" & ws.Rows.Count).End(xlUp).Offset(1, 0) 'Paste range starting from B2 and then first empty cell

Rng1.Copy Destination:=Rng2 'Copy/Paste
End Sub


我建议您不要硬编码值。您可能希望看到这只是一个旧习惯,您可以使用允许的最大行数作为1048576,因为您没有抓住要点。使用硬编码值不是正确的做法:)
您能显示错误的部分吗?
如果您硬编码
行。使用
65536
1048576
计数
,则您将文件限制为特定的office版本。如果您使用
1048576
则您的代码将在Excel 2003中出错。如果您在Excele 2007+中使用
65536
,则您将无法获得正确的代码t最后一行,如果在
65536
之外的任何单元格中有数据,则应避免使用硬编码值。您可以将
65536
1048576
替换为
行。计数
:)请参阅我的代码示例,了解
行的用法。Count
@Siddharth Rout小细节:)谢谢。我建议您不要硬编码这些值。您可能希望看到这只是一个旧习惯,您可以使用允许的最大行数作为1048576,因为您缺少这一点。使用硬编码值不是正确的做法:)
是否可以显示错误的部分?
如果对
行进行硬编码。使用
65536
1048576
进行计数,则将文件限制为特定的office版本。如果您使用
1048576
,那么您的代码将在Excel 2003中显示错误。如果在Excle 2007+中使用
65536
,则如果
65536
之外的任何单元格中存在数据,则将无法获得正确的最后一行,因此应避免使用硬编码值。您可以将
65536
1048576
替换为
行。Count
:)请参阅我的代码示例,了解
行的用法。Count
@Siddharth Rout小细节:)感谢最后一行
Rng1.Copy Destination:=wsRefind.Range(Destination&wsRefind.Range(Destination&wsRefind.Rows.Count).End(xlUp).Row+1)
将wsRefind细化为工作表
设置wsRefind=wb.工作表(“RefindData”)
还显示
目的地的值是多少?
?忽略没有正确注释掉的内容。现在可以了,谢谢!我将它与一点TecScript答案结合起来,方法是设置
rng2
,然后使用
rng1。复制目的地:=rng2
:)我得到最后一行的
1004-应用程序定义或对象定义错误
。复制目标:=wsRefind.Range(Destination&wsRefind.Range(Destination&wsRefind.Rows.Count)。End(xlUp.Row+1)
将wsRefind细化为工作表
设置wsRefind=wb.Worksheets(“RefindData”)
同时显示
目的地的值是多少?忽略未正确注释的内容。现在可以了,谢谢!通过设置
rng2
,然后使用
rng1.Copy Destination:=rng2
,我将它与一点TecScript答案结合起来