通过VBA创建工作表列表并将其插入工作表的特定区域

时间:2018-07-12 13:36:02

标签: excel excel-vba

我想在我的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")中?

5 个答案:

答案 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