Como hago para seleccionar varias celdas (osea un rango) y que me lo tome la VBA de excel

Hola, estoy haciendo una macro (soy bastante inexperta en esto) en excel 2007 (e intentando que también funcione en 2000), que me permita enviar mensajes personalizados desde mi cuenta de gmail.

Buscando en internet encontré una macro ya armada que me funciona, donde se especifica una celda por cada campo, por ejemplo c1 como mail destinario, c2 como mensaje, c3 como ruta del adjunto, etc. El problema con el que me encuentro es que la macro viene con una sola celda especifica como texto del mensaje a enviar... Y yo necesito que no tome una celda sino varias, un rango que yo especifique, no logro hacerlo! Me ayudarían???

Adjunto macro que hace el proceso

Envio1 Macro
' 1Primer ensayo para envio de mensaje de invitacion usango gmail
'
' Keyboard Shortcut: Ctrl+Shift+E
'
Function EnviarMails_CDO() As Boolean
' Creo la variable de objeto CDO
Dim Email As CDO.Message
Dim Autentificion As Boolean
' ahora doy vida al objeto
Set Email = New CDO.Message
'indicamos los datos del servidor:
Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com"
Email.Configuration.Fields(cdoSendUsingMethod) = 2
'indicamos el nro de puerto. Por defecto es el 25, pero gmail usa el 465. Hay otro
'(que ahora no recuerdo) pero no me funcionaba... Por eso no lo usé mas y lo olvidé
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
'aqui dejamos en claro si el servidor que usamos requiere o nó autentificación.
'1=requiere, 0=no requiere. Para gmail, entonces, 1
Email.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/" & _
"configuration/smtpauthenticate") = Abs(1)
'segundos para el tiempo maximo de espera. Aconsejo no modificarlo:
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
'aqui defino como True (verdadera) a la autentificación para el envío de mails.
Autentificacion = True
'ahora configuramos las opciones de login de gmail:
If Autentificacion Then
'nombre de usuario
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
'contraseña
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "contraseña"
'si el servidor utiliza SSL (secure socket layer). En gmail: True
Email.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
End If
'a partir de ahora tomaremos los datos incluidos en el la hoja de excel:
' Dirección del Destinatario
Email.To = Trim([e1].Value)
' Dirección del remitente
Email.From = Trim([e2].Value)
' Asunto del mensaje
Email.Subject = Trim([e3].Value)
' Cuerpo del mensaje
Email.TextBody = Trim([e5].Value)

Aquí va mi problema, en la linea de arriba, en donde va e5 necesito que sea un rango de e5:n25


'Ruta del archivo adjunto
If [e5].Value <> vbNullString Then
Email.AddAttachment (Trim([e8].Value))
End If
'antes de enviar actualizamos los datos:
Email.Configuration.Fields.Update
'colocamos un capturador de errores, por las dudas:
On Error Resume Next
'enviamos el mail
Email.Send
'si el numero de error es 0 (o sea, no existieron errores en el proceso),
'hago que la función retorne Verdadero
If Err.Number = 0 Then
EnviarMails_CDO = True
Else
'caso contrario, muestro un MsgBox con la descripcion y nro de error
MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number
End If
'destruyo el objeto, para liberar los recursos del sistema
If Not Email Is Nothing Then
Set Email = Nothing
End If
'libero posibles errores
On Error GoTo 0
End Function
Sub Enviar()
'


Macro del botón enviar:

' EnviarMail Macro
' Boton para enviar el mensaje
'
'
Sub EnviarMail()
Dim MailExitoso As Boolean
'llamo a la funcion:
MailExitoso = EnviarMails_CDO()
'si me devuelve un resultado Verdadero, todo salió bien:
If MailExitoso = True Then
MsgBox "El mail fué enviado satisfactoriamente", vbInformation, "Informe"
End If
End Sub

1 Respuesta

Respuesta
1

He intentado probar la macro pero no funciona, seguramente necesita otras macros o definiciones q

Se mandó sola la respuesta.

Decía que seguramente son necesarias otra macros y definiciones que no aparecen en lo que has mandado. Lo mejor sería si me pudieras mandar el fichero y así me hago la idea exacta de lo que quieres hacer y con un fichero que funcione.

Mi correo es ValeroASM.gmail.com

Pon como asunto el título de la pregunta y como nombre del libro algo alusivo como

MacroCorreo.XLSM

Muchas gracias por su respuesta, ya he enviado el mail a su casilla de correo, aguardo sus comentarios.

De nuevo gracias.

Ya he conseguido algo. La verdad es que este tema no era propiamente de Excel y tuve algún problema. Tienes mal la estructura de funciones y subrutinas, no se cómo era que te funcionaba, de todas formas he puesto bien la estructura.

Lo fundamental que he hecho para resolver el problema es esto

Dim i As Integer
 Dim Texto_eMail As String
.
.
.
Texto_eMail = ""
 For i = 5 To 24
    Texto_eMail = Texto_eMail & Trim(Cells(i, 5).Value) & vbCrLf
 Next
 Email.TextBody = Texto_eMail

Y gracias a Dios que cada línea la tienes solo como una celda combinada, si hubieran sido varias celdas sería muy complicado hacer coincidir columnas.

Pues ahora mismo te mando el fichero. Espero que te funcione y hayas entendido lo que hice. Si no pregúntame. Y si ya está bien no olvides puntuar.

Valero, muchísimas gracias por tan pronta respuesta, ya comprobé la macro y funciona a la perfección.

La verdad es que nunca hubiera sabido como solucionarlo rápido sin tener que hacer un curso intensivo en VBA. Esto me anima muchísimo a seguir aprendiendo y a realizar acciones como las tuyas de ayudar a mucha gente!

Gracias Gracias Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas