我想在我的Excel文件中创建所有工作表的列表。
该列表应插入Sheet3.Range("B5:B50")
中
(我的电子表格中没有超过50张纸。)
因此,我尝试使用此VBA:
Sub ListSheets()
Dim ws As Worksheet
Dim x As Integer
x = 1
For Each ws In Worksheets
Sheet3.Cells(x, 1) = ws.Name
x = x + 1
Next ws
End Sub
此VBA创建工作表列表,但未将其插入我想要的范围B5:B50
中。该列表是在 A列中创建的,从 A1 开始。
如何更改此代码才能将列表添加到Sheet3.Range("B5:B50")
中?
答案 0 :(得分:2)
Opiton 1:插入工作表列表的范围为无限制:
Sub ListSheets()
Dim ws As Worksheet, x As Long, r As Range
Set r = Sheet3.Range("B5")
For Each ws In Worksheets
x = x + 1
r.Cells(x, 1) = ws.Name
Next ws
End Sub
选项2:插入工作表列表的范围受限制:
Sub ListSheets()
Dim ws As Worksheet, x As Long, r As Range
Set r = Sheet3.Range("B5:B50")
For Each ws In Worksheets
x = x + 1
If x > r.Count Then Exit Sub
r.Cells(x, 1) = ws.Name
Next ws
End Sub
答案 1 :(得分:1)
您可以使用Offset
来完成此操作。
Sub ListSheets()
Dim ws As Worksheet
Dim x As Integer
For Each ws In Worksheets
Sheet3.Range("B5").Offset(x) = ws.Name
x = x + 1
Next ws
End Sub
如果要将此列表限制为一定数量的纸张(例如前45张),请添加其他条件。
Sub ListSheets()
Dim ws As Worksheet
Dim x As Integer
For Each ws In Worksheets
If x < 45 Then
Sheet3.Range("B5").Offset(x) = ws.Name
x = x + 1
End If
Next ws
End Sub
答案 2 :(得分:1)
不需要x
-使用工作表的Index
来指定位置。
Sub ListSheets()
Dim rng As Range
Set rng = Range("B5:B50")
For Each Wksht In Worksheets
If Wksht.Index <= rng.Cells.Count Then rng.Cells(Wksht.Index, 1) = Wksht.Name
Next
End Sub
这还将防止超出指定范围的写入。
答案 3 :(得分:0)
在这种情况下,我相信串联是您的朋友:
Sub ListSheets()
Dim ws As Worksheet
Dim x As Integer
x = 5
For Each ws In Worksheets
Sheet3.Range("B" & x) = ws.Name
x = x + 1
Next ws
End Sub
答案 4 :(得分:0)
只需在For i循环中使用sheet.count抛出另一种方法
For i = 1 To ThisWorkbook.Sheets.Count
Range("B" & i + 4).Value2 = Sheets(i).Name
Next i