我的工作簿有sheet1 = Overview(包含启动UserForm1的按钮)。我的Userform有24个CheckBox和2个CommandButton(确定和取消)。
每个CheckBox都与工作簿中的工作表相关联。每个后续纸张都标有PQC 1001,PQC 1002等,其中包含数据(每张纸张在A1的左上方推送图像)。
我的目标是让用户检查他们想要使用的每个项目的CheckBox,然后选择“确定”(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上搜索可能的解决方案,并尝试在Stack Overflow的搜索栏中查找一些术语/短语。我想我可能会查找不正确的术语名称,这样可能会有所不同(“将命令按钮粘贴到新书中”就是其中之一。)
总的来说,这基本上是我尝试编写的第三件事;我的教育背景包含零编码。我的编码技巧的程度来自于我从比我更了解的人写的代码的阅读和反馈。
答案 0 :(得分:0)
对于您的第一个问题,请避免依赖Selection
。相反,您应该明确说明目标范围,例如:
NewBook.Sheets(1).Range("A1").PasteSpecial...
现在,您正在打开多个工作簿,因为如果您未在Sheets(_name_).Copy
语句中明确指定目标,Copy
方法将始终返回新工作簿。
http://msdn.microsoft.com/en-us/library/office/ff837784(v=office.15).aspx
而是使用Before
方法的After
或Copy
参数指定复制工作表的目标位置:
试试这个:
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