Excel 根据所选数量将数据从工作表中的行复制到另一个工作表

Excel 根据所选数量将数据从工作表中的行复制到另一个工作表,excel,vba,macos,Excel,Vba,Macos,我是一名平面设计师,虽然我知道基本的Excel,但这对我来说正进入国外市场 因此,我的任务是将我们公司的产品价格表(包含+800+个产品,全部分为类别/选项卡)整合成一个版本,用户可以选择每个项目的数量,并在其总计页面上查看运行列表。没问题,我已经弄明白了 每个项目都有一列用于零件号、说明、价格和数量…数量默认为零。我需要这样做,如果用户想要某个项目,他们可以将数量更改为他们想要的任何数量,然后按“添加/更新采购订单”按钮,并将该项目行的此值添加到单独的工作表中。此外,如果他们将值更改为零并再次

我是一名平面设计师,虽然我知道基本的Excel,但这对我来说正进入国外市场

因此,我的任务是将我们公司的产品价格表(包含+800+个产品,全部分为类别/选项卡)整合成一个版本,用户可以选择每个项目的数量,并在其总计页面上查看运行列表。没问题,我已经弄明白了

每个项目都有一列用于零件号、说明、价格和数量…数量默认为零。我需要这样做,如果用户想要某个项目,他们可以将数量更改为他们想要的任何数量,然后按“添加/更新采购订单”按钮,并将该项目行的此值添加到单独的工作表中。此外,如果他们将值更改为零并再次按下按钮,则会删除该项

所以现在书中的每个工作表都是这样的:

理想情况下,最好只有一个宏/按钮,一旦用户输入了他们想要的任何数量的项目,它就会将该行(但作为列顺序G B C F H)复制到该书中名为“采购订单”的工作表中。如果用户将某个项目的数量更改为0,并重新单击该按钮,则会从另一个工作表中删除该行。这需要通过30多个其他选项卡,并在用户继续将产品添加到其采购订单(从采购订单工作表上的B22开始)时,将下面已经输入的值的行追加

我担心的是将来添加/删除产品/其他员工必须更新此内容,并且如果我需要在选项卡中添加5个以上的产品,则不需要对宏进行疯狂的更改


我将接受任何人在这个问题上提供的任何帮助、见解、方向或指导。我非常感激

好吧,我不知道我是否理解你的问题,但我的想法是:你可以在工作表上创建两个按钮,一个上面有一个大“+”,另一个上面有一个“-”,并将它们链接到两个不同的子例程

这些项目可以定位在产品行的末尾或开头。右键单击按钮,转到属性,并确保这些属性取决于单元格位置和大小
使用“+”可以检查您的“采购订单”当前是否已打开(如果未打开,则可以创建一个新订单),并将所有内容添加到新工作表的同一行中(您可以使用
应用程序.Caller
对按钮进行寻址,
.Top
/
。Left
对其行/列进行寻址)
如果数量为0,则使用“-”按钮删除产品行也是如此。有趣的是:您可以创建2个按钮和宏,然后复制每行的按钮,因为它们都在其右/左方向上寻址行

编辑:

Sub Add()

Dim Button_cell_row As Integer
Dim ws As Worksheet, Target As Worksheet
Dim ProductName As String
Dim i As Integer

Set ws = ThisWorkbook.ActiveSheet
Set Target = Workbooks("Purchase_Order.xls").worksheets(1) ' Here you need to choose the file (Workbook) and the Worksheet (Tab) you want

Button_cell_row = ws.Shapes(Application.Caller).TopLeftCell.Row

Do Until IsEmpty(Target.Cells(i,4)) ' for example your product name is in the 4th column
    If Target.Cells(i,4) = ProductName Then
        Target.Cells(i,7) = cInt(Target.Cells(i,7)) + 1 ' say that the quantity is stored in the 7th cell
    Exit Do
    End If
    i = i+1
Loop

If IsEmpty(Target.Cells(i,4)) Then ' meaning that the whole sheet has been searched but there's no product with a similar name on the whole "i" loop-range
' in this case "i" is now the index of your first empty row
    ws.Range(Cells(Button_cell_row,3), Cells(Button_cell_row,8)).Copy _ ' For example you need to copy from 3rd column to 8th column...
    Destination:=Target.Cells(i,1) ' ... on the first empty row, from column 1
End If

Set ws = Nothing
Set Target = Nothing

End Sub

这没有经过测试,可能不起作用。但是你知道了:)对于“移除”潜艇,它将非常相似。

谢谢!这是有道理的&可以解决问题,但我不知道如何实现它!我喜欢在每一行中添加一个+和-按钮的想法,因为这将消除目前任何主要定制的需要。比如说,有这样一个选项,PART#DESC LINK(网站)LIST COST YOUR COST QTY每个选项卡可能有许多产品。理想情况下,如果按ADD,它将复制该行(A、B、E、F列)并将其粘贴到PO选项卡上(按F、A、B、E的顺序)…如果按REMOVE,它将从PO中删除该行。