Word, Outlook y vb6 ...

08/02/2011 - 15:42 por Calcu | Informe spam
Pues eso, que una vez desarrollada toda la aplicacion, me toca ponerla
"bonita"..., tengo un reporte que se dbe enviar por correo electronico y la
manera que he pensado es:

1.- tengo un formulario de Word, con sus campos a rellenar.
2.- lo abro con vb6, lo relleno con los registros del programa y lo guardo
como Html
3.- lo abro con outlook e intento embeberlo.

y el resultado deberia ser un email con mi formulario incrustado en él, pero
no... o no salen todas las imagenes o no incrusta nada... alguna idea?, o
alguna manera mejor de hacerlo?

un poco de codigo, a ver si veis algo raro!


'verificar que no este abierto el documento

Set MSWord = GetObject(, "Word.Application")
If Err <> 0 Then
Err.Clear
Set MSWord = CreateObject("Word.Application", "")
MSWord.Visible = True
Else
If MSWord.Visible = False And MSWord.Documents.Count > 0 Then
MSWord.Visible = True
End If
End If

Dim Doc As Object
Dim DocFound As Boolean, NumDoc As Integer
DocFound = False
For Each Doc In MSWord.Documents
DoEvents
If "F:\" & Doc.Name = "F:\Pentatrans Modelo.doc" Then
DocFound = True
Exit For
End If
Next Doc

NumDoc = MSWord.Documents.Count

If DocFound = False Then
'MSWord.Application.WindowState = wdWindowStateMaximize
MSWord.Documents.Open "F:\Pentatrans Modelo.doc", , True
Else
If MSWord.Application.WindowState = wdWindowStateMinimize Then
MSWord.Application.WindowState = wdWindowStateMaximize
End If
End If

Abro mi bdd y relleno:

If Rs.State = 1 Then
Rs.Close
End If

Tabla = "EXPE" & Anyobus
Sql = "SELECT * FROM " & Tabla & " WHERE NUMEXPE = " & Text1.Text
Rs.Source = Sql
Rs.Open , BCN, adOpenDynamic, adLockOptimistic

If Rs.EOF = True Then
MsgBox "Expedicion no existe"
On Error GoTo 0
Exit Sub
End If

MSWord.ActiveDocument.ActiveWindow.Document.FormFields("Numexpe").Result
= Text1.Text
.

MSWord.Activate
MSWord.ActiveDocument.SaveAs "C:\Formulario1.htm", wdFormatHTML

MSWord.Quit False
Set MSWord = Nothing

DoEvents

ahora nos metemos con el outlook

Dim objOutlook As Object
Dim objEMail As Object

Set objOutlook = GetObject(, "Outlook.Application")
If objOutlook Is Nothing Then Set objOutlook =
CreateObject("Outlook.Application")

Set objEMail = objOutlook.CreateItem(0)

With objEMail
.Subject = "Incidencia : " & Text1.Text
.Attachments.Add "c:\Formulario1.htm", olEmbeddeditem
.Display
End With

Set objEMail = Nothing
Set objOutlook = Nothing

On Error GoTo 0
Exit Sub

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua
08/02/2011 - 21:50 | Informe spam
"Calcu" escribió en el mensaje
news:iirkuu$rtq$
Pues eso, que una vez desarrollada toda la aplicacion, me toca
ponerla "bonita"..., tengo un reporte que se dbe enviar por correo
electronico y la manera que he pensado es:

1.- tengo un formulario de Word, con sus campos a rellenar.
2.- lo abro con vb6, lo relleno con los registros del programa y lo
guardo como Html
3.- lo abro con outlook e intento embeberlo.

y el resultado deberia ser un email con mi formulario incrustado en
él, pero no... o no salen todas las imagenes o no incrusta nada...
alguna idea?, o alguna manera mejor de hacerlo?



Hola,

Imagino que al guardar como HTML (que no contiene imagenes, sino
referencias a las imagenes) es normal que las imagenes no lleguen al
destinatario del correo (ya que cualesquiera referencias contenidas en
el archivo HTML serán relativas a su ubicacion en el sistema de
archivos (file://) del equipo de origen.

La opcion más simple sería guardar el archivo de Word y adjuntarlo al
mensaje de correo (si el receptor tiene Word u Open Office debería
poder abrirlo sin problemas).

Otra sería colocar las imagenes (si son estandar) en un servidor Web,
y pasar por el documento HTML generado reemplazando las referencias
locales por referencias a las imagenes correspondientes en dicho
servidor.

Otra es probar con alguna librería para el envío de correo. Alguna vez
he enviado cosas usando VBSendMail, y normalmente funciona.

Salud!
Respuesta Responder a este mensaje
#2 Calcu
09/02/2011 - 09:59 | Informe spam
"Leonardo Azpurua" escribió en el mensaje
news:iisagr$emt$
Hola,

Imagino que al guardar como HTML (que no contiene imagenes, sino
referencias a las imagenes) es normal que las imagenes no lleguen al
destinatario del correo (ya que cualesquiera referencias contenidas en el
archivo HTML serán relativas a su ubicacion en el sistema de archivos
(file://) del equipo de origen.

La opcion más simple sería guardar el archivo de Word y adjuntarlo al
mensaje de correo (si el receptor tiene Word u Open Office debería poder
abrirlo sin problemas).

Otra sería colocar las imagenes (si son estandar) en un servidor Web, y
pasar por el documento HTML generado reemplazando las referencias locales
por referencias a las imagenes correspondientes en dicho servidor.

Otra es probar con alguna librería para el envío de correo. Alguna vez he
enviado cosas usando VBSendMail, y normalmente funciona.




Gracias, pero no me he explicado bien xD.

La idea es generar un correo con esas imagenes incrustadas, lo he generado
en Word porque realmente es mas facil, por el Html y demas, pero la idea es
"incrustar" esas imagenes para que lleguen, vamos.. adjuntarlas embebidas en
el correo (estoy ultimamente muy espeso explicandome xD)

y lo de adjuntarlo, si, funciona, y va bien (pero donde esta la emocion si
no vamos un poco mas alla no? xDDD), la idea es que ese Word aparezca
directamente incrustado en el correo.

Me he planteado incluso hacer una captura de pantalla del word y pegarla...
pero para largos no valen y no quiero que el texto que escribo se convierta
en imagen, pues queda mal.

Si no fuera porque tengo la plantilla en Word con sus lineas y dibujos...,
igual me sale mas rentable hacerlo en Outlook directamente, usando una
plantilla de outlook... sigo probando..
Respuesta Responder a este mensaje
#3 Calcu
09/02/2011 - 14:43 | Informe spam
Bueno... ya incrusto todo bien... ahora solo me falta un detalle... alguien
sabe como hacer en el outlook, al incrustar 1 imagen, poder decirle lo de
"formato / detras del texto" ?

como si quisieras una marca de agua, vamos.

Y a traves de Visual, claro. xD
Respuesta Responder a este mensaje
#4 Calcu
09/02/2011 - 15:46 | Informe spam
solucionado con algo que se llama "office envelope"
bru-tal.

codigo:

Sub SendDocAsMsg()
Dim wd As Word.Application
Dim doc As Word.Document
Dim itm As Object
Dim ID As String
Dim blnWeOpenedWord As Boolean
On Error Resume Next

Set wd = GetObject(, "Word.Application")
If wd Is Nothing Then
Set wd = CreateObject("Word.Application")
blnWeOpenedWord = True
End If
Set doc = wd.Documents.Open _
(FileName:="C:\Current.doc", ReadOnly:=True)
Set itm = doc.MailEnvelope.Item
With itm
.To = "Address"
.Subject = "Subject"
.Save
ID = .EntryID
End With
Set itm = Nothing

Set itm = Application.Session.GetItemFromID(ID)
itm.Send
doc.Close wdDoNotSaveChanges
If blnWeOpenedWord Then
wd.Quit
End If

Set doc = Nothing
Set itm = Nothing
Set wd = Nothing
End Sub
Respuesta Responder a este mensaje
#5 Leonardo Azpurua
09/02/2011 - 18:34 | Informe spam
¡Buena esa!

La documentacion en la ayuda de Word sobre el tema es "escasa".
¿Tienes idea de donde conseguir más información sobre el tema?

Salud!



"Calcu" escribió en el mensaje
news:iiu9hs$s28$
solucionado con algo que se llama "office envelope"
bru-tal.

codigo:

Sub SendDocAsMsg()
Dim wd As Word.Application
Dim doc As Word.Document
Dim itm As Object
Dim ID As String
Dim blnWeOpenedWord As Boolean
On Error Resume Next

Set wd = GetObject(, "Word.Application")
If wd Is Nothing Then
Set wd = CreateObject("Word.Application")
blnWeOpenedWord = True
End If
Set doc = wd.Documents.Open _
(FileName:="C:\Current.doc", ReadOnly:=True)
Set itm = doc.MailEnvelope.Item
With itm
.To = "Address"
.Subject = "Subject"
.Save
ID = .EntryID
End With
Set itm = Nothing

Set itm = Application.Session.GetItemFromID(ID)
itm.Send
doc.Close wdDoNotSaveChanges
If blnWeOpenedWord Then
wd.Quit
End If

Set doc = Nothing
Set itm = Nothing
Set wd = Nothing
End Sub

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida