¿Bucle?

Buenas tardes
Trato de montar un bucle o algo parecido, porque tener que repetir casi 700 veces un grupo de instrucciones (con ligeras variables) me parece de ignorantes...
En una macro de excel tengo un código que lo que hace es enviar por mail (a través de lotus) un fichero determinado (alojado en una ubicación concreta) a una dirección determinada (registrada en una celda concreta de una hoja excel concreta) : se trata de enviar 700 ficheros distintos (nombrados de forma distinta) a 700 direcciones de mail diferentes.
Tal y como lo tengo ahora mismo desarrollado, "cojo" un determinado fichero excel y le mando a una determinada dirección (dicha dirección la tengo registrada en una determinada celda de una hoja excel)
El numero de envíos ha pasado de 24 a casi 700 de ahí mi problema
Ejemplo: En el código que trascribo a continuación envió a la dirección que figura en la celda A1 un mail donde adjunto el fichero llamado "4019" que esta alojado en "C"
Set MailDoc = Maildb.CREATEDOCUMENT    
        MailDoc.Form = "Memo" 
        Recipient = Sheets("hoja_excell_de_mails").Range("A1").Value 
        MailDoc.SendTo = Recip 
  MailDoc.Subject = "Envio de su fichero excell" 
              MailDoc.Body =  "Buenos dias les adjuntamos su fichero excell del presente mes." 
  MailDoc.SaveMessageOnSend = True 
  Attachment1 = "C:\4019.xls" 
    If Attachment1 <> "" Then 
        On Error Resume Next 
            Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1") 
            Set EmbedObj1 = AttachME.embedobject(1454, "attachment1", "C:\4019.xls", "") 
        On Error Resume Next 
    End If 
      MailDoc.PostedDate = Now() 
            On Error GoTo errorhandler1 
        MailDoc.SEND 0, Recipient 
Con la nueva ampliación, este grupo de instrucciones que hasta ahora lo "repetía" (con las modificaciones lógicas de la definición de la celda y el nombre del fichero) 24 veces ahora tengo que repetirlos casi 700.
Las "variables" serian:
Para las direcciones: A1, A2, A3...(en la celda A1 tengo metida una dirección de mail, en la celda A2 tengo metida otra dirección de mail...)
Para los ficheros adjuntos: no serian consecutivos... 4019, 4022, 4023, 4024
Rogaría cualquier ayuda o sugerencia que me pudieran prestar.
Un saludo y muchas gracias
Respuesta
1
Como me estas indicando que las direcciones siempre estarán en la columna A, te propongo que coloque el nombre de los archivos adjuntos en la columna B sin ruta y extensión, es decir, como tu mismo lo colocaste en el ejemplo.
Declaramos un par de constantes para armar la ruta de los adjuntos:
Const path As String = "C:\"
Const ext As String = ".xls"
luego iniciamos en la celda A1
Range("A1").select
Utilizamos un bucle while para buscar en toda la columna A hasta que alguna celda este vacía:
while activecell.value <> ""
Set MailDoc = Maildb.CREATEDOCUMENT    
        MailDoc.Form = "Memo" 
        Recipient = activecell.Value 
        MailDoc.SendTo = Recip
MailDoc.Subject = "Envio de su fichero excell" 
              MailDoc.Body =  "Buenos dias les adjuntamos su fichero excell del presente mes." 
  MailDoc.SaveMessageOnSend = True
'como el nombre de los archivos esta en la columan B, nos desplazamos hasta ella y tomamos su valor
Attachment1 = path & activecell.offset(0,1).value & ext
'suponiendo que el valor de la celda B1 sea 4019, Attachment1 = "C:\4019.xls"
If Attachment1 <> "" Then 
        On Error Resume Next 
            Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1") 
            Set EmbedObj1 = AttachME.embedobject(1454, "attachment1", "C:\4019.xls", "") 
        On Error Resume Next 
    End If 
      MailDoc.PostedDate = Now() 
            On Error GoTo errorhandler1 
        MailDoc. SEND 0, Recipient
Wend
P.D.: no entiendo esta linea: Set EmbedObj1 = AttachME.embedobject(1454, "attachment1", "C:\4019.xls", ""), por lo tanto prueba el codigo que te di y ajustala.
Avisame si te funciona
Ante todo mi más sincero agradecimiento.
(Desgraciadamente en casa no tengo el lotus... así que je je tendré que esperarme a mañana por la mañana... ufff con la guerra que me ha dado esta cuestión.. pensar que me la puedes haber solucionado... uffff)
Ya te cuento como queda la cosa
Un saludo
Ok avisame si te sirve o si necesitas algo.
Hola buenas... uff la que he montado hoy en el trabajo! (Hasta he tenido que hablar con la central para avisar de porqué salían tropezientos de correos a una misma dirección .. pero bueno creo que ahí ha quedado la cosa)
En la hoja excel en la celda A1 tengo una cuenta de correo: llemémosla cuenta1
<span style="white-space: pre;"> </span>   en la celda A2 tengo otra cuenta de correo: llamemosla cuenta2
En la hoja excell en la celda B1 hay un fichero llamado 4021
<span style="white-space: pre;"> </span>   en la celda B2 hay otro fichero llamdo 4022
Con el código que a continuación trascribo hoy me ha pasado lo siguiente:
1. Me ha lanzado tropezientos correos a la cuenta1 (no he detectado ninguno a la cuenta2, también es cierto que he paralizado la replicación del lotus notes..)
2. No me ha adjuntado ningún archivo (tenia que haber adjuntado el archivo llamado "4021"
(¿Sabéis si existe algún lotus virtual con el que pueda realizar pruebas...?
Te trascribo el código que tengo implantado, cualquier ayuda para mi realmente es muy agradecida.
Sub LotusNotsCoreCode()
    Dim UserName As String
    Dim MailDbName As String
    Dim Recipient As String
    Dim ccRecipient As String
    Dim mens As String
    Dim Attachment1 As String
    Dim Maildb As Object
    Dim MailDoc As Object
    Dim AttachME As Object
    Dim Session As Object
    Const path As String = "C:\"
    Const ext As String = ".xls"
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
    End With
      ' Abro la sesion del usuario del lotus
        Set Session = CreateObject("Notes.NotesSession")
           UserName = Session.UserName
           MailDbName = Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf"
       Set Maildb = Session.GetDatabase("", MailDbName)
        If Maildb.IsOpen = True Then
        Else
            Maildb.OPENMAIL
        End If
    Range("A1").Select
    While ActiveCell.Value <> ""
        Set MailDoc = Maildb.CREATEDOCUMENT
        MailDoc.Form = "Memo"
        Recipient = ActiveCell.Value
        MailDoc.SendTo = Recipient
        MailDoc.Subject = "Envio de su fichero excell"
        MailDoc.Body = "Buenos dias les adjuntamos su fichero excell del presente mes."
        MailDoc.SaveMessageOnSend = True
        Attachment1 = path & ActiveCell.Offset(0, 1).Value & ext
    If Attachment1 <> "" Then
        On Error Resume Next
            Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1")
        On Error Resume Next
    End If
        MailDoc.PostedDate = Now()
            On Error GoTo errorhandler1
        MailDoc.SEND 0, Recipient
 Wend
        Set Maildb = Nothing
        Set MailDoc = Nothing
        Set AttachME = Nothing
        Set Session = Nothing
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
    End With
errorhandler1:
            Set Maildb = Nothing
            Set MailDoc = Nothing
            Set AttachME = Nothing
            Set Session = Nothing
mens = MsgBox("Envio realizado por favor salga de la aplicación")
End Sub
Un saludo
El error que tienes es simple, estas dentro de un bucle while-wend, en el cual tienes que ir despalzandote por todas las celdas, hasta que consiga una vacía y se salga del ciclo; allí esta el problema no te estas moviendo de la celda A1, siempre estas allí parado, por eso te envía ese correo muchas veces y tienes que romper el bucle de forma manual.
Antes de la sentencia wend, coloca esta linea y prueba:
activecell.offset(1,0).select
Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1"), no entiendo muy bien esta linea, pero pareciera que no estas pasando el contenido de la variable
attachment1, pues la estas colocnado entre comillas, como si fuera un texto.
En excel puedes correr paso a paso presionando F8, prueba en lotus
Hola maestro, casi "he llegado" a conseguir mi objetivo, eso de he llegado.. es porque si no fuera por ti... ufff ni de coña hubiera llegado dónde estoy ahora...
Solo me falta un cosa... que se adjunte a cada correo el fichero en cuestión...
He quitado las comillas, las puesto, las he puesto al revés... yo que sé.. pero no hay manera de que me adjunte el fichero en cuestión
Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1")
Casi está... y tiemblo de pensar que por esto no podamos llevar el trabajo a buen puerto
¿Se te ocurre que puede estar pasando?
Muchas gracias
AL final localice el pequeño error que nos impedía culminar todo el proceso con éxito.
Personas como usted hacen que internet y este tipo de páginas sea el futuro de la sociedad.
Muchas gracias y un abrazo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas