• Domingo 22 de Diciembre de 2024, 18:50

Autor Tema:  Visual Basic ¿cargar Referencias?  (Leído 2884 veces)

patillaldi

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Visual Basic ¿cargar Referencias?
« en: Jueves 11 de Diciembre de 2003, 20:15 »
0
Estoy utilizando las librerias de Word para hacer un programa que interaccione con Word. Entonces en Visual Basic cargo en Proyecto/Referencias -> la referencia al objeto de Word. Pero me he enterado de que el nombre de esa libreria cambia de una versión de Word a otra. En Word 2000 se llama Word Type Library 9 mientras que en Word2003 se llama Word Type Library 11.
Entonces si utilizo la aplicación en un ordenador que tenga una versión diferente de Word supongo que no me funcione, ¿verdad?

Entonces, como puedo cargar las referencias desde código para que detectando la versión de Word cargó una libreria u otra.

Espero vuestras respuestas. Gracias.

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Visual Basic ¿cargar Referencias?
« Respuesta #1 en: Viernes 12 de Diciembre de 2003, 09:34 »
0
Hola patillaldi.

Una forma de evitar ese problema es la siguiente:

Elimina la referencia a Word.
Cambia las variables que referencien clases de Word definiéndolas como Object.
Crea las instancias a las clases utilizando CreateObject (o GetObject según el caso), de una forma tal que así:

'Utilizando referencias a word
Dim wordApp As Word.Application
Set wordApp = New Word.Application

'Si utilizar referencias
Dim objApp As Object
Set objApp = CreateObject("Word.Application")

De todas formas, alguna vez tengo visto que las referencias se pueden cargar/descargar mediante código pero no recuerdo cómo. Creo que era con LoadReference o algo por el estilo (aunque evidentemente LoadReference no es).

Suerte.
Suerte.

FRIJU

  • Miembro MUY activo
  • ***
  • Mensajes: 158
    • Ver Perfil
Re: Visual Basic ¿cargar Referencias?
« Respuesta #2 en: Lunes 15 de Diciembre de 2003, 08:04 »
0
Igual os vale esto:
Public Function MiraReferenciasVBA()
   
    Dim Ref As Reference
   
   'Puede servir para cuando distribuyamos una aplicacion
   'con referencias externas a funciones inmersas en: OCX,DLL, MDE, MDB...)
   'que nosotros en el proyecto hemos referenciado desde una determinada ubicación
   'local de nuestro PC y a la hora de ejecutar el programa el usuario, pueda dar errores
   'por no tener dichas referencias o tenerlas en otra ubicacion distinta
   'y de esta forma el usuario nos pueda avisar de esta contingencia.
   'Esta función se puede poner en el formulario de inicio de la aplicación
   'para avisar al usuario de este tema.
   
    For Each Ref In References
        If Ref.IsBroken = True Then
        If CrearNuevaReferencia("C:\FondoAccess.dll") = False Then
             MsgBox "No se ha podido regenerar la referencia.", vbCritical + vbOKOnly, "Aviso"
        Else
             MsgBox "La Referencia, " & Ref.FullPath & " se ha establecido", vbExclamation + vbOKOnly, ""
         End If
       
        End If
    Next Ref
End Function

Public Function CrearNuevaReferencia(PathCompletoFichero As String) As Boolean
    Dim Ref As Reference

    On Error GoTo Error_CrearNuevaReferencia
    Set Ref = References.AddFromFile(PathCompletoFichero)
    CrearNuevaReferencia = True

Exit_CrearNuevaReferencia:
    Exit Function

Error_CrearNuevaReferencia:
    MsgBox "Aviso Nº: " & Err & "..." & Err.Description & " [" & PathCompletoFichero & "]", vbCritical + vbOKOnly, "Aviso de Error"
    CrearNuevaReferencia = False
    Resume Exit_CrearNuevaReferencia
End Function

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Visual Basic ¿cargar Referencias?
« Respuesta #3 en: Lunes 15 de Diciembre de 2003, 15:05 »
0
Algo así había visto en algun sitio... pero ¿sabes de que proyecto son miembros las clases Reference y References?

Agur.

patillaldi

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Visual Basic ¿cargar Referencias?
« Respuesta #4 en: Lunes 15 de Diciembre de 2003, 20:26 »
0
Muchas gracias. Me ha funcionado con lo de crear la varible de tipo Object y luego hacer el createObject. Asi que por ahora de cargar referencias paso porque lo de createobject funciona perfectamente.

¿Sabeis algo sobre la correspondencia con Word? Porque ya tengo la aplicación que me funciona perfectamente pero tengo unos problemas:

1) utilizo OpenDataSource para abrir un origen de datos atraves de ODBC y asi obtener los campos para la fusión. Pero la sentencia SQL para obtener datos solo puede tener 255 caracteres junto con la sentencia2 Sql un total de 510 caracteres y es muy poco espacio para hacer select con Alias y con bastantes Joins.
¿Alguna idea para solventar este problema?

2) en caso de que no pueda utilizar Alias para no hacer muy grande las sentencias SQL, se puede cambiar el nombre de los campos para que sean más descriptivos
cod_cliente (Base de datos ) -> Codigo de Cliente (descripcion visible desde Word)
Lo he intentado con MailMerge.DataSource.Fields.Item(1).Name pero esta propiedad es de solo lectura ¿Alguna sugerencia?