我有一个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循环并使其逐步执行序列,但是我不知道在这里是否可行。