Excel VBA:如何通过输入表单实现多工作表选择并存储选中项
VBA用户表单:收集选中工作表并实现复制
1. 优化初始化代码
你原来的初始化代码里ws.Activate完全没必要,直接用工作表对象的Name属性就能添加选项,而且先设置多选模式再添加项更合理,修改后的代码:
Private Sub UserForm_Initialize() Dim ws As Worksheet ListBox1.MultiSelect = fmMultiSelectMulti For Each ws In ThisWorkbook.Worksheets ListBox1.AddItem ws.Name Next End Sub
2. 给“完成”按钮添加点击事件
假设你的按钮叫CommandButton1,把下面的代码贴到用户表单的代码模块里,就能实现选中项存入数组并复制工作表:
Private Sub CommandButton1_Click() Dim selectedSheets() As String Dim i As Integer, selectedCount As Integer ' 先统计选中的工作表数量 selectedCount = 0 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then selectedCount = selectedCount + 1 Next i ' 未选中任何工作表时提示用户 If selectedCount = 0 Then MsgBox "至少选一个工作表再点完成!", vbExclamation Exit Sub End If ' 初始化对应大小的数组 ReDim selectedSheets(1 To selectedCount) ' 将选中的工作表名存入数组 selectedCount = 1 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then selectedSheets(selectedCount) = ListBox1.List(i) selectedCount = selectedCount + 1 End If Next i ' 执行复制操作——示例为复制到新工作簿,可按需修改 ThisWorkbook.Sheets(selectedSheets).Copy ' 关闭用户表单 Unload Me End Sub
可选修改:复制到当前工作簿
如果不想复制到新工作簿,而是把选中工作表复制到当前工作簿的末尾,将复制代码替换为:
ThisWorkbook.Sheets(selectedSheets).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
内容的提问来源于stack exchange,提问作者Mike AlFaver Favro
相关产品推荐
相关产品推荐

