微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取打开的工作簿VBA的所有工作表名称

如何解决获取打开的工作簿VBA的所有工作表名称

我有下面的宏,该宏列出了当前(主机)工作簿中的所有工作表名称

我想修改代码,以便它以活动/打开的工作簿为目标,该工作簿的名称和扩展名在单元格C1中引用。

range("C1").value

请让我知道如何修改以下代码

Sub ListSheets()

    Dim ws As Worksheet
    Dim x As Integer
    
    x = 1
    
    Sheets("Sheet1").Range("A:A").Clear
    
    For Each ws In Worksheets
        Sheets("Sheet1").Cells(x,1) = ws.Name
        x = x + 1
    Next ws

End Sub

解决方法

Sub ListSheets()
Dim inputwb As Workbook
Dim ws As Worksheet,source As Worksheet
Dim LRow As Long

' Change source sheet if it is NOT always the active worksheet
' or activate the source sheet first with Workbooks("NAME").Sheets(INDEX).Activate (not preferable)
Set source = ActiveSheet

On Error Resume Next
Set inputwb = Workbooks(Cells(1,1).Value)
If err.Number <> 0 Then
    MsgBox "Could not find workbook " & Cells(1,1).Value & ". Subroutine execution stopped."
    Exit Sub
End If

On Error GoTo 0

ThisWorkbook.Sheets("Sheet1").Range("A:A").Clear
LRow = 1

For Each ws In inputwb.Worksheets
    ThisWorkbook.Sheets("Sheet1").Cells(LRow,1) = ws.Name
    LRow = LRow + 1
Next ws
End Sub
,

这应该可以完成工作,但是您不需要工作簿的扩展名而已。

Sub ListSheets()
        
    Dim ws As Worksheet
    Dim x As Integer
    Dim wbk As Workbook
    Dim wbkName As String

    x = 1
    wbkName = ThisWorkbook.Sheets("Sheet1").Range("C1").Value
           
    ThisWorkbook.Sheets("Sheet1").Range("A:A").Clear
    Set wbk = Application.Workbooks(wbkName)
           
    For Each ws In wbk.Worksheets
        ThisWorkbook.Sheets("Sheet1").Cells(x,1) = ws.Name
        x = x + 1
    Next ws
        
End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。