Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 要根据复选框True/False填充的Userform CommandButton_Excel_Vba_Checkbox_Paste_Commandbutton - Fatal编程技术网

Excel 要根据复选框True/False填充的Userform CommandButton

Excel 要根据复选框True/False填充的Userform CommandButton,excel,vba,checkbox,paste,commandbutton,Excel,Vba,Checkbox,Paste,Commandbutton,我的工作簿有sheet1=Overview(包含启动UserForm1的按钮)。我的用户表单有24个复选框和2个命令按钮(确定和取消) 每个复选框都与工作簿中的工作表相关联。随后的每张图纸都标有PQC 1001、PQC 1002等,其中包含数据(每张图纸的A1中图像推到左上角) 我的目标是让用户选中他们想要使用的每个项目的复选框,然后选择“确定”(CommandButton1),让它将数据复制到一个新工作簿,以便他们打印出来 稍后,我打算定义打印参数,以便对项目进行分页,但在购买黄金之前,我需要

我的工作簿有sheet1=Overview(包含启动UserForm1的按钮)。我的用户表单有24个复选框和2个命令按钮(确定和取消)

每个复选框都与工作簿中的工作表相关联。随后的每张图纸都标有PQC 1001、PQC 1002等,其中包含数据(每张图纸的A1中图像推到左上角)

我的目标是让用户选中他们想要使用的每个项目的复选框,然后选择“确定”(CommandButton1),让它将数据复制到一个新工作簿,以便他们打印出来

稍后,我打算定义打印参数,以便对项目进行分页,但在购买黄金之前,我需要获得基本信息

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

运行此代码时触发错误(仅选中复选框1):range类的PasteSpecial方法失败。除了代码问题,我还有两本工作手册;第一个工作簿中只有PQC 1001工作表,第二个工作簿为空(除非我复制了任何其他内容,例如,在修改前复制/粘贴代码时,我复制的代码粘贴到第二个工作簿的单元格A1中)

我真的不知道该怎么办。我花了一点时间在谷歌上搜索可能的分辨率,并尝试在Stack Overflow的搜索栏中查找一些术语/短语。我想我可能是在查找不正确的术语名称,所以这可能会有所不同(“commandbutton to paste to newbook”就是其中之一)


一般来说,这是我尝试编写代码的第三件事;我的教育背景包含零编码。我的编码技能的程度来自于对我所写代码的一些阅读和反馈,这些代码是由比我更有知识的人编写的。

对于第一期,请避免依赖
选择。相反,您应该明确说明目标范围,如:

NewBook.Sheets(1).Range(“A1”).PasteSpecial…

现在,您将打开多个工作簿,因为如果您没有在
Copy
语句中明确指定目标,那么
Sheets(\u name).Copy
方法将始终返回一个新工作簿

相反,使用
Copy
方法的
Before
After
参数指定复制工作表的目的地:

试试这个:

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

我认为问题在于您对
选项的依赖。试着用一些东西来明确说明目标范围,比如
NewBook.Sheets(1).range(“A1”).PasteSpecial…
。谢谢你,大卫;这就纠正了方法范围的问题(我删除了粘贴后的所有“东西”,以使其工作)。不过还是打开了两本作业本。呃,我想已经修好了;我的剪贴板上有要粘贴到第二个工作簿中的项目,这似乎是“pasteSpecial”错误。确定。我知道是什么原因造成的。让我给你写一个答案。运行时错误“9”,下标超出范围。它突出显示了注释下方使用“Before”的行。当我尝试键入该行时,是否应该弹出一个窗口?有时当我输入单词时,我会看到一个小菜单,告诉我如何为它提供语法。我要说的是,我不知道我是否有正确的论点参考(我以前听过这个短语,不知道它的意思)。范围界定不当。等一下。。。我会修改的。在添加新书之前,使用
WB
变量设置Active工作簿的句柄。当您添加新书时,不合格的
工作表(“PQC 1001”).Copy…
将引发错误,因为
新书
(当前为活动图书)中没有此类工作表。这简直是奇迹。仅在选中CheckBox1或CheckBox2的情况下测试表单,并注意必须在NewBook上定义工作表。有没有办法将副本发送到第一张可用的、未使用的工作表上?或者,我可以在事务结束时删除NewBook中所有“未使用”的工作表。附加:谢谢你的帮助。这对我来说似乎是压倒性的,所以我真的很感激;我可以通过录制宏并删除未使用的页面来删除未使用的页面。这很好,尽管每个复选框都在创建自己的工作簿。我的想法是错误的,但我认为将“NewBook”定义为工作簿意味着,如果它使用上述术语,那么只能生成1?
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