Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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复制范围到最后一行(&A);粘贴在新页上,单元格A19后的第一个空行_Excel_Vba - Fatal编程技术网

Excel VBA复制范围到最后一行(&A);粘贴在新页上,单元格A19后的第一个空行

Excel VBA复制范围到最后一行(&A);粘贴在新页上,单元格A19后的第一个空行,excel,vba,Excel,Vba,我试图复制范围A6:L,从工作表“步骤1”向下复制到最后一行。 然后粘贴到“供应商副本”页上,但粘贴在A19后的第一个空行上 这是我所拥有的,除了粘贴在正确的位置之外,它什么都可以做。它从A1开始粘贴,这是一个空白单元格。然而,即使我用数字1填充从1到19的所有行,它仍然会粘贴在“Vendor_Copy”页上的A1中 谢谢你的帮助 Dim sht1 As Worksheet Dim sht2 As Worksheet Dim lr As Long Set sht1 = Workshee

我试图复制范围A6:L,从工作表“步骤1”向下复制到最后一行。 然后粘贴到“供应商副本”页上,但粘贴在A19后的第一个空行上

这是我所拥有的,除了粘贴在正确的位置之外,它什么都可以做。它从A1开始粘贴,这是一个空白单元格。然而,即使我用数字1填充从1到19的所有行,它仍然会粘贴在“Vendor_Copy”页上的A1中

谢谢你的帮助

Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim lr As Long
    
Set sht1 = Worksheets("Step 1")
Set sht2 = Worksheets("Vendor_Copy")

lr = sht2.Range("A19").End(xlDown).Row

sht1.Activate
Range("A6").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
    
sht2.Activate
Cells(lastrow + 1, 1).PasteSpecial
试试这个:

Dim sht1作为工作表
将sht2变暗为工作表
变暗rng As范围
设置sht1=工作表(“步骤1”)
Set sht2=工作表(“供应商副本”)
使用sht1
设置rng=.Range(“A6”),.Range(“A6”).End(xlDown))
设置rng=.Range(rng,rng.End(xlToRight))
以
副本
sht2.单元格(Rows.Count,“A”).结束(xlUp).偏移量(1,0).粘贴特殊

另请参见:

不要使用
选择对象。它的意思是作为屏幕和VBA之间的接口。相反,请使用
范围
对象,该对象允许您直接寻址工作表

您希望填写的第2页上的行是下一个免费行,但不小于19。在Excel术语中,这是MAX()函数的结果,包含在下面的代码中

Dim Sht1    As Worksheet
Dim Sht2    As Worksheet
Dim Rng     As Range
Dim Cl      As Long                     ' Column: last used
Dim Rt      As Long                     ' Row: target
    
Set Sht1 = Worksheets("Step 1")
Set Sht2 = Worksheets("Vendor_Copy")

With Sht1
    Cl = .Cells(6, .Columns.Count).End(xlToLeft).Column
    Set Rng = .Range(.Cells(6, "A"), .Cells(.Rows.Count, "A").End(xlUp)).Resize(, Cl)
End With

With Sht2
    ' Columns(1) = Columns("A")
    Rt = WorksheetFunction.Max(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 19)
    Rng.Copy Destination:=.Cells(Rt, 1)
End With

请注意,
单元格(6,1).End(xlDown).Row
-或
范围(“A6”).End(xlDown).Row
将为您提供A6下方最后使用的单元格的地址,该单元格后面紧跟一个空格<代码>单元格(Rows.Count,1).End(xlUp).Row
将为您提供从工作表底部查看A列中第一个使用的单元格(
Rows.Count
)。不同之处在于,从上往下看,下一个空格可能不是列中最后使用的单元格。这与
单元格(6,1).End(xlToRight).Column
单元格(6,Columns.Count).End(xlToLeft).Column
之间的区别相同。从左向右看,可以找到最后使用的列。从右到左查看第一个空格。

sht2.单元格(Rows.Count,“A”).结束(xlUp).偏移量(1,0).粘贴特殊
避免使用
xlDown
查找最后一行。您可能希望类似地避免使用
xlToRight
查找最后一列。@Siddarth Rout哈哈。这是微软的方式:让事情变得更容易,直到任务不再可识别,因此无法解决。如果您再次阅读我的代码,您将看到我在某些方面遵循了您的建议,但并非始终如一。很难取得正确的平衡。但是OP很可能会感谢你的指点。