使用复选框组合选定工作集的宏

使用复选框组合选定工作集的宏

我对 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

相关内容