Si no existe hoja "nombre", crearla, en VBA

21/07/2004 - 19:58 por Tito | Informe spam
Saludos al entrar en el grupo. He mirado los mensajes y no veo este asunto,
por eso lo abro: quiero saber cómo detectar por programa VBA si en un libro
xls existe una hoja con un "nombre" determinado.
En caso contrario, crearla.

Preguntas similare

Leer las respuestas

#6 Luis Garcia
22/07/2004 - 10:28 | Informe spam
"Tito" escribió en el mensaje
news:
Saludos al entrar en el grupo. He mirado los mensajes y no veo este


asunto,
por eso lo abro: quiero saber cómo detectar por programa VBA si en un


libro
xls existe una hoja con un "nombre" determinado.
En caso contrario, crearla.



Public function SHEET_Crear(NombreHoja as string) as WorkSheet
On error resume next
Set SHEET_Crear= worksheets(NombreHoja)
if SHEET_Crear is nothing then
set SHEET_Crear = worksheets.add()
SHEET_Crear.Name = NombreHoja
End if
End function

Saludos
Respuesta Responder a este mensaje
#7 Fernando Arroyo
22/07/2004 - 13:16 | Informe spam
"desi" escribió en el mensaje news:1d2701c46fc4$dcf01050$
[...]
la verdad es que yo tampoco la entiendo :D
pero funciona!!
fernando, podrias explicarnos tu codigo?? gracias!!


desi




Pienso que la forma en que trabaja el código es bastante sencilla: intenta obtener el valor de la celda IV65536 de NombreHoja, y la función IsError evalúa si lo devuelto es un error u otra cosa. Si es un error, es porque la hoja no existe (aunque también se produciría un error si existiera una hoja de gráficos que se llamara NombreHoja).

Lo que complica la comprensión del código supongo que será que la línea del If tiene la sintaxis más abreviada que conozco.

Para obtener el valor de la celda IV65536 desde VBA tenemos varias posibilidades:
Worksheets("NombreHoja").Cells(65536,256)
Worksheets("NombreHoja").Range("IV65536")
Sheets("NombreHoja").Cells(65536,256)
Sheets("NombreHoja").Range("IV65536")
Evaluate("=NombreHoja!IV65536")

La más corta de todas es la última, pero incluso ésta se puede reducir aún más en este caso, puesto que lo que queremos es una dirección que conocemos de antemano, lo que permite usar la forma abreviada:
[NombreHoja!IV65536]
que equivale al uso de la función Evaluate.
Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
#8 Leandro
22/07/2004 - 16:05 | Informe spam
Perdón Fernando, sigo sin comprender por qué para hacer
referencia al nombre de una hoja llamas a la celda IV65536.
El código funciona bien pero no comprendo

Saludos

"desi" escribió en


el mensaje news:1d2701c46fc4$dcf01050$
[...]
la verdad es que yo tampoco la entiendo :D
pero funciona!!
fernando, podrias explicarnos tu codigo?? gracias!!


desi




Pienso que la forma en que trabaja el código es bastante


sencilla: intenta obtener el valor de la celda IV65536 de
NombreHoja, y la función IsError evalúa si lo devuelto es
un error u otra cosa. Si es un error, es porque la hoja no
existe (aunque también se produciría un error si existiera
una hoja de gráficos que se llamara NombreHoja).

Lo que complica la comprensión del código supongo que


será que la línea del If tiene la sintaxis más abreviada
que conozco.

Para obtener el valor de la celda IV65536 desde VBA


tenemos varias posibilidades:
Worksheets("NombreHoja").Cells(65536,256)
Worksheets("NombreHoja").Range("IV65536")
Sheets("NombreHoja").Cells(65536,256)
Sheets("NombreHoja").Range("IV65536")
Evaluate("=NombreHoja!IV65536")

La más corta de todas es la última, pero incluso ésta se


puede reducir aún más en este caso, puesto que lo que
queremos es una dirección que conocemos de antemano, lo
que permite usar la forma abreviada:
[NombreHoja!IV65536]
que equivale al uso de la función Evaluate.
Un saludo.


Fernando Arroyo
MS MVP - Excel
.

Respuesta Responder a este mensaje
#9 Fernando Arroyo
23/07/2004 - 11:19 | Informe spam
Al ejecutar la línea

If IsError([NombreHoja!IV65536]) Then

lo que sucede es que se produce un error si no existe la hoja NombreHoja. Da lo mismo a qué celda se intente acceder. Yo puse IV65536 porque es la última de los casi diecisiete millones de celdas que tiene una hoja, y lo normal es que nunca esté ocupada. Hay que tener en cuenta que el código fallaría si la hoja NombreHoja realmente existiera pero la celda a la que se accede tuviera un valor de error, puesto que en ese caso IsError sería True. Ya sé que sería una casualidad enorme, pero esta casualidad es más difícil que se produzca con IV65536 que con, p.ej. A1
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Leandro" escribió en el mensaje news:200801c46ff4$e60ab020$
Perdón Fernando, sigo sin comprender por qué para hacer
referencia al nombre de una hoja llamas a la celda IV65536.
El código funciona bien pero no comprendo

Saludos

"desi" escribió en


el mensaje news:1d2701c46fc4$dcf01050$
[...]
la verdad es que yo tampoco la entiendo :D
pero funciona!!
fernando, podrias explicarnos tu codigo?? gracias!!


desi




Pienso que la forma en que trabaja el código es bastante


sencilla: intenta obtener el valor de la celda IV65536 de
NombreHoja, y la función IsError evalúa si lo devuelto es
un error u otra cosa. Si es un error, es porque la hoja no
existe (aunque también se produciría un error si existiera
una hoja de gráficos que se llamara NombreHoja).

Lo que complica la comprensión del código supongo que


será que la línea del If tiene la sintaxis más abreviada
que conozco.

Para obtener el valor de la celda IV65536 desde VBA


tenemos varias posibilidades:
Worksheets("NombreHoja").Cells(65536,256)
Worksheets("NombreHoja").Range("IV65536")
Sheets("NombreHoja").Cells(65536,256)
Sheets("NombreHoja").Range("IV65536")
Evaluate("=NombreHoja!IV65536")

La más corta de todas es la última, pero incluso ésta se


puede reducir aún más en este caso, puesto que lo que
queremos es una dirección que conocemos de antemano, lo
que permite usar la forma abreviada:
[NombreHoja!IV65536]
que equivale al uso de la función Evaluate.
Un saludo.


Fernando Arroyo
MS MVP - Excel
.

Respuesta Responder a este mensaje
#10 Leandro
23/07/2004 - 16:48 | Informe spam
ahora si comprendo.
Gracias!!!
Al ejecutar la línea

If IsError([NombreHoja!IV65536]) Then

lo que sucede es que se produce un error si no existe la


hoja NombreHoja. Da lo mismo a qué celda se intente
acceder. Yo puse IV65536 porque es la última de los casi
diecisiete millones de celdas que tiene una hoja, y lo
normal es que nunca esté ocupada. Hay que tener en cuenta
que el código fallaría si la hoja NombreHoja realmente
existiera pero la celda a la que se accede tuviera un
valor de error, puesto que en ese caso IsError sería True.
Ya sé que sería una casualidad enorme, pero esta
casualidad es más difícil que se produzca con IV65536 que
con, p.ej. A1
Un saludo.


Fernando Arroyo
MS MVP - Excel

"Leandro" escribió


en el mensaje news:200801c46ff4$e60ab020
$
Perdón Fernando, sigo sin comprender por qué para hacer
referencia al nombre de una hoja llamas a la celda


IV65536.
El código funciona bien pero no comprendo

Saludos

"desi" escribió en


el mensaje news:1d2701c46fc4$dcf01050$
[...]
la verdad es que yo tampoco la entiendo :D
pero funciona!!
fernando, podrias explicarnos tu codigo?? gracias!!


desi




Pienso que la forma en que trabaja el código es bastante


sencilla: intenta obtener el valor de la celda IV65536 de
NombreHoja, y la función IsError evalúa si lo devuelto es
un error u otra cosa. Si es un error, es porque la hoja


no
existe (aunque también se produciría un error si


existiera
una hoja de gráficos que se llamara NombreHoja).

Lo que complica la comprensión del código supongo que


será que la línea del If tiene la sintaxis más abreviada
que conozco.

Para obtener el valor de la celda IV65536 desde VBA


tenemos varias posibilidades:
Worksheets("NombreHoja").Cells(65536,256)
Worksheets("NombreHoja").Range("IV65536")
Sheets("NombreHoja").Cells(65536,256)
Sheets("NombreHoja").Range("IV65536")
Evaluate("=NombreHoja!IV65536")

La más corta de todas es la última, pero incluso ésta se


puede reducir aún más en este caso, puesto que lo que
queremos es una dirección que conocemos de antemano, lo
que permite usar la forma abreviada:
[NombreHoja!IV65536]
que equivale al uso de la función Evaluate.
Un saludo.


Fernando Arroyo
MS MVP - Excel
.



.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida