Hola a todos,

Hace unos días estuve pensando en la posibilidad de poner una encuesta en el blog, sobre todo para saber si los contenidos están gustando, si hay algo que mejorar o quizás orientar el blog hacia otro tipo de áreas (financieras, estadísticas, etc…), pero es que hace un tiempo ya había colgado una encuesta, de esas que se hacen automáticamente desde WordPress y el resultado no fue el esperado porque la participación fue muy pequeña.

Ahora que ya llevo unas cuentas entradas y algunas me consta que están siendo de utilidad, me he propuesto basar esta entrada en cómo hacer una encuesta en Excel y la posibilidad de enviarla automáticamente desde outlook usando vba. Que conste que me lo pensé dado que no todo el mundo tiene instalado en su equipo outlook y por lo tanto no podrá responder o utilizar la macro, pero bueno, creo que es una forma de aprender algo nuevo y de trasladar a los lectores una encuesta de forma original.

Pues vamos allá, empecemos por la encuesta primero, que hay que hacerla siguiendo unos criterios específicos para que luego el código funcione correctamente.

Como en cualquier encuesta debemos escribir una pregunta y una serie de respuestas para que el encuestado pueda expresar su opinión, en este caso en particular voy a proponer:

– Una primera pregunta en la que solo debemos seleccionar una respuesta.
– Una segunda pregunta en la que podremos seleccionar cualquier respuesta.
– Una tercera pregunta que será de respuesta abierta, pudiéndola dejar en blanco.

Esta sería la encuesta:

ENCUESTA_1

Como podéis observar, al lado de cada respuesta he incrustado en la hoja una «casilla de verificación» para marcar y validar el dato, este control lo podéis encontrar accediendo a la ficha «Programador» de la cinta de opciones de Excel y pulsando en la pestaña «Modo diseño» y a continuación en «Insertar», una vez que se abran las opciones elegiremos dentro de los Controles Active X la «casilla de verificación»:

ENCUESTA_2

 

Para la pregunta 3 he elegido otro control Active X, en este caso se trata de un «cuadro de texto»:

ENCUESTA_3

y que tendremos la posibilidad de configurar sus propiedades entrando en el editor del objeto, para ello pulsaremos el botón derecho del ratón y pulsaremos en «propiedades», de forma que vamos a asignar una longitud máxima de 1.000 caracteres y le agregaremos una barra de scroll lateral por si se pasan del espacio del cuadro de texto:

ENCUESTA_4

Y así ya tenemos resuelta la parte visual de la entrevista. Ahora nos queda pendiente la parte de la programación, y lo primero que vamos a hacer es condicionar a que en la pregunta 1 solo se pueda responder una sola pregunta y que no se pueda dejar ninguna sin contestar, en la pregunta 2 se pueda responder a una o varias preguntas pero no pueda dejar ninguna vacía y en el cuadro de texto no haremos nada, es una pregunta abierta.

Abrimos el editor de visual basic y en la hoja una escribimos en siguiente código:

ENCUESTA_5

Os lo dejo aquí para que lo podáis copiar:

Private Sub validar_encuesta()
'Pregunta 1_condicionamos a no se puede dejar la pregunta sin responder.
If CheckBox1 = Empty And CheckBox2 = Empty And CheckBox3 = Empty Then
MsgBox "DEBES SELECCIONAR UNA RESPUESTA PARA LA PREGUNTA 1"
Exit Sub
Else
' Condicionamos a que se debe responder solo una pregunta.
If CheckBox1 <> Empty And CheckBox2 <> Empty Then
MsgBox "DEBES SELECCIONAR SOLO UNA RESPUESTA PARA LA PREGUNTA 1"
Exit Sub
End If
If CheckBox2 <> Empty And CheckBox3 <> Empty Then
MsgBox "DEBES SELECCIONAR SOLO UNA RESPUESTA PARA LA PREGUNTA 1"
Exit Sub
End If
If CheckBox3 <> Empty And CheckBox1 <> Empty Then
MsgBox "DEBES SELECCIONAR SOLO UNA RESPUESTA PARA LA PREGUNTA 1"
Exit Sub
End If
End If
'Pregunta 2_ condicionamos a que al menos se tenga que seleccionar una pregunta
If CheckBox4 = Empty And CheckBox5 = Empty And CheckBox6 = Empty And CheckBox7 = Empty And CheckBox8 = Empty Then
MsgBox "DEBES SELECCIONAR UNA RESPUESTA PARA LA PREGUNTA 2"
Else
' Validamos
MsgBox "LOS DARTOS HAN SIDO VALIDADOS CORRECTAMENTE, YA PUEDES ENVIAR LA ENCUESTA"
Exit Sub
End If
End Sub

El siguiente paso será introducir un botón para validar que las preguntas estén correctamente respondidas y lo configuramos para que ejecute la macro «validar_encuesta» pulsando con el botón derecho en el ratón:

ENCUESTA_6

Ahora tan solo nos queda hacer otro botón para enviar por correo la encuesta, y dado que se hace de la misma forma que el anterior no lo explicaré.

Para hacer la macro que envía la encuesta, debemos volver a copiar el código anterior (para que vuelva a validar) y un pequeño formulario para advertir de que se va a proceder a enviar la información y podamos aceptar o cancelar.

ENCUESTA_8

He resaltado en un cuadro en rojo el userform1, que nos va a servir como advertencia para desencadenar el correo. el código que escribiremos en el userform es el siguiente:

ENCUESTA_7

El detalle del formulario es importante, dado que una vez que le damos a «Aceptar» se desencadena la instrucción para enviar el correo:

Private Sub CommandButton1_Click()
' Selecciona el rango de celdas que deseas copiar y enviar.
ActiveSheet.Range("b3:h35").Select
' Mostrar vista previa del área seleccionada.
ActiveWorkbook.EnvelopeVisible = True
' Detallamos la introduccion del correo, el correo del destinatario y el asunto y enviamos.
With ActiveSheet.MailEnvelope
.Introduction = "RESPUESTAS ENCUESTA EXCELSIGNUM"
.Item.To = "excelsignum@yahoo.es"
.Item.Subject = "ENCUESTA EXCEL SIGNUM"
.Item.Send
End With
'Una vez enviado el correo, procedemos a borrar lo que habiamos marcado en la encuesta.
ThisWorkbook.Worksheets(1).CheckBox1.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox2.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox3.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox4.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox5.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox6.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox7.Value = Unchecked
ThisWorkbook.Worksheets(1).CheckBox8.Value = Unchecked
ThisWorkbook.Worksheets(1).TextBox1.Value = ClearContents
'Ocultamos el userform de validación
UserForm1.Hide
End Sub

En verde he puesto lo que hace cada una de las líneas de código, en rojo están detallados los campos que contendrá nuestro correo, es decir: el asunto del mensaje, la dirección de correo y la introducción. En caso de querer utilizar la macro solo tendréis que modificar estos campos y el rango de celdas a seleccionar. Después de que haya enviado el correo, la macro borra el contenido de lo que hemos marcado y escrito en la encuesta y oculta el userform1.

Para finalizar, he creído conveniente poner un evento «open» para que cada vez que se abra el libro de excel deje vacío el contenido de las respuestas de la encuesta, esta macro la colocaremos en el módulo «Thisworkbook»:

ENCUESTA_9

Pues bien, creo que ya he terminado la explicación, ahora solo me queda dejaros el archivo de ejemplo y esperar a recibir vuestras opiniones. También espero que os resulte interesante la entrada y la podáis utilizar en vuestros trabajos.

* Importante: la macro solo funcionará en equipos con Outlook instalado (no importa la versión), en Outlook Espress no funcionará y tampoco en ninguno de los otros correos electrónicos más conocidos como Gmail, Yahoo, Hotmail, Msn , etc. para cada uno de ellos hay que configurar sus cuentas en VBA de forma específica.

Descarga el archivo pulsando enENVIAR CORREO DESDE OUTLOOK USANDO EXCEL

 

Comparte este post