我对 VBA 还很陌生,我想知道我尝试做的事情是否可行。
我在同一个工作簿中有多张工作表,我尝试使用复选框来选择工作表,每个复选框对应一张特定的工作表,然后单击按钮创建一个新的工作表,其中包含每个选定单独工作表的所有数据。即:
Worksheet 1:
column1 column2 column3
A B C
D E F
+
Worksheet 2:
column1 column2 column3
G H I
K L O
=
New Worksheet:
column1 column2 column3
A B C
D E F
G H I
K L O
将选定的工作表合并为一个新工作表。所有工作表具有相同的结构(列数、标题等相同)。上面的工作表 1 和工作表 2 将是用户选中复选框后选择的工作表。
工作表如下:
- IT 认证,
- 商业技能和生产力,
- 数据库和网络安全
在这种情况下,我尝试根据引用它们的复选框是否被点击将它们存储在变量中:
这是我目前拥有的代码:
Private Sub CommandButton1_Click()
Dim ITCert As Worksheet
Dim BSProd As Worksheet
Dim DC As Worksheet
If Me.CheckBox1 = True Then
ITCert = ThisWorkbook.Sheets("IT Certification")
End If
If Me.CheckBox2 = True Then
BSProd = ThisWorkbook.Sheets("Business Skills & Productivity")
End If
If Me.CheckBox3 = True Then
DC = ThisWorkbook.Sheets("Database and Cybersecurity")
End If
End Sub
我不太确定如何合并这些工作表。我是否需要创建一个循环(我认为不需要,因为用户已经通过单击复选框选择了相关工作表)。我曾考虑以某种方式将我已分配工作表的变量添加到一起,但我无法做到这一点。
如能得到任何帮助/建议我将非常感激!
答案1
要将对象存储在变量中,您必须使用“Set”命令。
即:
Set ITCert = ThisWorkbook.Sheets("IT Certification")
一个简单的副本看起来像这样,但是你最好使用源表的“名称”而不是数字:
代码编辑:由于您的评论!
Option Explicit 'use only clearly defined variables
Public Sub Test()
Dim r As Long
Dim rcnt As Long
Dim Dst As Worksheet
Dim chk1 As Boolean
Dim chk2 As Boolean
With ThisWorkbook
Set Dst = .Sheets.Add(After:=.Worksheets(.Worksheets.Count))
'r = 2
rcnt = 1 ' stores amount of inserted rows
chk1 = True 'simulate checkbox1
chk2 = True 'simulate checkbox2
If chk1 Then
With .Sheets(1)
r = .Range("A" & .Rows.Count).End(xlUp).Row 'last source-row
.Range("A1:E" & r).Copy _
Destination:=Dst.Range("A" & rcnt)
rcnt = rcnt + r 'lastrow
End With
End If
If chk2 Then
With .Sheets(2)
r = .Range("A" & .Rows.Count).End(xlUp).Row 'last source-row
.Range("A1:E" & r).Copy _
Destination:=Dst.Range("A" & rcnt)
rcnt = rcnt + r 'lastrow
End With
End If
End With
End Sub