用户形成CommandButton基于CheckBox填充True / False

我的工作簿有sheet1 = Overview(包含启动UserForm1的button)。 我的Userform有24个CheckBox和2个CommandButton(确定并取消)。

每个CheckBox都与工作簿中的工作表关联。 每个随后的纸张标记为PQC 1001,PQC 1002等,其包含数据(对于每个纸张在A1的左上方被推动的图像)。

我的目标是让用户检查他们想要使用的每个项目的checkbox,然后select“确定”(CommandButton1)将其复制到一个新的工作簿中打印出来。

后来,我打算定义打印参数,使项目分页,但我需要在我去黄金之前得到的基本知识。

目前我有下面的代码(使用第一个和第二个CheckBox来确保它们能够工作,然后我打算通过复制代码并修改正确的工作表/checkbox来扩展):

Sub CommandButton1_Click() Dim WB As Workbook If CheckBox1.Value = True Then sheets("PQC 1001").Copy Set NewBook = Workbooks.Add With NewBook End With Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Else: CheckBox1.Value = False End If If CheckBox2.Value = True Then sheets("PQC 1002").Copy Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Else: CheckBox2.Value = False End If End Sub Sub CommandButton2_Click() Unload Me End End Sub 

当我运行这个代码(仅检查了CheckBox1)时触发错误:范围类的PasteSpecial方法失败。 除了代码问题之外,我还生成了2本工作簿。 第一个只有PQC 1001表单,第二个工作簿是空白的(除非我复制了其他任何内容,例如,在修改之前复制/粘贴代码,将复制的代码粘贴到第二个工作簿的单元格A1中)。

我真的不知道该从哪里出发。 我花了一些时间在Google上search可能的解决scheme,并尝试在Stack Overflow的search栏中查找一些术语/短语。 我想我可能会查找不正确的术语名称,所以可能会有所作为(“命令button粘贴到新书”是一个)。

作为一般说明,这实际上是我曾尝试编码的第三件事; 我的教育背景包含零编码。 我的编码技巧的程度来自于对我所写的代码的一些阅读和反馈,

对于你的第一个问题,请避免依靠Selection 。 相反,您应该明确指出目标范围,如:

NewBook.Sheets(1).Range("A1").PasteSpecial...

现在,您正在打开多个工作簿,因为如果您尚未在Copy语句中明确指定目标,则Sheets(_name_).Copy方法将始终返回新的工作簿。

http://msdn.microsoft.com/en-us/library/office/ff837784(v=office.15).aspx

而应使用Copy方法的BeforeAfter参数指定复制的工作表的目的地:

尝试这个:

 Dim NewBook as Workbook Set wb = ActiveWorkbook 'Or ThisWorkbook, or Workbooks("workbookname.xlsx") '#Create the new book outside of the If blocks. Set NewBook = Workbooks.Add '# Get rid of excess sheets Do Until NewBook.Sheets.Count = 1 NewBook.Sheets(1).Delete Loop If CheckBox1.Value = True Then 'Creates exact copy of the sheet PQC 1001 in the NEW workbook. wb.sheets("PQC 1001").Copy After:=NewBook.Sheets(1) Else: CheckBox1.Value = False End If If CheckBox2.Value = True Then wb.sheets("PQC 1002").Copy After:=NewBook.Sheets(NewBook.Sheets.Count) Else: CheckBox2.Value = False End If