variable - seleccionar hoja activa excel vba
Cómo agregar una hoja con nombre al final de todas las hojas de Excel (8)
Este es un complemento rápido y simple de una pestaña con nombre a la hoja de trabajo actual:
Sheets.Add.Name = "Tempo"
Estoy intentando agregar una hoja de Excel con el nombre "Temp" al final de todas las hojas existentes pero este código no funciona
Private Sub CreateSheet()
Dim ws As Worksheet
ws.Name = "Tempo"
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
End Sub
¿Podrías decirme por qué? Gracias
Esto le dará la opción de:
- Sobrescribir o conservar una pestaña que tiene el mismo nombre.
- Coloque la hoja al final de todas las pestañas o al lado de la pestaña actual.
- Seleccione su nueva hoja o la activa.
Call CreateWorksheet("New", False, False, False)
Sub CreateWorksheet(sheetName, preserveOldSheet, isLastSheet, selectActiveSheet)
activeSheetNumber = Sheets(ActiveSheet.Name).Index
If (Evaluate("ISREF(''" & sheetName & "''!A1)")) Then ''Does sheet exist?
If (preserveOldSheet) Then
MsgBox ("Can not create sheet " + sheetName + ". This sheet exist.")
Exit Sub
End If
Application.DisplayAlerts = False
Worksheets(sheetName).Delete
End If
If (isLastSheet) Then
Sheets.Add(After:=Sheets(Sheets.Count)).Name = sheetName ''Place sheet at the end.
Else ''Place sheet after the active sheet.
Sheets.Add(After:=Sheets(activeSheetNumber)).Name = sheetName
End If
If (selectActiveSheet) Then
Sheets(activeSheetNumber).Activate
End If
End Sub
Prueba esto:
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
ws.Name = "Tempo"
End Sub
O use una cláusula With
para evitar gritar repetidamente su objeto
Private Sub CreateSheet()
Dim ws As Worksheet
With ThisWorkbook
Set ws = .Sheets.Add(After:=.Sheets(.Sheets.Count))
ws.Name = "Tempo"
End With
End Sub
Más arriba se puede simplificar aún más si no necesita llamar en la misma hoja de cálculo en el resto del código.
Sub CreateSheet()
With ThisWorkbook
.Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "Temp"
End With
End Sub
Prueba esto:
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
Tratar de usar:
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = "MySheet"
Si desea verificar si ya existe una hoja con el mismo nombre, puede crear una función:
Function funcCreateList(argCreateList)
For Each Worksheet In ThisWorkbook.Worksheets
If argCreateList = Worksheet.Name Then
Exit Function '' if found - exit function
End If
Next Worksheet
Worksheets.Add (After:=Worksheets(Worksheets.Count)).Name = argCreateList
End Function
Cuando se crea la función, puede llamarla desde su Sub principal, por ejemplo:
Sub main
funcCreateList "MySheet"
Exit Sub
Utilice este trazador de líneas:
Sheets.Add(After:=Sheets(Sheets.Count)).Name = "new_sheet_name"
Intenta cambiar el orden de tu código. Primero debe crear la hoja de cálculo para nombrarla.
Private Sub CreateSheet()
Dim ws As Worksheet
Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
ws.Name = "Tempo"
End Sub
Gracias,
ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "XYZ"
(cuando agrega una hoja de trabajo, de todos modos será la hoja activa)