问题描述
我有下面的宏,该宏列出了当前(主机)工作簿中的所有工作表名称。
我想修改此代码,以便它以活动/打开的工作簿为目标,该工作簿的名称和扩展名在单元格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