PDF de programación - Curso de programación en VBA para Excel - Capítulo 4. Cuadros de diálogo (Userforms). Segunda parte.

<<>>
Imágen de pdf Curso de programación en VBA para Excel - Capítulo 4. Cuadros de diálogo (Userforms). Segunda parte.

Curso de programación en VBA para Excel - Capítulo 4. Cuadros de diálogo (Userforms). Segunda parte.gráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 11 de Marzo del 2018)
731 visualizaciones desde el 11 de Marzo del 2018
312,5 KB
11 paginas
Aula Macedonia

Curso de Programación en VBA para Excel

Artículo realizado por
Iñaki Ecenarro. 

Capítulo 4. Cuadros de diálogo (Userforms). Segunda parte.

Seguimos con los UserForms y los controles. En esta entrega vamos a ampliar el diálogo sobre datos personales,
añadiéndole  más  opciones,  y  vamos  a  crear  dos  nuevos  userforms:  uno  para  convertir  de  pesetas  a  euros  y
viceversa,  y  otro  para  hacer  operaciones  (sumar,  restar...)  sobre  un  rango  seleccionado  (algo  parecido  a  lo  que
hicimos antes, pero más completo).

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

Primero  vamos  a  volver  a  hacer  un  diálogo  de  "Datos Personales"  como  el  de  la  entrega  anterior,  pero  añadiendo
algunas cosas. Partimos del userform de la entrega anterior, que tenía un cuadro de edición para el nombre y otro
para el apellido, y los dos botones clásicos (Aceptar y Cancelar).

Habíamos escrito el código necesario para que al abrirse el diálogo (evento Initialize del Userform) los cuadros de
edición  se  llenen  con  el  texto  de  las  celdas  de  la  hoja  de  cálculo,  y  también  para  que  cuando  el  usuario  pulse
Aceptar (evento Click del botón) se copie el texto de los cuadros de edición a la hoja de cálculo. Para hacer estos
traspasos  entre  la  hoja  de  cálculo  y  el  Userform  habíamos  escrito  un  par  de  líneas  de  código  en  los  eventos
indicados, pero vamos a ver que hay otro método para hacerlo:

Todos los controles tienen la propiedad "ControlSource", que se utiliza para decirle al control cuál es la "fuente" de
su  información,  que  será  una  celda  o  un  rango  de  una  hoja  de  cálculo.  Por  ejemplo,  en  el  cuadro  de  edición  del
Nombre podemos poner como ControlSource la celda de la hoja de cálculo en la que está ese dato. Como siempre,
no vamos a utilizar referencias absolutas a celdas y rangos (p.ej. Hoja1!A5), sino que vamos a utilizar nombres de
rango. Por ejemplo, vamos a la hoja de cálculo y damos a la celda "fuente" el nombre "rngNombre" (rng porque es un
rango  de  una  hoja  de  cálculo).  Luego  vamos  al  editor  VBE,  seleccionamos  el  control  de  edición  Nombre  y  en  su
propiedad  ControlSource  escribimos  el  nombre  del  rango  que  queremos  que  sea  su  "fuente",  en  este  caso
"rngNombre".

Ahora hacemos lo mismpo para el apellido: primero damos el nombre "rngApellido" a la celda de la hoja de cálculo y
luego escribimos rngApellido en la propiedad ControlSource del control de edición de Apellido.

Ahora tenemos que borrar el código que habíamos escrito para pasar la información de hoja de cálculo al Userform y
viceversa. Mejor que borrarlo, lo que haremos será "comentarlo", utilizando una comilla simple ', que indica a Excel
que  todo  lo  que  escribamos  en  esa  línea  detrás  de  la  comilla  son  cosas  nuestras  y  que  las  ignore  (el  texto

"comentado" aparecerá en otro color, normalmente en verde). Aprovechando que explico lo de
los comentarios, nunca está de más recordar la importancia que tiene añadir al código todos
los  comentarios  que  sean  necesarios.  Cuando  estás  escribiendo  una  rutina  sabes
perfectamente cómo funciona y qué es lo que hace, y todos pensamos que los comentarios
son  innecesarios,  pero  cuando  tras  algunas  semanas  tienes  que  volver  a  ver  la  rutina  te
encuentras con un montón de líneas que no sabes para qué sirven ni cómo lo hacen, y si no
las has comentado tienes que "bucear" en ellas para averiguarlo.

A lo que íbamos, estábamos borrando el código de los eventos Initialize del Userform y Click del botón Aceptar.
Vamos  al  editor  VBE,  hacemos  doble­click  sobre  el  Userform  y  nos  aparece  la  rutina  Userform_Initialize().
Ponemos  una  comilla  delante  de  las  dos  líneas  que  se  encargan  de  copiar  los  datos  de  la  hoja  de  cálculo  al
userform, y veremos que dichas líneas cambian de color, indicándonos que para Excel son comentarios y los va a
ignorar.  Ahora  volvemos  al  Userform  y  hacemos  doble­click  en  el  botón  Aceptar,  y  nos  aparece  la  rutina
btnAceptar_Click(). Volvemos a poner las comillas en las dos líneas de código que queremos quitar y ya está.

Si probamos ahora el diálogo, veremos que la propieda ControlSource funciona, y que antes de mostrar el diálogo
"lee" el contenido de la hoja de cálculo y lo pone en el Userform, y cuando pulsamos Aceptar copia el contenido de
los controles del Userform en la hoja de cálculo.

Sin  embargo  he  detectado  un  problema  con  el  uso  de  ControlSource.  Si  hacemos  algún  cambio  en  el  Userform  y
luego  pulsamos  el  botón  de  "Cancelar",  los  cambios  que  hemos  hecho  en  los  datos  se  actualizan  en  la  hoja  de
cálculo, cuando no deberían actualizarse porque hemos pulsado Cancelar. En cambio, si hacemos algún cambio y
pulsamos la tecla Escape los cambios no se actualizan en la hoja de cálculo. Es un poco raro. Creo que "se  me
escapa" algo, si alguien descubre por qué ocurre esto que me avise.

Bueno,  ahora  vamos  a  añadir  un  control  nuevo,  que  Excel  llama  "cuadro  combinado"  (el  nombre  en  inglés  es
ComboBox), que es la típica persiana que estamos hartos de ver en cualquier diálogo, y permite al usuario escoger
una opción entre varias que le presentamos. En este caso vamos a mostrar una persiana para el "Estado Civil", y las
opciones que vamos a presentar son "soltero, casado, viudo y divorciado".

Las propiedades más importantes de un ComboBox son:

List: un conjunto de cadenas de caracteres (strings) que representan a todos los elementos de la lista. Para
acceder a un elemento en concreto utilizamos MiComboBox.List( 3 ), que nos devolvería el cuarto elemento
de la lista, ya que el primero tiene el número 0.

ListCount:  el  número  de  elementos  que  hay  en 
MiComboBox.ListCount­1 ) obtendremos el último elemento de la lista.

la 

lista.  Si  utilizamos  MiComboBox.List(

ListIndex:  el  número  del  elemento  seleccionado  actualmente  por  el  usuario.  Para  obtener  el  texto  del
elemento seleccionado utilizaríamos MiComboBox.List( MiComboBox.ListIndex ). Si hemos definido el control
como "multiselección" (es decir, que el usuario pueda escoger más de un elemento), esta propiedad no se
puede usar, pero por ahora no nos vamos a meter en esto.

Rowsource:  es  el  rango  del  que  queremos  que  el  ComboBox  lea  los  elementos.  Podemos  utilizar  esta
propiedad, o bien introducir nosotros mismos mediante código los elementos (utilizando el método AddItem).

ControlSource:  la  celda  en  la  que  el  ComboBox  lee  y  escribe  el  elemento  seleccionado.  Igual  que  con
RowSource,  podemos  utilizar  esta  propiedad  para  que  el  ComboBox  nos  escriba  en  una  celda  el  elemento
seleccionado o podemos utilizar código para obtener el elemento seleccionado (utilizando ListIndex).

Style: identifica el tipo de ComboBox que queremos. Tiene dos valores posibles:

fmStyleDropDownCombo:  el  usuario  puede  escoger  uno  de  los  valores  de  la  lista  o  escribir  otro
distinto.

fmStyleDropDownList: el usuario sólo puede escoger uno de los valores de la lista.

ControlTipText:  esta  propiedad  se  aplica  a  todos  los  controles,  pero  como  todavía  no  la  he  explicado,  la
pongo aquí. Esta propiedad sirve para mostrar al usuario un pequeño texto de ayuda sobre el control cuando
ponga el ratón sobre el mismo, el ya clásico cuadrito amarillo.

Una vez vistas las propiedades, vamos con los métodos del objeto ComboBox:

AddItem:  sirve  para  añadir  un  elemento  a  la  lista.  Su  sintaxis  es  MiComboBox.AddItem(  'Mi  texto',  3  ).  El
primer parámetro es el texto del elemento, y el segundo parámetro (que es opcional), es la posición dentro de
la lista que queremos para el nuevo elemento. Si no utilizamos el segundo parámetro, nuestro nuevo elemento
se añadirá al final de la lista.

RemoveItem: para borrar un elemento. Su sintaxis es MiComboBox.RemoveItem( 3 ), para borrar el elemento
número 3.

Clear: borra todos los elementos de la lista.

Como siempre, hay muchos más métodos y propiedades, que están bastante bien explicados en la ayuda de Excel.

Vamos a colocar nuestro ComboBox en el Userform, y una vez colocado vamos a las propiedades. Primero vamos a
establecer la propiedad Style como fmStyleDropDownList, para que el usuario sólo pueda escoger uno de los valores
que le presentamos (es decir, que no le dejamos que se invente un nuevo estado civil). Ahora vamos a la hoja de
cálculo  y  escribimos  en  una  celda  cualquiera  "Soltero",  debajo  "Casado",  debajo  "Divorciado"  y  debajo  "Viudo".
Ahora  vamos  a  dar  un  nombre  a  este  rango,  seleccionando  las  cuatro  celdas  y  escribiendo  en  el  "Cuadro  de
Nombres" (en la parte superior izquierda) el nombre "rngEstadoCivil". Ya que estamos vamos a seleccionar cualquier
otra  celda  para  que  el  ComboBox  almacene  el  elemento  seleccionado  por  el  usuario,  y  le  damos  a  esta  celda  el
nombre "rngValorEstadoCivil".

Ahora  vamos  otra  vez  al  editor  de  Visual  Basic  (VBE),  seleccionamos  nuestro  ComboBox,  y  en  la  propiedad
RowSource escribimos "rngEstadoCivil". En la propiedad ControlSource escribimos "rngValorEstadoCivil".

Como propina, vamos a poner en la propiedad ControlTipText el texto "Selecciona tu estado civil", que es lo que el
usuario  verá  en  un  cuadrito  amarillo  cuando  ponga  el  ratón  sobre  el  ComboBox.  Recuerda  que  esta  propiedad  la
tienen todos los controles.

Ya tenemos nuestro ComboBox, y si lo probamos veremos que funciona perfectamente. Recuerda que el ComboBox
coge los valores del rango establecido en RowSource, y almacena el valor seleccionado por el usuario en la celda
establecida en ControlSource.

Como  ejercicio  podemos  hacer  lo  siguiente:  borramos  las  propiedades  ControlSource  y
RowSource, y hacemos que el control funcione igual pero encargándonos nosotros mismos
  • Links de descarga
http://lwp-l.com/pdf9443

Comentarios de: Curso de programación en VBA para Excel - Capítulo 4. Cuadros de diálogo (Userforms). Segunda parte. (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