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

时间:2017-11-24 23:36:13

标签: excel vba excel-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

我需要一个代码将 Art 表中AAA的数量(G列)替换为10而不是5. 产品代码 Art 表的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

现在没有错误消息,但不能替换Art Sheet中的数量。 目的地错了吗?你能帮我看一下吗?非常感谢

3 个答案:

答案 0 :(得分:1)

尝试使用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列中不存在产品代码,则会崩溃。如果这是可能的话,那么在尝试获取Find属性之前,您需要包含正确的错误检查以查看Nothing是否成功(即未返回Row)。 / LI>

答案 1 :(得分:0)

也许有一个更简单的替代解决方案。您可以使用更加用户友好的工作表查找功能,而不是使用VBA处理麻烦的多页订单数量搜索(并且“将”新的数据放在订单上)。订单列表工作表“获取”从所有其他工作表合并到一个地方的数据,然后是一个简单的单列副本&amp;在时机成熟时粘贴。

sample destination sheet

[sample data[2]

您可以下载我的[简单]演示XLSM from JumpShare here,以通过“put而不是get”演示我的意思。基本上,1个查找公式会对您进行所有搜索,只需要2行代码即可在需要时复制新数据。 {请注意,宏不适用于在线查看器。)

答案 2 :(得分:0)

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)

这告诉我工作簿中有工作表,名为&#34; Fx&#34; (其中x是数字)。你有意这么说吗?

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