Excel-使用按钮

时间:2018-07-31 16:37:24

标签: excel if-statement button copy

我有一个Excel工作簿。在此工作簿中,我有5个工作表。

1 =列表A

2 =列表B

3 =列表C

4 =列表D

5 =订单

我的列表工作表将按以下方式设置。 A栏=复选框。 B列=数字。 C栏=说明。

我的最终目标是在每个列表中的每个项目旁边都有一个复选框。从这里,我将浏览每个列表,然后从所需列表中选择项目。选择完所有项目后,我转到“订单表”,然后在此工作表上单击一个按钮。当我单击此按钮时,只有在所有工作表的Col A中都打勾的情况下,它才会从Col B复制数据。

因此,如果我检查列表A上的A2,A4,A10和A15并检查列表B上的A3,A9和A22,以及列表C上的A35,则当我单击“订购单”上的按钮时,数据从'列表A'!B2,'列表A'!B4,'列表A'!B10,'列表A'!B15,'列表B'!B3,'列表B'!B9,'列表B'!B22,和“列表C”!B35复制到“订单”!E22:E30

这应该是动态的,因为我可能只检查2个项目,或者我可能检查30个项目。

****************编辑******************

正如我评论的那样,我相信我已经解决了这个问题,但是我一直在寻找使它变得更好的方法

这是我要在我的excel工作簿中执行的VBA代码:

Private Sub Load_Order_Click()
' Setup Data
    Dim Last_Row0 As Long
    Dim ws0 As Worksheet
    Set ws0 = Sheets("work")

' Sort and Copy Data from each page to Work
With Sheets("1 - Conduit")
    .Range("A:B").AutoFilter Field:=1, Criteria1:="x"
    .Range("a2", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
    End With
With Sheets("work")
    .Range("A1").PasteSpecial xlPasteValues
    End With
With Sheets("2 - Elbows")
    .Range("A:B").AutoFilter Field:=1, Criteria1:="x"
    .Range("a2", .Cells.SpecialCells(xlCellTypeLastCell)).Copy
    End With
With Sheets("work")
    Last_Row0 = ws0.Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & Last_Row0).PasteSpecial xlPasteValues
    End With

' Not Sure
With Sheets("1 - Conduit")
    ActiveSheet.Range("A:C").AutoFilter
    End With
With Sheets("2 - Elbows")
    ActiveSheet.Range("A:C").AutoFilter
    End With

' Clear Selection Marks
Sheets("1 - Conduit").Activate
ActiveSheet.Range("A:A").Select
Selection.ClearContents
Sheets("2 - Elbows").Activate
ActiveSheet.Range("A:A").Select
Selection.ClearContents

' Show all
Sheets("1 - Conduit").Activate
ActiveSheet.ShowAllData
Sheets("2 - Elbows").Activate
ActiveSheet.ShowAllData

' Copy BMC numbers from work page to Order Template
Sheets("work").Activate
ActiveSheet.Range("B1:B200").Copy
Sheets("Order").Activate
ActiveSheet.Range("E22").PasteSpecial xlPasteValues

' Clear work page
Sheets("work").Activate
ActiveSheet.Range("A:F").Select
Selection.ClearContents

' Return to Order page
Sheets("Order").Activate
ActiveSheet.Range("A1").Select
    End Sub

Private Sub Print_Order_Click()
' Print Order form to PDF
Sheets("Order").Activate
ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:="Material Order"
End Sub

最终目标是这个。将扫描工作表1-导管,工作表2-弯头等(此凸轮可能要超过30个工作表)。在每个工作表上,“ A”列是“复选框”列(目前,我使用的是“ x”)。如果项目在A列中带有“ x”,则它将A列和B列复制到称为“工作”的工作表中。我这样做是为了能够根据需要进行排序和堆叠。然后,检查完所有工作表后,它会返回并清除所有工作表上Col A中的所有“ x”。完成此操作后,它将复制“工作”(我需要的REAL数据)中的Col B,并将其复制到工作表中称为“订单”的特定范围。然后,将数据复制到“订单”后,它将清除并清除“工作”。

此代码起作用。它完成了我想要的操作。我的下一步是查看制作方法是否更简单。在C ++中,我将使用while或for循环并使其逐步执行序列,但是我不知道在这里是否可行。

0 个答案:

没有答案