PDF de programación - Curso de programación en VBA para Excel - Capítulo 2. Celdas, rangos, libros y hojas

<<>>
Imágen de pdf Curso de programación en VBA para Excel - Capítulo 2. Celdas, rangos, libros y hojas

Curso de programación en VBA para Excel - Capítulo 2. Celdas, rangos, libros y hojasgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 11 de Marzo del 2018)
674 visualizaciones desde el 11 de Marzo del 2018
248,7 KB
6 paginas
Aula Macedonia

Curso de Programación en VBA para Excel

Artículo realizado por
Iñaki Ecenarro. 

Capítulo 2. Celdas, rangos, libros y hojas.

En  este  capítulo  vamos  a  aprender  un  poco  más  sobre  cómo  hacer  referencia  a  celdas,  rangos,  hojas  y  libros.
Supongo  que  todos  estos  conceptos  están  claros,  que  todo  el  mundo  sabe  lo  que  es  una  celda  o  un  rango,  o  la
diferencia entre un libro y una hoja.

Todos los ejemplos de este capítulo están incluídos en este fichero: Excel2.xls
(39kbs)

Bueno, para entrar en calor vamos a hacer una pequeña rutina que pida al usuario un valor y luego sume ese valor a
la celda activa.

Sub Sumar_A_Celda()
Dim i As Double

If MsgBox("Esta macro pide al usuario
un valor y lo suma a la celda activa.", _
vbOK, "Sumar a celda") = vbCancel Then Exit Sub
i = Val(InputBox("Importe a sumar: ", "Sumar a celda activa"))
ActiveCell.Value = ActiveCell.Value + i
End Sub

La primera línea es la declaración de la variable "i". Ya hemos comentado anteriormente lo que es la declaración de
variables, lo único nuevo es el tipo de variable (double). Cuando declaramos una variable hay que indicar qué tipo de
variable queremos que sea. Los tipos de variables más importantes son:

Integer
Long
Boolean
Single
Double
String
Date

Un valor entero, entre ­32.768 y 32.767
Un valor entero, entre ­2.147.483.648 y 2.147.483.647
Verdadero y Falso
Un valor con decimales, con precisión simple
Un valor con decimales, con precisión doble
Un cadena de caracteres
Una fecha

Object

Variant

Referencia a cualquier tipo de objeto de Excel

Un variable que puede cambiar de tipo

En  este  caso  declaramos  la  variable  como  Double,  por  si  acaso  al  usuario  se  le  ocurre  meter  un  valor  con
decimales.

Siguiendo con nuestra rutina, primero presentamos al usuario un pequeño mensaje diciendo lo que vamos a hacer.
Esto está explicado en la entrega anterior, no creo que necesite nada más. Si el usuario pulsa "Cancelar", salimos
de la rutina y no hacemos nada.

En la siguiente línea obtenemos del usuario el valor que quiere sumar a la celda activa. La función InputBox ya la
hemos visto antes, obtiene del usuario una entrada, pero en formato de cadena de caracteres. Como nosotros lo que
queremos  es  un  valor  numérico,  utilizamos  la  función  Val()  para  convertir  la  cadena  de  caracteres  proveniente  de
InputBox en un número. Lo ponemos todo en la misma línea, pero también se podía haber escrito en dos líneas:

Dim s as String
s = InputBox("Importe a sumar: ", "Sumar a celda activa")
i = Val(s)

Bueno, seguramente queda más claro que de la otra forma, pero normalmente se escribe de la primera forma. Cada
uno que lo escriba como quiera, tampoco tiene demasiada trascendencia.

La  última  línea  es  la  que  hace  realmente  la  suma,  dando  valor  a  la  propiedad  Value  de
ActiveCell. Ya hemos visto en la entrega anterior lo que es ActiveCell. Una aclaración sobre
ActiveCell y ActiveSheet (que también vimos en la entrega anterior): en realidad, ActiveCell no
es  un  objeto,  sino  que  es  una  "propiedad"  de  un  objeto  especial  llamado  Application,  pero
cuando 
escribiendo
"Application.ActiveCell". Application es un objeto que representa la aplicación Excel completa.
A  través  de  Application  se  puede  acceder  a  todas  las  opciones  de  la  aplicación  (las  que
podemos  cambiar  a  través  de  Herramientas,  Opciones),  acceder  a  las  funciones  de  hoja  de  cálculo  (SUMA,
PROMEDIO,  etc)  y  también  podemos  obtener  objetos  que  referencian  a  la  celda  activa  (ActiveCell),  la  hoja  activa
(ActiveSheet), el libro activo (ActiveWorkbook), etc.

"ActiveCell" 

escribimos 

Excel 

entiende 

que 

estamos 

Un pequeño ejemplo del uso del objeto Application: para mostrar y ocultar la barra de estado (la que aparece en la
parte de abajo, debajo de las etiquetas de las hojas), podemos usar el siguiente código:

Para ocultar la barra de estado:
Application.DisplayStatusBar = False
Para volver a mostrar la barra de estado:
Application.DisplayStatusBar = True

El objeto Application tiene un montón de propiedades y métodos, que están muy bien explicados en la ayuda de
Excel, y su uso es bastante sencillo.

Siguiendo  con  la  última  línea  de  la  rutina,  podrás  comprobar  que  utilizamos  la  propiedad  Value  de  ActiveCell.  Si
hubiésemos utilizado la propiedad Formula en lugar de Value, la rutina tendría que ser un poco distinta. Utilizando
Value, estamos dando a la celda activa un valor directamente, es decir, si miras el contenido de la celda verás que
no hay ninguna fórmula; la suma la ha hecho nuestra rutina, y ha puesto en la celda el resultado de dicha suma.

Sin  embargo,  si  queremos  que  la  fórmula  de  la  suma  quede  en  la  celda  debemos  usar  la  propiedad  Formula.  La
propiedad Formula es una "cadena de carácteres", que incluye todo lo que se escribiría normalmente en una celda
de una hoja de cálculo para introducir una fórmula (incluyendo el signo "=" al principio). Por ejemplo, si queremos
que poner en la celda A2 una fórmula que nos de el doble del valor de la celda A1, haremos:

Range("A2").Formula = "=A1*2"

Como  es  una  cadena  de  caracteres,  hay  que  rodearla  con  comillas  dobles,  y  entre  éstas  ponemos  la  fórmula  tal
como lo haríamos en la hoja de cálculo. Tras esta explicación, si queremos cambiar nuestra rutina para introducir la
fómula de suma en la celda, nuestro primer intento sería escribir:

ActiveCell.Formula = ActiveCell.Formula + i

Si ejecutamos este código veremos que el resultado puede variar dependiendo de lo que contenga la celda activa:

Si la celda activa contiene un número (no una fórmula), el resultado es el mismo que antes. La razón es que
como  no  hay  ninguna  fórmula  ActiveCell.Formula  devuelve  un  número,  igual  que  ActiveCell.Value.  Luego  le
sumamos nuestro valor y asignamos el valor resultante como fórmula de la celda.

Si la celda activa contiene una fórmula, el resultado es que la macro se para con un error. Esto es debido a
que  ActiveCell.Fórmula  nos  devuelve  una  cadena  de  caracteres  (por  ejemplo,  la  cadena  "=A1*2"),  y  luego
estamos intentando sumar un número (i) a una cadena de caracteres, cosa que evidentemente no se puede
hacer y Excel nos da un error de tipos de datos incompatibles.

Para  conseguir 
ActiveCell.Formula una cadena de caracteres con una fórmula escrita correctamente. Vamos a intentarlo:

lo  que  realmente  queremos  (introducir  una 

fórmula  en 

la  celda),  debemos  asignar  a

ActiveCell.Formula = ActiveCell.Formula & "+" & i

El operador & ya lo vimos en la primera entrega, se utiliza para concatenar cadenas de caracteres. Partimos de la
fórmula  que  actualmente  tiene  la  celda  activa  (por  ejemplo,  "=A1*2")  y  luego  le  añadimos  un  signo  "+"  y  luego
nuestro valor (i), con lo que la fórmula pasará a ser "=A1*2+3" (si i tiene el valor 3).

El problema que se nos presenta ahora es que si en la celda activa no hay una celda, sino un valor (por ejemplo, 2),
nosotros asignaremos a ActiveCell.Formula la cadena "2+3" (si i tiene el valor 3). ¿Veis el error? Evidentemente el
error  es  que  falta  el  signo  "="  al  principio  de  la  fórmula  para  decirle  a  Excel  que  es  una  fórmula.  O  sea  que
deberíamos añadir delante de la fórmula un "=", lo que podemos hacer de la siguiente forma:

ActiveCell.Formula = "=" & ActiveCell.Formula & "+" & i

¿Cuál es el problema ahora? Pues que si la celda activa tiene una fórmula nos encontramos con que nuestra fórmula
definitiva tiene dos signos "=" al principio, uno el que ya tenía y otro el que le hemos puesto nosotros. El resultado
es que introducimos una fórmula incorrecta y Excel nos vuelve a dar un error.

Bueno, creo que he montado un pequeño lío, pero en realidad no tiene ninguna dificultad. Lo que hay que hacer es
comprobar si en la celda activa hay una fórmula (esto se puede hacer mirando si el primer carácter es el signo "=",
utilizando por ejemplo la función Left). Si hay una fórmula, sólo añadimos la parte del final, y si no hay una fórmula
añadimos primero un signo "=" y luego la parte del final. Esto queda como ejercicio, y si no te sale me escribes y lo
comentamos.

Pues  aparte  de  todo  este  lío  ya  lo  hemos  visto  todo.  Si  ejecutas  la  rutina  Sumar_A_Celda()  comprobarás  que
primero te pide un valor y luego suma ese valor a la celda activa. Por cierto, que nadie piense que esta macro es
ninguna maravilla, porque lo mismo que hace se puede hacer más rápido utilizando "Pegado especial..", que además
es capaz de restar, multiplicar y dividir. Ya llegaremos a eso también, pero para ir aprendiendo un poco no nos viene
mal.

Ahora vamos a avanzar otro paso: la rutina anterior sumaba un valor a la celda activa, y ahora vamos a sumar ese
valor a todo el rango que seleccione el usuario. Como siempre, aquí va la rutina completa, luego la explicamos:

Sub Sumar_A_Rango()
Dim i As Double

suma a todas las celdas " & _

Dim h As Object

If MsgBox("Esta macro pide al usuario un valor y lo

Chr(13) & "del rango seleccionado.", vbOK, "Copiar

= vbCancel Then Exit Sub
i = Val(InputBox("Importe a sumar: ", "Sumar a rango seleccionado"))
For Each h In Selection.Cells
h.Value = h.Value + i
Next h
End Sub





celda izquierda") _

Lo primero que hacemos es declarar las variables. La primera variable (i), es de tipo Double, al igual que en la rutina
anterior. La segunda variable (h) la declaramos como una variable de tipo Object, para que apunte a cualquier tipo de
objeto de Excel (una hoja, un rango, una celda, etc.)

Las  dos  siguientes  líneas  son  iguales  que  antes:  primero  presentamos  un  pequeño  mensaje  al  usuario,  y  luego
obtenemos el valor y convertimos la cadena a un valor numérico.

En  las  tres  siguientes  líneas  está  todo  lo  nuevo.  Vamos
  • Links de descarga
http://lwp-l.com/pdf9421

Comentarios de: Curso de programación en VBA para Excel - Capítulo 2. Celdas, rangos, libros y hojas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad