【问题标题】:Copy data from rows in Worksheet to another worksheet based on quantity selected根据选择的数量将数据从工作表中的行复制到另一个工作表
【发布时间】:2014-07-15 19:39:35
【问题描述】:

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

所以我的任务是把我们公司的产品价格表(+800 多种产品都分成类别/标签)整合成一个版本,用户可以选择每个项目的数量并在页面上查看运行列表他们的总数。没问题,我想通了。

每个项目都有一个零件编号、描述、价格和数量列...数量默认为零。我需要得到这个,以便如果用户想要一个项目,他们可以将数量更改为他们想要的任何数量,然后按添加/更新采购订单按钮并将该项目行的这些值添加到单独的工作表中。此外,如果他们将值更改为零并再次按下按钮,它将删除该项目。

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

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

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

我将接受任何人在此问题上可以提供的任何帮助、见解、方向或指导。我非常感谢!

【问题讨论】:

    标签: excel vba macos


    【解决方案1】:

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

    这些项目可以位于产品行的末尾或开头。右键单击按钮,转到属性并确保这些取决于单元格的位置和大小。
    “+”可以检查您的“采购订单”当前是否打开(如果不是,可以创建一个新的),并将所有内容添加到新工作表的同一行(您可以使用Application.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(website) LIST COST YOUR COST QTY for each tab可能有很多产品。理想情况下,如果您按 ADD,它将复制该行(A、B、E、F 列)并将它们粘贴到 PO 选项卡上(按 F、A、B、E 的顺序)......如果您按 REMOVE,它从 PO 中删除该行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多