25 de març del 2007

Macro Quitar Hipervínculos en columna con Excel

Cuántas veces importamos datos hacia Excel y después nos damos cuenta que llevan columnas enteras de datos con hipervínculos. Quitar todos esos hipervínculos puede llevar un largo tiempo, si haces la macro que te propongo desaparecerán en un momento.
Como sabes, una macro es un grupo de instrucciones que tienen un seguimiento cronológico usado para economizar tareas. Es decir, que cuando hemos de hacer una determinada tarea muchas veces, seguro que existe una forma más rápida para hacerlo. Las macros nos permiten grabar las acciones que realizamos para después repetirlas en el punto donde nos interese.
Todos los programas de Microsoft Office XP/2003 utilizan Visual Basic for Applicarions (VBA) para grabar las macros, con lo que si sabes un poco de Visual Basic podrás modificar y mejorar los códigos.
En mi caso, no soy programador, aunque sí sé un poco de VBA y me atrevo a modificar las macros. En todo caso, es conveniente aclarar, que como no soy programador ni experto en Visual Basic, seguro que hay formas mejores de hacer estas macros. Yo planteo la forma que a mí me ha ido bien.



Abrimos el archivo de excel y añadimos los datos importados de la manera como lo hagáis normalmente.
Antes de empezar a grabar la macro nos situamos en una celda que tenga un hipervínculo y vamos al menú Herramientas, Macro, Grabar nueva macro.
Ponemos el nombre que queramos a la macro, pero hemos de vigilar dónde guardamos la macro. Si queremos poder utilizarla contra cualquier archivo de Excel con el que estemos trabajando la guardaremos en el Libro de Macros personal. Esto hará que se cree un libro llamado personal.xls dentro de la carpeta XLSTART.
Por tanto, cada vez que abramos Excel se abrirá el libro, aunque debería hacerlo de forma oculta, es decir, que no lo veremos si no vamos al menú Ventana, Mostrar.
En la Descripción podemos ponerle un resumen de lo que hace la macro (no hace falta poner nada).
Pulsamos en Aceptar.
ATENTOS!!!! Todo lo que hagáis a partir de ahora lo grabará la macro, por tanto, debéis hacer sólo los pasos necesarios, ninguno más. En el caso de que cometáis un pequeño error no pasa nada, normalmente es fácil borrarlo de la macro.
Los pasos que debéis seguir para grabar la macro son:

  • En la barra de herramientas de Grabar Macro haz clic en el botón Referencia Relativa .
  • Esto hará que la macro no guarde los clics en celdas concretas.
  • Clic con el botón derecho sobre la celda seleccionada
  • Escoge la opción Quitar hipervínculo.
  • Apretar la flecha de desplazamiento hacia abajo una vez.
  • Finaliza la macro haciendo clic en el botón Detener de la barra de herramientas.

Abre el Editor de Visual Basic desde el menú Herramientas, Macro, Editor de Visual Basic o apretando la combinación de teclado Alt+F11.

Como puedes ver, la macro lo único que ha grabado ha sido las instrucciones:

Selection.Hyperlinks.Delete
ActiveCell.Offset(1, 0).Range("A1").Select

encuentre una celda en blanco.
Modifica la macro para que tenga el código siguiente:

While ActiveCell.Value <> ""
Selection.Hyperlinks(1).Delete
ActiveCell.Offset(1, 0).Range("A1").Select
Wend

La instrucción While – Wend nos permite hacer una bucle en el que se repitan una serie de acciones mientras se cumpla la condición, en este caso ActiveCell.Value <> ""

Ya tenemos la macro hecha. Si la pruebas ahora verás que te quita todos los hipervínculos de una columna hasta encontrar una celda vacía.

Recuerda que puedes ejecutar la macro desde Herramientas, Macro, Macros.

Esta macro sólo funciona si la celda que tienes seleccionada tiene un hipervínculo. Te has de acordar de hacer clic en el primer hipervínculo antes de ejecutarla. La instrucción que vamos a añadir a la macro nos va recordar este hecho, de manera que si no estamos en el primer hipervínculo podremos salir sin que la macro dé un mensaje de error.
El código final quedaría así:

Dim mensaje As String

mensaje = MsgBox("La celda activa tiene que ser la primera celda con hipervínculo",
vbOKCancel, "Atención!")
If mensaje = vbOK Then
While ActiveCell.Value <> ""
Selection.Hyperlinks(1).Delete
ActiveCell.Offset(1, 0).Range("A1").Select
Wend
Else
End If
End Sub

Hasta pronto!!!