martes, abril 14, 2009

Buenas y malas prácticas en Excel – Combinar celdas.

Uno de los blogs que leo con regularidad, Daily Dose of Excel, cita una entrada publicada en The Universe Divided sobre malas prácticas en Excel.

El tema no sólo es interesante e importante sino también controvertido. Suficiente con leer los comentarios en ambas notas para comprobarlo. Uno de los temas que no aparecen en la nota original pero que varios lectores mencionan en los comentarios es el de combinar y centrar celdas.

Según los diseñadores de Excel esta funcionalidad es tan importante que por defecto tiene un icono en la barra de herramientas de Formato





Veamos este ejemplo




Si queremos que el texto de la celda A1 sirva de encabezamiento de las columnas A hasta D, podemos seleccionar el rango y apretar el icono de combinar y centrar




Una mejor alternativa es usar Formato de Celdas-Alineación-Horizontal-Centrar en selección








Aparentemente el resultado con ambos métodos es el mismo. En la fila 1 hemos usado Combinar y centrar y en la fila 2 Centrar en selección. La diferencia es que con el primer método Excel borra el contenido de las celdas que se encuentran a la derecha de la primer celda del rango. De hecho, las celdas B1, C1 y D1 dejan de “existir”. En cambio, al usar Centrar en selección no alteramos la estructura de la hoja.


Entre los motivos por los cuales considero que Combinar y Centrar es una mala práctica en Excel se cuentan:


# - borrar datos inadvertidamente;


# - problemas al tratar de usar los datos en una tabla dinámica;


# - problemas que surgen al tratar de ordenar datos;


# - problemas que surgen al copiar dado que el pegado normal copia también el formato;


# - dificultades al escribir código de Vba



Mi recomendación usar Centrar en la selección y evitar totalmente usar Combinar y centrar.




Technorati Tags:

sábado, abril 11, 2009

Cronómetro para competencias con Excel.

Dado que Excel nos permite hacer cálculos con tiempo, la tentación de crear un cronómetro para medir tiempos en competencias es muy grande. Y efectivamente, se puede hacer, pero hay que tomar en cuenta algunas desventajas y defectos potenciales de crear un cronómetro con Excel. Sin entrar en detalles técnicos podemos decir que la principal desventaja es que Excel no fue creado para medir tiempos de competencias y por lo tanto no podemos garantizar la precisión de la medición.

Dicho esto, mostraremos en esta nota cómo construir con Excel un cronómetro par competencias.

Empezamos por crear una hoja donde registraremos los competidores y los tiempos.





En la fila 6 hemos puesto tres botones a los cuales le asociaremos macros, cuyo cometido explicaré más adelante.

En las files 8-9 usamos botones en lugar de texto en celdas para facilitar el código de las macros. Estos botones no están asociados a ninguna macro y sólo funcionan como encabezamientos de las columnas.

Nuestro modelo funciona de la siguiente manera:

En la columna A, a partir de la celda A10 introducimos los nombres de los participantes en la competencia.

Una vez registrados los participantes apretamos el botón “Largar”. La hora de largada (hora, minuto, segundos, milésimas de segundo) queda registrada en la celda B6. A medida que los competidores van llegando a la meta, hacemos un doble clic en la celda de la columna B a lado del nombre. Esto hace que en la celda se registre el momento de la llegada.
Una vez terminada la competencia se pulsa el botón Cerrar. Esto hará que la lista de competidores se ordene por orden de llegada y se calcule la diferencia respecto al primero.

Esta es la situación al terminar la competencia


Y ésta después de apretar el botón Cerrar



Todo el proceso puede verse en esta captura de pantalla


Este modelo funciona en base a la función Timer del Vba (Visual Basic for Applications, el lenguaje macro de Excel). La función Timer da la cantidad de segundos transcurridos desde la medianoche (00:00:00). Al apretar el botón Largar, registramos la cantidad de segundos transcurridos desde la medianoche y ponemos el dato en la celda B6. Pero previamente lo dividimos por 86400 para poder expresarlo como hora (hora, minutos, segundos y milésimas de segundo).

Un detalle importante: todas las celdas que contienen tiempos están formadas con este formato personalizado

hh:mm:ss.000

En un módulo común del editor de Vb ponemos este código y lo ligamos al botón Largar

Sub largada()
startTime = Timer
Range("B6") = startTime / 86400
End Sub


Para registrar el momento de llegada de cada competidor necesitamos dos herramientas: un evento que registre que hemos hecho un doble clic en la celda de llegada del competidor y una macro que calcule el momento y lo registre en la celda correspondiente.

El código del evento va en un módulo de la hoja. En el editor de Vb hacemos un doble clic sobre el icono de la hoja Competencia



y en el módulo que se abre ponemos este código

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Partic As Long, partList As Range

Partic = Range("A10").CurrentRegion.Rows.Count - 1

Set partList = Range(Range("A10").Offset(0, 1), _
Range("A10").Offset(Partic, 1))

If Union(Target, partList).Address = partList.Address And _
IsEmpty(Target) Then Call llegada
End Sub

La tarea de este código es detectar si hemos hecho un doble clic sobre alguna de las celdas de la columna B al lado del nombre de un competidor. Además el código controla que la celda esté vacía, es decir que no hayamos registrado el tiempo de llegada previamente. Si se cumplen ambas condiciones, se activa la macro “llegada”. La tarea de esta macro es registrar la hora de llegada y el tiempo transcurrido desde el comienzo de la competencia.

Esta macro va en un módulo común del editor de Vb y su código es:

Sub llegada()
Dim finalTime As Single
finalTime = Timer
ActiveCell = finalTime / 86400
ActiveCell.Offset(0, 1) = ActiveCell - Range("B6")
End Sub

Ahora necesitamos ligar una macro al botón Cerrar. Esta macro debe ordenar los competidores por orden de llegada y calcular las diferencias respecto al primero. El código de esta macro es:

Sub cierre_comp()

Dim Participantes As Long, iX As Long

On Error Resume Next
Range("A10").CurrentRegion.Sort Key1:=Range("C10"), Order1:=xlAscending, Header:= _
xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
On Error GoTo 0

'calcula la diferencia con el primero

Participantes = Range("A10").CurrentRegion.Rows.Count

For iX = 1 To Participantes - 1
Range("A10").Offset(iX, 3) = Range("A10").Offset(iX, 2) - _
Range("A10").Offset(0, 2)
Next iX
End Sub


Finalmente ligamos este código al botón Reset, para borrar todos los datos y poder comenzar una nueva competición:

Sub reset()
Range("B6").ClearContents
Range("A10").CurrentRegion.ClearContents
End Sub


Con esto hemos terminado de construir nuestro modelo.


Este modelo no es flexible, es decir, si cambiamos la estructura de la hoja al agregar o quitar filas o columnas, las macros dejarán de funcionar correctamente. Además no tiene ningún tipo de control para evitar entradas erróneas. Por ejemplo, necesitamos un control que impida largar la competencia si no se han introducido previamente la lista de competidores.

Un modelo flexible, que puede adaptarse al formato deseado, puede descargarse aquí. También incluye una hoja de instrucciones

domingo, abril 05, 2009

Corregir suma de porcentajes redondeados.

Cuando sumamos números que hemos redondeado suele presentarse el problema que, aparentemente, Excel no suma los números correctamente.

Supongamos que queremos repartir un bono entre distintos vendedores, de acuerdo a la parte proporcional de cada uno en el total de las ventas. Dado que somos expertos en Excel sólo nos toma unos momentos preparar el informe





Nuestro jefe nos pide que presentemos el informe con números enteros, prescindiendo de los centavos. Ningún problema! Ajustamos el formato de los números




Pero nuestro jefe tiene ojo de lince y advierte que el total de las sumas a distribuir en la columna D suman 9999! Esto por supuesto no es un “bug” de Excel ni tampoco un problema matemático. Sencillamente, la parte decimal oculta completa el 1 que nos está faltando.


Supongamos ahora que usamos la función REDONDEAR para hacer el ajuste de las sumas. También en este caso nos topamos con el problema



Hay varias formas de solucionar el problema y todo depende del gusto personal de cada uno (o del jefe de cada uno).


Una posibilidad es cargar la diferencia en forma arbitraria a alguno de los vendedores, por ejemplo al último de la lista. Hacemos esto poniendo en la celda del último vendedor la diferencia entre el total a repartir y el total de bonos repartidos a los demás vendedores



En la celda D8 ponemos la fórmula =D9-SUMA(D4:D7), donde D9 es el total a repartir y SUMA(D4:D7) el total de bonos repartidos exceptuando el último vendedor.
Esta fórmula se “autoajusta” y nos garantiza que siempre el total de las sumas redondeadas coincida con la suma a distribuir.


Otra posibilidad es usar una fórmula que asigne automáticamente la diferencia al vendedor con los mejores resultados, en nuestro caso José. Podemos hacer esto usando una columna auxiliar para determinar dinámicamente quién es el vendedor con los mejores resultados usando la función JERARQUIA



En las celdas en el campo Auxiliar (columna D) usamos la fórmula


=JERARQUIA(B4,$B$4:$B$8)


En el campo Distribución (columna E) usamos la fórmula


=REDONDEAR($B$1*C4,0)+(D4=1)


La primer parte de la fórmula calcula el bono del vendedor y lo redondea. La segunda parte controla si es el mejor vendedor (JERARQUIA =1) y en caso de ser cierto agrega 1.


Claro que esta solución es parcial y se aplica sólo al caso que la diferencia sea +1.

Para hacer esta solución más general podemos usar dos campos auxiliares. En el primero calculamos los bonos redondeados; en el segundo usamos JERARQUIA como en el caso anterior. Luego podemos usar la diferencia entre el total de Auxiliar 1 (celda D9) y bono a distribuir (celda B1) para ajustar el resultado poniendo la fórmula


=D4+((E4=1)*($B$1-$D$9))


en el campo Distribución (columna F)






Technorati Tags:

domingo, marzo 29, 2009

Algunos trucos con Autosuma en Excel

Todos conocemos el icono de Autosuma en Excel. Éste nos permite introducir la función SUMA con solo hacer un clic sobre él. Muchos de nosotros sabemos que este icono nos permite agregar muchas otras funciones




Si tenemos un rango de números contiguos (vertical u horizontalmente) y nos ubicamos en la primer celda libre por debajo (o a la derecha) del rango, al apretar Autosuma Excel reconoce automáticamente el rango y pone la fórmula. El rango automático siempre corre desde la última celda del rango (contigua a la celda libre donde queremos que aparezca la fórmula) y hasta la primer celda libre o la primera ocupada por una fórmula.


Si tenemos un rango con más de una columna, podemos totalizar las filas y las columnas con un solo clic a Autosuma. Seleccionamos el rango rectangular asegurándonos de incluir una fila y una columna en blanco



Al apretar Autosuma Excel pone las fórmulas correspondientes para las filas y las columnas



Otro truco interesante es el siguiente. Supongamos que tenemos esta serie de rangos de números, cada uno separado del otro por una fila libra



Con un solo clic podemos agregar un total para cada uno de los grupos. Empezamos por seleccionar los grupos dejando las celdas vacías fuera de la selección. Esto no lo haremos manualmente (supongamos que tenemos una gran cantidad de grupos) sino aplicando “Ir a” (Ctrl+G o F5). Seleccionamos toda la columna (o el rango adecuado) y usamos Ir A—Especial—Constantes—Números



Esto hará que sólo lo números sean seleccionados. Ahora apretamos el icono de Autosuma y veremos que Excel pone la fórmula en forma automática



Pero eso se pone más interesante cuando nos ponemos en la primer celda libre, en nuestro caso A15, y apretamos nuevamente Autosuma.


Excel selecciona automática las celdas que contienen la función SUMA y crea de hecho un suma de sumas



Si hay más de una fila libre entre cada grupo, este truco funciona parcialmente



Volvemos a los pasos anteriores (Ir A—Especial—Constantes—Números y apretar Autosuma) y veremos que Excel pone correctamente la función suma en la primer fila libre por debajo de cada grupo



Pero no podemos volver a aplicar Autosuma como en el caso anterior.




Technorati Tags:

jueves, marzo 26, 2009

Búsqueda de archivos en Office

Si trabajan, como yo, intensamente con Office de Microsoft (Excel, Word, Access, PowerPoint, etc.) posiblemente sufran del problema como encontrar dónde diablos guardamos ese archivo…

Los programas del Office tienen una herramienta, poco conocida en mi opinión, que nos permite ubicar archivos por texto y por palabras claves.

Por ejemplo, tengo varios archivos de Excel con tablas para campeonatos de fútbol. Tienen en común que el texto “tabla de posiciones” forma parte del nombre del archivo. Para ubicarlos apretamos el botón de “Abrir” de la barra de herramientas (o Archivo-Abrir)



En el extremo superior derecho pulsamos Herramientas y Buscar. También podemos acceder a través del menú Archivo



En Excel 2003 existen ciertas diferencias funcionales entre ambas posibilidades.
Usando el primer método se abre este formulario



En “buscar texto” ponemos el texto de búsqueda y Tipo de archivo seleccionamos Excel. Al pulsar “Ir” comenzará la búsqueda de los archivos. En mi máquina la búsqueda dio estos resultados



Una vez seleccionado el archivo, apretamos Aceptar para abrirlo.
Una posibilidad más avanzada es usar palabras claves. El requisito es incluir las palabras claves en el formulario Propiedades del archivo. Por ejemplo, en los archivos cuyo tema es facturación con Excel, he puesto la palabra clave “factura”



Abrimos Herramientas-Buscar y apretamos la pestaña Avanzada. En Propiedad elegimos Palabras clave, en Condición elegimos “incluye” y apretamos el botón “Agregar”. Como estamos usando una sola propiedad no hay necesidad de elegir entre las posibilidades “Y” u “O”.



Apretamos “Ir” y podremos ver el resultado de la búsqueda



Como puede apreciarse este método es muy flexible y permite búsquedas de acuerdo a muchos criterios.

El método Archivo-Buscar tiene una interfaz levemente distinta








Technorati Tags:

domingo, marzo 15, 2009

Ocultar valores cero en gráficos de Excel

En uno de los comentarios a mi nota sobre valores cero y vacíos en gráficos de Excel, me consulta una lectora cómo hacer para que estos valores no aparezcan en el gráfico.

Veamos esto con un ejemplo. Supongamos que llevamos una estadística sobre la ciudad de procedencia de turista y la queremos representar con un gráfico de columnas





De Murcia no han llegado turistas, pero de todas maneras aparece en el eje de las categorías (X). Lo que quiere mi lectora es una técnica para que las ciudades de las cuales no llegan turistas no aparezcan en el gráfico.


La solución que propongo en esta nota es usar tablas y gráficos dinámicos. Personalmente no me gustan los gráficos de las tablas dinámicas, pero en este caso nos resultan muy prácticos.


A partir de la tabla de turistas que mostramos más arriba creamos en una nueva hoja una tabla dinámica y su correspondiente gráfico




Por ahora este gráfico se ve tal como el anterior. Arrastramos el campo Turistas (el mismo que hemos puesto en el área de datos) al área de página




Seleccionamos con un clic el campo de página Turistas (en la celda A1) y abrimos el menú de configuración de campo. En la ventanilla Ocultar elementos marcamos el 0 y apretamos Aceptar




A partir de este momento, todas las ciudades con 0 turistas no aparecen en el gráfico




Finalmente podemos ocultar los botones de campo para que el gráfico parezca como un gráfico corriente de Excel






Technorati Tags:

sábado, marzo 14, 2009

Filtro Avanzado en hojas protegidas – una rareza de Excel

Aplicamos Proteger a una hoja de Excel para impedir que el usuario haga cambios o modificaciones en la hoja. Excel nos permite definir excepciones. Por ejemplo, permitir que el usuario pueda usar Autofiltro (a condición que el autofiltro haya sido aplicado antes de proteger la hoja) u Ordenar




Si aplicamos Proteger Hoja sin excepciones, la opción Filtro y Mostrar Todo del menú Datos aparecen deshabilitadas



Si nos fijamos bien veremos que la opción Filtro Avanzado sigue activa. Los programadores de Excel se han olvidado de bloquear esta opción.

Así podemos aplicar Filtro avanzado para filtrar todas las filas donde el valor de la celda en la columna A sea mayor de 2500 a pesar de que la hoja está protegida



Uno de los problemas que surgen es que si bien la opción Filtro Avanzado sigue activa, la opción Mostrar Todo está bloqueada. Es decir, podemos filtrar, pero no podemos quitar el filtro.

Para mostrar las filas ocultas sin tener que cancelar la protección basta con abril el diálogo del Filtro Avanzado y borrar el rango de los criterios.

Microsoft conoce este problema desde la versión 2000, y en la última nota publicado en la base de conocimientos de Excel , Advanced Filter May Function on Protected Worksheet, mencionan que por el momento (noviembre del 2003!) no hay forma de impedir la aplicación de Filtro Avanzado en una hoja protegida.

Una solución posible es proteger todas las celdas y no permitir seleccionar todas las celdas donde pudieran definirse criterios para filtro avanzado. De esta manera, si bien el diálogo del filtro avanzado se abrirá, no habrá posibilidad de definir un rango de criterios, lo que hace que todas las filas queden visibles.


Technorati Tags:

jueves, marzo 12, 2009

Valores vacíos y cero en gráficas de Excel

A pesar que las series de valores de estos gráficos parecen idénticas, los gráficos son distintos




En la primer serie de datos (Valores 1), las celdas A5 y A8 están vacías, es decir, no contienen ni valores ni fórmulas. En cambio la celdas A17 y A20 (serie Valores 2) si bien se las ve vacías, no lo están. La celda A17 contiene la fórmula =SI(A5<>0,A5,"").


Por ese motivo, en el primer gráfico la línea aparece discontinua y en el segundo la línea es continua y quebrada. Esto significa que Excel interpreta el resultado de la fórmula, (“”) como si fuera cero a pesar que en pantalla la celda aparece vacía.


Consideremos la serie Valores 1 y supongamos que queremos obtener una línea continua. Para lograrlo seleccionamos el gráfico y abrimos el menú Herramientas-Opciones. En la pestaña Gráfico seleccionamos la opción “Trazar Celdas vacías como…” --> Interpolar



La línea aparecerá ahora continua



En el caso de Valores 2 dado que las celdas A17 y A20 no están vacías, esta técnica no nos sirve. La solución consiste en cambiar la fórmula que genera los valores de la serie de


=SI(A5<>0,A5,"")


a


=SI(A5<>0,A5,NOD())


La función NOD() todo lo que hace es poner un valor de error #N/A en la celda. El resultado es



Si queremos que los valores #N/A no sean visibles podemos aplicar formato condicional dándole a la fuente el mismo color como el fondo de la celda






Technorati Tags:

lunes, marzo 09, 2009

Extraer palabras de una frase en Excel

Me llegó esta consulta: ¿cómo puedo extraer de una frase la cuarta palabra sin importar la cantidad de palabras en la frase? Por ejemplo, si en una celda tenemos la frase: “Cuántas palabras hay en esta frase” , cómo podemos extraer la tercer palabra, “hay”.

Chip Pearson trae una solución basada en funciones matriciales que desarrolló Laurent Longre.

Por ejemplo, si ponemos la frase mencionada en la celda A2 y en B2 el número de orden de la palabra a extraer, esta fórmula dará el resultado esperado

=EXTRAE(A2,K.ESIMO.MENOR(SI(EXTRAE(" "&A2,FILA(INDIRECTO("1:"&LARGO(A2)+1)),1)=" ",FILA(INDIRECTO("1:"&LARGO(A2)+1))),B2),SUMA(K.ESIMO.MENOR(SI(EXTRAE(" "&A2&" ",FILA(INDIRECTO("1:"&LARGO(A2)+2)),1)=" ",FILA(INDIRECTO("1:"&LARGO(A2)+2))),B2+{0;1})*{-1;1})-1)





Podemos extender la cuestión a cómo extraer de una frase una cadena de palabras a partir de una posición determinada.

Por ejemplo , en la celda A3 ponemos la frase “ En esta frase hay muchas más palabras que en la anterior”; si queremos extraer la cadena formado por las tres palabras a partir de la cuarta palabra en la frase (“hay”), usamos esta fórmula donde en B3 ponemos el número de orden la palabra del comienzo y en C3 la cantidad de palabras a extraer

=EXTRAE(A3,K.ESIMO.MENOR(SI(EXTRAE(" "&A3,FILA(INDIRECTO("1:"&LARGO(A3)+1)),1)=" ",FILA(INDIRECTO("1:"&LARGO(A3)+1))),B3),SUMA(K.ESIMO.MENOR(SI(EXTRAE(" "&A3&" ",FILA(INDIRECTO("1:"&LARGO(A3)+2)),1)=" ",FILA(INDIRECTO("1:"&LARGO(A3)+2))),B3+C3*{0;1})*{-1;1})-1)

Recordemos que éstas son funciones matriciales, es decir que deben ser introducidas apretando simultáneamente Ctrl+Mayúsculas+Enter



Con todo el respeto debido a Chip Pearson y a Laurent Longre (que lo tienen bien merecido), estas soluciones tienen dos problemas. El primero y más importante es que las funciones matriciales son muy “pesadas” y si se usan con cierta intensidad en una hoja el cálculo de la hoja (cada vez que cambia un dato) toma mucho tiempo. El segundo problema es que si hay más de un espacio entre las palabras de la frase o hay espacios al principio de la frase se obtienen resultados erróneos.


Mi propuesta es usar funciones definidas por el usuario (UDF). En mi primer intento escribí esta función que extrae una palabra determinada de la frase. La función tiene dos argumentos: la celda que contiene la frase y la posición de la palabra a extraer.


El código de la función es:


Function extraer_palabra(frase As Range, palabra As Integer)

Dim arrFrase As Variant

arrFrase = Split(WorksheetFunction.Trim(frase), " ")

extraer_palabra = arrFrase(palabra - 1)


End Function

Como ven, estoy usando la función TRIM de Excel y no la de Vba. Esto se debe a que ambas funciones no se comportan de la misma manera y sólo la de Excel quita todos los espacios dejando sólo uno entre cada palabra.



Como en el caso anterior, vamos a ampliar nuestra función de manera que podamos extraer una cadena de palabras de una frase en una celda. La función, “ extraer_palabra2”, tiene tres argumentos: la celda que contiene la frase, la posición de la primer palabra de la cadena a extraer y la cantidad de palabras a extraer.


El código de la función es:


Function extraer_palabra2(frase As Range, _
palabra1 As Integer, cuantas As Integer)

Dim arrFrase As Variant, iX As Long, temp



arrFrase = Split(WorksheetFunction.Trim(frase), " ")

extraer_palabra2 = arrFrase(palabra1 - 1)

For iX = palabra1 + 1 To palabra1 + cuantas - 1

extraer_palabra2 = extraer_palabra2 & " " & arrFrase(iX - 1)

Next iX

End Function



Por ejemplo, queremos extraer una cadena de cuatro palabras a partir de la tercera: “hay en esta frase



Obtenemos



Estas funciones podemos guardarlas en el cuaderno Personal.xls para que estén disponibles en todo momento.



Technorati Tags:

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: