Se tarda demasiado la macro.

04/08/2003 - 21:00 por osalazarg | Informe spam
Podrian ayudarme por favor, soy principiante en visual basic, no se en
donde puedo modificarla para que no se tarde tanto.

Tengo la siguiente macro, pero se tarda demasiado para ejecutarse,en
ocasiones se queda trabada ( no funciona) podrian ayudarme por favor.

Muchas Gracias por su ayuda por anticipado.

Sub ENVIAR_CORREO2()

Dim strArchivo As String
strArchivo = InputBox("INGRESE EL NUMERO DE INSTANCIA DE PEOPLE SOFT",
"Ingreso de parámetros")
If strArchivo = "" Then Exit Sub '(por Ejemplo)

Dim ArchOrigen, ArchDestino
ArchOrigen = "X:\SIEF01\CONSAR\" & strArchivo & ".062"
ArchDestino = "I:\" & strArchivo & ".062"
FileCopy ArchOrigen, ArchDestino

Dim ArchOrigen1, ArchDestino1
ArchOrigen1 = "X:\SIEF01\CONSAR\" & strArchivo & ".071"
ArchDestino1 = "I:\" & strArchivo & ".071"
FileCopy ArchOrigen1, ArchDestino1

Dim ArchOrigen2, ArchDestino2
ArchOrigen2 = "X:\SIEF02V\CONSAR\" & strArchivo & ".124"
ArchDestino2 = "I:\" & strArchivo & ".124"
FileCopy ArchOrigen2, ArchDestino2

Dim ArchOrigen3, ArchDestino3
ArchOrigen3 = "X:\SIEF02V\CONSAR\" & strArchivo & ".125"
ArchDestino3 = "I:\" & strArchivo & ".125"
FileCopy ArchOrigen3, ArchDestino3


'Avant de lancer cette macro, Dans l'éditeur VBA: Faire Menu / Tools /
Reference / Cocher "Microsoft Outlook Library"
If MsgBox("¿ESTAS SEGURO QUE DESEAS ENVIARLO?", vbYesNo + vbQuestion) vbNo _
Then Exit Sub
'Code goes here instead of
Dim Ol As New Outlook.Application
Dim Olmail As MailItem
Dim CurrFile As String

Set Ol = New Outlook.Application
Set Olmail = Ol.CreateItem(olMailItem)
With Olmail
.To = Range("B1").Value
.Subject = Range("B2").Value
.Body = Range("B3").Value
.Display
.Send
'On peut switcher entre .send et .display selon que l'on veut envoyer le
mail (send) ou seulement le préparer et le vérifier(display)
MsgBox "HA SIDO ENVIADO"
End With
End Sub






Mensaje enviado desde http://grupos.buscadoc.org

 

Leer las respuestas

#1 Héctor Miguel
05/08/2003 - 12:55 | Informe spam
¿Que tal, Sago?

... macro ... se tarda demasiado ... en ocasiones se queda trabada [...]



==> Asi, "de primera vista", las causas (probablemente) pudieran ser:
1.- (si la ejecutas en repetidas ocasiones) establecer objetos "demasiadas" veces con la instruccion Set Objeto = xyz...
y que al finalizar CADA ejecucion no se "libera" la memoria (Set Objeto = Nothing) con lo cual puede bloquearse :((
2.- El uso "conjunto" (en el objeto "Outlook.Application.MailItem") de los comandos .Display y .Send
(como "dicen" las instrucciones -aunque en Frances, probablemente de la pagina de Laurent Longre-):
"Alterna entre .Send y .Display dependiendo de lo que quieras hacer: Enviar => .Send o... "Preparar" => .Display" :))

==> Como comentarios adicionales:
1.- En la parte final declaras una variable (CurrFile As String) y "en realidad"... NO adjuntas al correo NINGUN
"Attachment"
solo envias UN correo (por vez), a un destinatario (B1), con asunto (B2) y mensaje (B3)
2.- Veo que copias UN archivo en varias ocasiones (solo cambia la extension del archivo) "entre" los mismos directorios...
(creo que) seria mas eficiente (y rapido) copiar mediante un "ciclo" For...Next (y una "matriz" para las extendiones)

==> Prueba con el siguiente codigo
== (modifica lo que no te guste -o NO funcione- y adaptalo a tu mejor conveniencia) =Sub Enviar_Correo()
Dim Archivo As String, Del_Dir_1 As String, Del_Dir_2 As String, Al_Dir As String, Sig As Integer, Ext, _
Programa As Outlook.Application, Correo As Outlook.MailItem
Del_Dir_1 = "X:\Sief01\ConSAR\"
Del_Dir_2 = "X:\Sief02V\ConSAR\"
Al_Dir = "I:\"
Ext = Array(".062", ".071", ".124", ".125")
Archivo = InputBox("Ingrese el número de instancia de People Soft", "Ingreso de parámetros")
If Archivo = "" Then Exit Sub
For Sig = 0 To 1
FileCopy Del_Dir_1 & Archivo & Ext(Sig), Al_Dir & Archivo & Ext(Sig)
Next
For Sig = 2 To 3
FileCopy Del_Dir_2 & Archivo & Ext(Sig), Al_Dir & Archivo & Ext(Sig)
Next
If MsgBox("¿Confirmas el envío del correo?", vbYesNo + vbQuestion) = vbNo Then Exit Sub
Set Programa = New Outlook.Application
Set Correo = Programa.CreateItem(olMailItem)
With Correo
.To = [b1]
.Subject = [b2]
.Body = [b3]
.Send
End With
MsgBox "Correo enviado"
Set Correo = Nothing
Set Programa = Nothing
End Sub
_______
Saludos,
Héctor.
MS-MVP

Preguntas similares