如何在所有Excel工作表的末尾添加命名工作表?

Beh*_*ini 64 excel vba worksheet

我试图在所有现有工作表的末尾添加一个名为"Temp"的Excel工作表,但此代码不起作用:

Private Sub CreateSheet()
    Dim ws As Worksheet
    ws.Name = "Tempo"
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
End Sub
Run Code Online (Sandbox Code Playgroud)

你能告诉我为什么吗?

L42*_*L42 140

试试这个:

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets.Add(After:= _
             ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    ws.Name = "Tempo"
End Sub
Run Code Online (Sandbox Code Playgroud)

或者使用一个With子句来避免反复调出你的对象

Private Sub CreateSheet()
    Dim ws As Worksheet
    With ThisWorkbook
        Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
        ws.Name = "Tempo"
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

如果您不需要在其余代码中调出相同的工作表,则可以进一步简化上述内容.

Sub CreateSheet()
    With ThisWorkbook
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

  • ThisWorkbook是托管正在运行的宏的工作簿.ActiveWorkbook是用户工作的工作簿(简单地说).WorkBooks("somename")解决了特定的打开工作簿 (11认同)

Ama*_*mar 32

请使用这一个班轮:

Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"
Run Code Online (Sandbox Code Playgroud)


Sap*_*shi 6

ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"
Run Code Online (Sandbox Code Playgroud)

(当你添加一个工作表时,无论如何它都是活动表)


小智 5

试试这个:

Public Enum iSide
iBefore
iAfter
End Enum
Private Function addSheet(ByRef inWB As Workbook, ByVal inBeforeOrAfter As iSide, ByRef inNamePrefix As String, ByVal inName As String) As Worksheet
    On Error GoTo the_dark

    Dim wsSheet As Worksheet
    Dim bFoundWS As Boolean
    bFoundWS = False
    If inNamePrefix <> "" Then
        Set wsSheet = findWS(inWB, inNamePrefix, bFoundWS)
    End If

    If inBeforeOrAfter = iAfter Then
        If wsSheet Is Nothing Or bFoundWS = False Then
            Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = inName
        Else
            Worksheets.Add(After:=wsSheet).Name = inName
        End If
    Else
        If wsSheet Is Nothing Or bFoundWS = False Then
            Worksheets.Add(Before:=Worksheets(1)).Name = inName
        Else
            Worksheets.Add(Before:=wsSheet).Name = inName
        End If
    End If

    Set addSheet = findWS(inWB, inName, bFoundWS)         ' just to confirm it exists and gets it handle

    the_light:
    Exit Function
    the_dark:
    MsgBox "addSheet: " & inName & ": " & Err.Description, vbOKOnly, "unexpected error"
    Err.Clear
    GoTo the_light
End Function
Run Code Online (Sandbox Code Playgroud)


Dev*_*per 5


尝试切换代码的​​顺序。您必须首先创建工作表才能为其命名。

Private Sub CreateSheet()
    Dim ws As Worksheet
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
    ws.Name = "Tempo"
End Sub
Run Code Online (Sandbox Code Playgroud)

谢谢,