通过VBA将值复制并粘贴到另一个工作表

我正在尝试在VBA上复制一些单元格值并将其粘贴到同一工作簿中的其他工作表中。

订单清单工作表格式如下:

(Column A) | (Column B) | (Column C) | (Column D) | (Column E) | (Column F) Product Code | Product Description | Price | Quantity | Net Amount | Sheet Name 

我需要复制订单清单中数量 ,并粘贴到相关表单中,如F列所示。

例如, 产品代码 AAA具有数量 10,具有订单清单中的工作 表名称

 Product Code | Product Description | Price | Quantity | Net Amount | Sheet Name AAA ... ... 5 ... Art 

我需要一个代码来将艺术品表中的AAA 数量 (G列)replace为10而不是5. 产品代码艺术品表格的B列中。

 (Column B) | ... | (Column G) Product Code | Other headers | Quantity AAA ... 10 ' <---- REPLACE WITH 5 

我已更新如下:

 Dim j As Long, i As Long j = 18 With Worksheets("Order List") If Sheets("Order List").Range("F" & j) <> "" And Sheets("Order List").Range("A" & j) <> "" Then i = Worksheets(.Range("F" & j)).Columns("B").Find(What:=.Range("A" & j).Value, LookIn:=xlValues, LookAt:=xlWhole).Row Sheets("Order List").Range("D" & j).Copy Destination:=Worksheets(Worksheets("Order List").Range("F" & j)).Range("G" & i) j = j + 1 End If 

现在没有错误信息,但不能replace艺术品表中的数量。 目的地是否错误? 你能不能为我检查一下? 非常感谢

尝试使用“ Find命令,例如:

 Dim j As Long, i As Long j = 18 With Worksheets("Order List") If .Range("F" & j).Value <> "" And .Range("A" & j).Value <> "" Then i = Worksheets(.Range("F" & j).Value).Columns("B").Find(What:=.Range("A" & j).Value, LookIn:=xlValues, LookAt:=xlWhole).Row .Range("D" & j).Copy Destination:=Worksheets(.Range("F" & j).Value).Range("G" & i) 'or, if you just want to copy the value, use 'Worksheets(.Range("F" & j).Value).Range("G" & i).Value = .Range("D" & j).Value j = j + 1 End If End With 

笔记:

  1. 假定产品代码位于试图更新的工作表的A列中。
  2. 如果产品代码不存在于相关工作表的A列中,将会崩溃。 如果这是一种可能性,那么你将需要包括正确的错误检查,以查看是否成功(即没有返回Nothing ),然后再试图获得Row属性。

也许有一个更容易的替代解决scheme。 您可以使用订单列表工作表上的用户友好的工作表查找function(而不是使用VBA处理繁琐的多工单订单数量search(以及新数据“放入订单”)) 将数据合并到所有其他表单中,然后在适当的时候进行简单的单列复制和粘贴。

样本目标表单

[ 样本数据[2]

您可以从JumpShare下载我的[简单]演示XLSM ,以展示我的意思是“放弃而不是获得”。 基本上,1查找公式会search所有的内容,只需要2行代码就可以在需要时复制新数据。 {请注意,该macros将不能在联机查看器上工作。)

VBA不是我的专长,所以我把你的代码解构成了一些,所以我可以更好地理解它。

 Dim j As Long, i As Long Dim s As String Dim ws As Worksheet j = 18 Set ws = Worksheets("Order List") s = ws.Range("A" & j).Value i = Worksheets(ws.Range("F" & j)).Columns("B").Find(What:=s, LookIn:=xlValues, _ LookAt:=xlWhole).Row If ws.Range("F" & j) <> "" And ws.Range("A" & j) <> "" Then ws.Range("D" & j).Copy Destination:=Worksheets("F" & j).Range("G" & i) j = j + 1 End If 

跳出来的一件事是最后一行代码:

 Destination:=Worksheets("F" & j).Range("G" & i) 

这告诉我在工作簿中有一个名为“Fx”(其中x是一个数字)的工作表 。 这是可能的吗?

 Destination:=Worksheets(ws.Range("F" & j))