将列表框中选定的 Excel 工作表保存为新的工作簿/Excel 文件

Posted

技术标签:

【中文标题】将列表框中选定的 Excel 工作表保存为新的工作簿/Excel 文件【英文标题】:Saving selected excel sheets in a Listbox as a new workbook/excel file 【发布时间】:2021-12-03 14:28:03 【问题描述】:

我在 Excel 中有一个名为 ListBoxSh 的列表框。以下代码生成 Excel 工作簿中工作表的名称,并可以动态“捕获”选定的工作表。

现在我想要的是用户“选择”的工作表应该保存为一个新的 excel 文件(如果选择了多个工作表,它们都应该在一个文件中)。

大部分都可以,但这段代码似乎不正确

Sheets(SheetArray()).SaveAs Environ("temp") & "\" & FName 

我在下面粘贴了整个代码。我应该在这里改变什么?

Sub test()

Dim i As Long, d As Long, c As Range, FName As String
FName = "Sheet.xls"

    Dim SheetArray() As String
    
    With ActiveSheet.ListBoxSh
    
        For i = 0 To .ListCount - 1
        
            If .Selected(i) Then
    
                ReDim Preserve SheetArray(d)
                SheetArray(d) = .List(i)
                d = d + 1
                
            End If
                    
        Next i
    
    End With
    
Sheets(SheetArray()).SaveAs Environ("temp") & "\" & FName

End Sub

问候,

【问题讨论】:

【参考方案1】:

请尝试下一个代码。它假定列表框是ActiveX 类型:

Sub testSheetListBox()
Dim lbox As MSForms.listBox, i As Long, d As Long, SheetArray()
Set lbox = ActiveSheet.OLEObjects("ListBoxSh").Object
ReDim SheetArray(lbox.ListCount)

With lbox
        For i = 0 To .ListCount - 1
            If .Selected(i) Then
                SheetArray(d) = .List(i): d = d + 1
            End If
        Next i
End With
If d > 0 Then
    ReDim Preserve SheetArray(d - 1) 'often ReDim Preserve is not a good way of memory handling
    Sheets(SheetArray).copy 'it creates a new workbook containing the selected sheets...
    ActiveWorkbook.saveas ThisWorkbook.Path & "\Sheet.xls"
Else
    MsgBox "No sheet selected..."
End If
End Sub

【讨论】:

以上是关于将列表框中选定的 Excel 工作表保存为新的工作簿/Excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

将带有条件 IF 的 groupby 元素/列表导出到 Excel 工作表

Excel VBA在生成副本的工作表中插入本工作簿中的VBA模块代码

什么是Excel的工作表?如何创建新的工作表?

遍历下拉列表并将工作簿另存为新文件

将代码动态添加到新的 Excel 工作表

将每个工作表读入一个新的数据框