我做了一本发票工作簿,我们用来打印文件。我试图根据发票单上的内容,列出销售的产品,客户的名字等等。出售商品和客户名称的列表位于另一张纸上。每次打印发票后,都会保存工作簿,以便清除发票表并插入其他数据。基本上,为了将数据从发票复制到列表中,我使用了以下代码:
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 WithC栏存储正在销售的产品,B栏存储购买产品的客户的姓名。当客户端有一个协同响应的产品时,上面的代码运行良好。但是,如果客户端有2个或更多的产品,下次我运行代码时,下一个客户端的名称就出现在前一个客户端的下面,与第一个客户端购买的产品同一行。这是一张有问题的图片。

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

对不起,我的英语(不是我的母语)你能帮我一下吗?
发布于 2016-04-16 13:30:43
尝尝这个
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")中。
https://stackoverflow.com/questions/36664249
复制相似问题