lunes, marzo 02, 2009

Como definir un icono para agregar una hoja en Excel

Me considero una persona modesta. Es decir, alguien que se conforma con poco, con lo que hay. Tal vez por eso me sorprende encontrar de tanto en tanto, en particular en ciertos foros, gente que se queja de Excel.
Es verdad, hay ciertos aspectos de Excel que pueden volverse molestos, ciertas funcionalidades que faltan o cosas que no funcionan como quisiéramos. Pero por otra parte Excel nos ofrece suficientes herramientas para corregir, aunque se parcialmente, estas situaciones. Un ejemplo mostramos ayer en la nota sobre cómo agregar un icono para cancelar el autofiltro.

Otra funcionalidad que encuentro un tanto molesta en Excel es cuando agregamos una hoja a un cuaderno (en particular por mi mala costumbre de no planear el diseño del cuaderno de antemano y verme obligado a agregar hojas a medida que el proyecto avanza).

En Excel 2003 (y versiones anteriores hasta Excel 97, si no me equivoco) podemos agregar una hoja con uno de estos métodos:

# - abriendo el menú insertar en la pestaña de la hoja





# - con el icono del comando Insertar hoja de cálculo (que podemos arrastrar y ubicar en alguna de las barras de herramientas)



El problema con estos métodos es que no tenemos control de donde será ubicada la hoja. Lo natural sería que a la derecha de la última, pero no es esto lo que sucede. Por algún motivo Excel pone la nueva hoja a la izquierda de la hoja activa. Además, Excel pone un nombre por defecto. Mi idea es que Excel inserte la nueva hoja a la izquierda de la última del cuaderno y que nos invite a poner el nombre antes de crearla.


Para hacer esto usaremos una macro que luego ligaremos al icono de insertar hoja de cálculo. La macro la guardamos en el cuaderno Personal.xls, para que esté disponible para todo cuaderno de Excel con el cual estemos trabajando.


El código de nuestra macro es:


Sub agregar_hoja_con_nombre()
'02/03/2009 by Jorge Dunkelman

Dim shName As String

If ActiveWorkbook Is Nothing Then Exit Sub

shName = Application.InputBox(prompt:="Nombre de la hoja?", Title:="Nombre", _
Type:=2)

Select Case shName
Case Is = "False"
MsgBox "No se ha insertado una hoja"
Exit Sub
Case Is = ""
Sheets.Add after:=Sheets(Sheets.Count)
Case Else
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = shName
End Select

End Sub


Al correr la macro comprueba en primer lugar si hay un cuaderno abierto (de lo contrario no hay donde agregar la hoja!). Luego se abre una ventanilla donde se nos pide definir el nombre de la hoja. En caso de dejarlo en blanco se insertará una hoja con el nombre por defecto (Hoja4, Hoja5, etc.); en caso de apretar Cancelar aparecerá un mensaje diciendo que no se ha insertado la hoja y en caso de poner un valor éste aparecerá en la pestaña de la hoja.


La hoja siempre se inserta a la derecha de la última hoja del cuaderno sin tomar en cuenta cuál era la hoja activa en ese momento.

Estamos usando el método InputBox (y no la función InputBox de Vba), para poder distinguir cuando el usuario aprieta Cancelar de cuando deja el nombre en blanco.


Ahora sólo nos queda por crear el icono y agregarlo a alguna de las barras. Podemos crear un icono de la categoría macro (como vimos en la nota anterior) y luego cambiar la imagen copiándola del icono de insertar hoja que existe en Excel.

Para hacer esto abrimos el menú Herramientas-Personalizar y usamos Copiar imagen




Luego elegimos el icono que acabamos de crear y pegamos la imagen (y por supuesto, lo ligamos a la macro que guardamos en el cuaderno Personal.xls)


La técnica para crear el icono en Excel 2007 está explicada en esta nota.


Technorati Tags:

8 comentarios:

  1. Maestre necesito una pequeña ayudita con un problema que tengo.
    Quiero saber como se pued extraer una palabra de una oracion, por ejemplo:

    EL arbol tiene manzanas rojas

    -despues coloco (*) para identificar los espacios entre palabras, y quedaria asi-

    El*arbol*tiene*manzanas*rojas

    Como puedo extraer la 4ª palabra en este caso "manzanas", sin importar el largo de esta ya que podria ser otra palabra pero mas corta. Ya lo intente de mil maneras y no puedo dar con la solucion. en ontras palabras necesito una formula a la que le pueda decir la posicion de la palabra que busco y que me extraiga lo que esta despues del asterisco(*) sin extraer lo que esta despues del siguiente asterisco(*).

    Espero haberme explicado Maestre.

    Saludos y gracias por ensenñarnos tanto!!!

    ResponderBorrar
  2. Contenido interesante para acudir más a menudo; pero la velocidad del host de vuestro blog, hay días que puede llegar a desesperar.

    lo remarco, porque realmente es una pena.

    atte

    ResponderBorrar
  3. Si, lamentable, Hasta ahora la velocidad era más que razonable, pero en los últimos días se nota una caida imprtante. Espero que la gente de Blogger solucione el problema.

    ResponderBorrar
  4. Carlos
    la consulta no esé relacionada con el tema de la nota, pero es interesante. En algunos días estaré publicando una nota sobre el tema.

    ResponderBorrar
  5. EsTimado Jorge:
    Hay un metodo para agregar un hoja y ponerla donde prefieras, es manter el boton de control sostenido y darle click sostenido sobre la ultima hoja y arrastrarn el mouse a la posición que desees, saldra un signito de (+.

    Saludos.

    ResponderBorrar
  6. Gracias por el aporte. Ese método copia la hoja que arrastramos, no crea una nueva. Es un buen método para crear "backups" de una hoja antes de ordenarla, hacer cambios en fórmulas, etc.

    ResponderBorrar
  7. Estimado Jorge:

    Tengo la siguiente duda: es posible que en vez de crear una hoja en blanco, con esta macro copie una hoja "modelo" y la ubique en la última posición? Mi idea es generar un libro de Excel en el que operadores creen hojas para cada día del mes, y que cada hoja tenga una tabla en blanco por defecto.

    Agradecido de antemano de toda la ayuda que me ha brindado tu blog,

    ResponderBorrar
  8. Braulio,
    la respuesta es si. Puedes crear una hoja "modelo" y escribir un código para copiarla poniéndola en la última posición (esa parte del código la puedes copiar del que aparece en esta nota).
    Una pregunta, ¿estás seguro que quieres crear una hoja por día? Por lo general es preferible poner todas los datos en una única hoja lo que permite generr reportes con facilidad (tablas dinámicas) y evita problemas de consolidación de datos.

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.