繁体   English   中英

Excel可以将某些单元格从一张纸复制/粘贴到另一张纸上,但要稍加改动

[英]Excel to copy / paste some cells from one sheet to another but with a twist

我制作了一个发票工作簿,用于打印文件。 我正在尝试根据发票表中键入的内容列出售出的产品,客户名称等。 关于已售商品和客户名称的列表位于另一张纸上。 每次打印发票后,都会保存工作簿,以便可以清除发票表并插入其他数据。 基本上,要将数据从发票复制到列表,我使用以下代码:

Sheets("factura").Range("m14:m36").Copy
With Sheets("Centralizator").Range("C" & Rows.Count).End(xlUp).Offset(1)
    .PasteSpecial Paste:=xlPasteValues
     End With


Sheets("factura").Range("L2").Copy
With Sheets("Centralizator").Range("B" & Rows.Count).End(xlUp).Offset(1)    
    .PasteSpecial Paste:=xlPasteValues
     End With

C列存储要出售的产品,B列存储购买产品的客户的名称。 当客户端具有一个核心响应产品时,上面的代码可以很好地工作。 但是,如果一个客户有2个或更多产品,则下一次我运行代码时,下一个客户的名称将显示在前一个客户的下方,与第一个客户购买的产品位于同一行。 这是有问题的照片。

图片链接 在此处输入图片说明

我想修改代码,以便当我将客户名称从发票(factura)复制到B列时,它将首先在C列上找到第一个空白行,并使用该行的编号,将客户名称粘贴到b列中在那个数字上。 像这样:

图片链接 在此处输入图片说明 对不起,我的英语不好(不是我的母语),能帮我吗?

尝试这个

Option Explicit

Sub UpdateCentralizator()
Dim lastRow As Long

lastRow = GetLastRow(Sheets("Centralizator"), 3) + 1
Sheets("factura").Range("m14:m36").SpecialCells(xlCellTypeConstants).Copy
Sheets("Centralizator").cells(lastRow, 3).PasteSpecial Paste:=xlPasteValues

Sheets("factura").Range("L2").Copy
Sheets("Centralizator").cells(lastRow, 1).PasteSpecial Paste:=xlPasteValues

End Sub


Function GetLastRow(sht As Worksheet, col As Long) as long
With sht
    GetLastRow = .cells(.Rows.Count, col).End(xlUp).row
    If IsEmpty(.cells(GetLastRow, col)) Then GetLastRow = 0
End With
End Function

.SpecialCells(xlCellTypeConstants)方法选择仅填充常量(数字或文本)的单元格,以便Sheets("factura").Range("m14:m36")任何空白单元格都不会粘贴到Sheets("Centralizator")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM