xlup variable ultima seleccionar rango nombre macro hoja hasta end desde datos copiar con celda asignar activesheet activa vba excel-vba excel

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:

  1. Sobrescribir o conservar una pestaña que tiene el mismo nombre.
  2. Coloque la hoja al final de todas las pestañas o al lado de la pestaña actual.
  3. 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)