2016-04-16 91 views
0

我制作了一张用于打印文档的发票工作簿。我试图根据发票单中输入的内容列出销售产品,客户名称等。 销售商品和客户名称列表位于另一张纸上。在每次打印发票后,都会保存工作簿,以便可以清除发票清单并插入其他数据。 基本上,从发票到列表中,我使用的是下面这段代码复制数据:Excel将一些单元格从一张纸复制/粘贴到另一张纸上但带有扭曲

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个或更多产品,那么下一次我运行代码时,下一个客户的名称就会出现在前一个客户的名下,与第一个客户购买的产品位于同一行。 这是一个问题的图片。

Picture link enter image description here

我想修改代码,这样,当我从发票(factura)B列复制客户端的名称,它会首先找到C列,并使用了第一个明确的行行号,将客户名称粘贴在该号码的列b中。 事情是这样的:

Picture link enter image description here 对不起我的英语不好(不是我的母语) 你能帮帮我吗?

回答

1

试试这个

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")

+0

谢谢,它的工作原理,但它将复制的数据放置在位于“集中器”中的表格之外。该表只是空的单元格,但它们有一些选定的边框。数据粘贴在这些边界之外。边界会成为问题吗? –

+0

完成后,我删除了表格并重新制作了它。它现在有效!十分感谢你的帮助! –

+1

很高兴帮助。如果我填满了您的问题,请将答案标记为已接受。谢谢 – user3598756

相关问题