Saltar al contenido

Cómo saber si existe una tabla en una hoja


Recommended Posts

publicado

Hola compañeros,

Estoy tratando de crear un evento de tipo Worksheet_Activate de tal manera que cada vez que un usuario activa la hoja, el evento reconozca si existe una tabla dentro de la hoja activa (en caso contrario, insertar la tabla).

Se me ocurre algo así...

Private Sub Worksheet_Activate()

  Const HOJA As String = "CALENDARIO"
  Const TABLA As String = "CALENDARIO"

  Dim contador As Byte

	For contador = 1 To ActiveSheet.ListObjects.Count
		' Si la tabla no existe dentro de la hoja, entonces...
		If ActiveSheet.ListObjects(contador).Name <> TABLA Then
           	' Insertamos la nueva tabla...
           	ActiveSheet.ListObjects.Add(xlSrcRange, Sheets(HOJA).Cells(1, 1).CurrentRegion, , xlYes).Name = TABLA
           	MsgBox "La tabla se ha creado con éxito dentro de la " & HOJA & "."
        ' En caso contrario...
        Else	
			MsgBox "La tabla ya existe dentro de la " & HOJA & "."
        End If
     Next

End Sub

Pero este código no me funciona. Si me podéis echar una mano, os lo agradecería mucho.

Saludos.

publicado

Hola @paikerr, prueba así:

Private Sub Worksheet_Activate()

  Const HOJA As String = "CALENDARIO"
  Const TABLA As String = "CALENDARIO"
  Dim tbl As Object
  
  On Error Resume Next
  Set tbla = ActiveSheet.ListObjects(TABLA)
  
  If tbla Is Nothing Then
  
  ActiveSheet.ListObjects.Add(xlSrcRange, Sheets(HOJA).Cells(1, 1).CurrentRegion, , xlYes).Name = TABLA
            MsgBox "La tabla se ha creado con éxito dentro de la " & HOJA & "."
            
  Else
  
   MsgBox "La tabla ya existe dentro de la " & HOJA & "."
 
  End If
  
End Sub

Saludos

publicado

Hola a ambos!

Otra alternativa mas

Sub VerificarTabla()

Dim cel As Range
Set cel = Range("A1")

On Error GoTo error:
nom = cel.ListObject.Name
VBA.MsgBox "Si hay tabla"
Exit Sub
'GoTo ira:

error:
VBA.MsgBox "No hay tabla"

'ira:
Set cel = Nothing

End Sub

 

Saludos

publicado

Puestos a economizar:

Private Sub Worksheet_Activate(): On Error Resume Next
ActiveSheet.ListObjects.Add(xlSrcRange, Sheets("CALENDARIO").Cells(1, 1).CurrentRegion, , xlYes).Name = "CALENDARIO"
End Sub

 

publicado

Hola a todos,

Primeramente, muchas gracias por vuestros comentarios.

Al final hice esto (por si a alguien le sirve el código):

Function comprobarTabla(HOJA As String, TABLA As String) As Boolean

   ' Tratamos los errores de la función...
   On Error Resume Next

   ' Si no existe ninguna tabla, entonces...
   If Sheets(HOJA).ListObjects(TABLA) Is Nothing Then
      comprobarTabla = False
   ' En caso contrario...
   Else
      comprobarTabla = True
   End If

End Function
Private Sub Worksheet_Activate()

   ' Declaramos las constantes de ámbito local...
   Const HOJA As String = "CALENDARIO"
   Const TABLA As String = "CALENDARIO"

   ' Si no existe ninguna tabla, entonces...
   If comprobarTabla(HOJA, TABLA) = False Then
      ' Insertamos la tabla...
      ActiveSheet.ListObjects.Add(xlSrcRange, Sheets(HOJA).Cells(1, 1).CurrentRegion, , xlYes).Name = TABLA
   ' En caso contrario...
   Else
   End If

End Sub

Pero vamos... Cualquiera de vuestras respuestas es perfectamente válida.

Muchas gracias a todos.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.