Discussion:
Como trabajar con Word desde Visual Basic 6.0
(demasiado antiguo para responder)
Diego
2003-07-21 14:26:56 UTC
Permalink
Si esta perfecto, pero el problema es que si en la maquina donde lo instalas
tiene una version de Word distinta a la que lo desarrollaste no funciona.

Saludos, Diego
Como puedo trabajar con Word desde Visual Basic 6.0?
Hay alguna paigna donde lo explique?
Páginas..., buscando por internet, seguro que encuentras alguna.
Lo primero que tienes que hacer es referenciar en tu proyecto VB la
biblioteca «Microsoft Word x.0 Object Library», donde la « x » es el
número
de versión de la biblioteca de Word que tengas instalada en tu equipo.
A continuación te dejo un pequeño ejemplo para abrir un documento de Word
cuando hagas clic en un botón. Pega el siguiente código en la sección
«Declaraciones» del formulario donde tengas ya insertado un
«CommandButton».
Option Explicit
Dim oWordApp As Word.Application
Dim oDoc As Word.Document
Private Sub Command1_Click()
' Creamos un nuevo objeto «Application»
Set oWordApp = New Word.Application
' Abrimos el documento. Sólo tienes que cambiar
' la ruta y el nombre del documento que deseas abrir
Set oDoc = oWordApp.Documents.Open("C:\Doc1.doc")
' Lo hacemos visible
oWordApp.Visible = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Cerramos el documento, indicando que ya ha
' sido guardado
oDoc.Saved = True
oDoc.Close
' Cerramos Word
oWordApp.Quit
' Liberamos los recursos
Set oDoc = Nothing
Set oWordApp = Nothing
End Sub
Un saludo.
--
Enrique Martínez
[MS MVP - VB]
Diego
2003-07-21 16:32:07 UTC
Permalink
Ok, tienes toda la razon, lo que pasa es que como justamente me estoy
volviendo loco por el tema lo aclare.
Estoy haciendolo a travez de un CreateObject, pero asi y todo no me
funciona, no entiendo porque.

Te paso el codigo:

Dim wapp As Object
Dim Doc As Object

Set wapp = CreateObject("Word.Application")
Set Doc = CreateObject("Word.Document")

Open App.Path & "\Plantillas\Remitos.dqy" For Output As #1
Print #1, "XLODBC"
Print #1, "1"
Print #1, "DRIVER=SQL Server;SERVER=" & strDataPath &
";UID=User1;PWD=xxx;APP=Microsoft®
Query;WSID=DCARO;DATABASE=Inscripciones"
Print #1, "SELECT * From CTVR " & Condic ' Condic Trae el Where .....
Close #1

Set Doc = wapp.Documents.Open(App.Path & "\Plantillas\RV.doc")

Doc.MailMerge.OpenDataSource App.Path & "\Plantillas\Remitos.dqy" ' ,,
, , , , , , , , , , ,

If MsgBox("¿Quiere ver el documento antes de combinarlo?", vbYesNo) =
vbYes Then
MsgBox "Vaya al menu de combinación y combinelo directamente cuando
haya terminado.", vbInformation
Else
Doc.MailMerge.Execute
End If

wapp.Visible = True
Set wapp = Nothing
Set Doc = Nothing

En mi oficina me funciona con Word 2000, pero en el cliente que tiene Word
97, no.

Desde ya muchas gracias y no quise corregirte.

Diego
Post by Diego
Si esta perfecto, pero el problema es que si en la maquina donde lo
instalas tiene una version de Word distinta a la que lo desarrollaste
no funciona.
¡Es lógico! ¿No lo crees tú así?
En tu proyecto Visual Basic tendrás que hacer referencia a la versión del
componente ActiveX de Word que tenga el cliente instalado en su sistema.
Otra solución sería utilizar la función «CreateObject» en una instrucción
«Set» para crear un nuevo objeto «Word.Application», de ésta forma
asignamos
una referencia de objeto a una variable de objeto. Haz los oportunos
cambios
Dim oWordApp As Object
Dim oDoc As Object
' Creamos un nuevo objeto «Application»
Set oWordApp = CreateObject("Word.Application")
De ésta forma no necesitarás referenciar ninguna biblioteca de tipos en tu
proyecto.
Pero, claro, ésto también tiene un inconveniente que quedará reflejado en
el
rendimiento de tu aplicación, porque al declarar la variable objeto tipo
«Object», Visual Basic utiliza «enlaces en tiempo de ejecución», ya que
tiene que determinar si el objeto acepta o no las propiedades o métodos
especificados en el código. En cambio, si hacemos referencia explícita a
la
biblioteca de objetos correspondientes, Visual Basic utiliza «enlaces en
tiempo de diseño», muchos más rápidos que los anteriores por motivos que
son
obvios. :-)
Un saludo.
--
Enrique Martínez
[MS MVP - VB]
"Softjaen" @yahoo.es>
2003-07-21 17:03:51 UTC
Permalink
Post by Diego
Ok, tienes toda la razon, lo que pasa es que como justamente me estoy
volviendo loco por el tema lo aclare.
Estoy haciendolo a travez de un CreateObject, pero asi y todo no me
funciona, no entiendo porque.
En mi oficina me funciona con Word 2000, pero en el cliente que tiene Word
97, no.
Quitando la parte del código donde abres el archivo «Remitos.dqy» y lo
combinas con el archivo de Word, que no lo he ejecutado, lo he probado con
Windows XP y funciona perfectamente: se abre el archivo que le he indicado y
se muestra sin ningún tipo de problema. ¿Dónde se produce el error?

Si tu cliente tiene debidamente registrado Microsoft Word, entiendo que no
debería de haber problemas para crear una referencia al objeto
«Word.Application» utilizando la función «CreateObject».

--
Enrique Martínez
[MS MVP - VB]
"Softjaen" @yahoo.es>
2003-07-21 17:09:30 UTC
Permalink
Donde digo «lo he probado con Windows XP» quería decir «lo he probado con
Microsoft Word XP». :-)

--
Enrique Martínez
[MS MVP - VB]
Diego
2003-07-21 17:09:28 UTC
Permalink
Si en mi Word 2000 tambien funciona perfecto, en la de mi cliente que tiene
Word 97, abre el Documento y trata de hacer una combinacion con el archivo
Remitos.dqy en lugar de realizar la consulta al SQLServer, por ende da error
y no combina, pero la apertura del archivo Word si funciona, lo que no es la
combinacion.

Saludos y gracias por tu ayuda.

Diego
Post by "Softjaen" @yahoo.es>
Post by Diego
Ok, tienes toda la razon, lo que pasa es que como justamente me estoy
volviendo loco por el tema lo aclare.
Estoy haciendolo a travez de un CreateObject, pero asi y todo no me
funciona, no entiendo porque.
En mi oficina me funciona con Word 2000, pero en el cliente que tiene Word
97, no.
Quitando la parte del código donde abres el archivo «Remitos.dqy» y lo
combinas con el archivo de Word, que no lo he ejecutado, lo he probado con
Windows XP y funciona perfectamente: se abre el archivo que le he indicado y
se muestra sin ningún tipo de problema. ¿Dónde se produce el error?
Si tu cliente tiene debidamente registrado Microsoft Word, entiendo que no
debería de haber problemas para crear una referencia al objeto
«Word.Application» utilizando la función «CreateObject».
--
Enrique Martínez
[MS MVP - VB]
"Softjaen" @yahoo.es>
2003-07-21 17:29:27 UTC
Permalink
Post by Diego
Si en mi Word 2000 tambien funciona perfecto, en la de mi cliente que tiene
Word 97, abre el Documento y trata de hacer una combinacion con el archivo
Remitos.dqy en lugar de realizar la consulta al SQLServer, por ende da error
y no combina, pero la apertura del archivo Word si funciona, lo que no es la
combinacion.
De combinación, poco te voy a poder ayudar, pero entiendo que el problema no
estará entonces en crear una instancia de Word, porque la apertura del
archivo parece que funciona.

Si estás utilizando una consulta SQL Server, me imagino que tú cliente
también dispondrá de dicho servidor de bases de datos, incluido el oportuno
«driver» para ODBC.

--
Enrique Martínez
[MS MVP - VB]
Diego
2003-07-21 17:56:52 UTC
Permalink
Si asi es, el tema es que el Word es como que no me esta leyendo el .dqy
como acceso y consulta a la base de SQL.

Saludos, Diego
Post by "Softjaen" @yahoo.es>
Post by Diego
Si en mi Word 2000 tambien funciona perfecto, en la de mi cliente que
tiene
Post by Diego
Word 97, abre el Documento y trata de hacer una combinacion con el archivo
Remitos.dqy en lugar de realizar la consulta al SQLServer, por ende da
error
Post by Diego
y no combina, pero la apertura del archivo Word si funciona, lo que no
es
Post by "Softjaen" @yahoo.es>
la
Post by Diego
combinacion.
De combinación, poco te voy a poder ayudar, pero entiendo que el problema no
estará entonces en crear una instancia de Word, porque la apertura del
archivo parece que funciona.
Si estás utilizando una consulta SQL Server, me imagino que tú cliente
también dispondrá de dicho servidor de bases de datos, incluido el oportuno
«driver» para ODBC.
--
Enrique Martínez
[MS MVP - VB]
Continúe leyendo en narkive:
Loading...