** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - As Excel.Workbook o as Object?
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAs Excel.Workbook o as Object?

 Responder Responder
Autor
Mensaje
indexdoc Ver desplegable
Moderador
Moderador


Unido: 22/Marzo/2005
Estado: Sin conexión
Puntos: 2157
Enlace directo a este mensaje Tema: As Excel.Workbook o as Object?
    Enviado: 20/Junio/2019 a las 22:41
¿Soleis declarar en Acces /Office365  libros excel como Excel.Workbook o como Object?    
Por una parte tienes la ventaja de acceder a todas sus propiedades nada mas empezar a usar en programacion ese libro, pero puede que haya problemas de compatiblidad entre versiones diferentes o que no se reconozcan algunas constantes de Excel. 

En general ,¿que os dado mejor resultado?. Estoy llevando en las ultimas versiones mas cosas a lo que se conoce como "late binding".
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 20/Junio/2019 a las 23:00
Hola Jorge,

Yo siempre los declaro como Object.

En caso de necesitarlo para desarrollo, lo declaro para esaspruebas como Excel.Workbook, aunque al usar automatización siempre tienes el Excel (o el Word) abierto y te permite cambiarte 'manualmente' desde Access al otro programa, con lo cual ya tienes todo en línea, incluyendo la 'imprescindible' grabadora de macros.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 20/Junio/2019 a las 23:22
Os cuento como lo manejo yo. Utilizo constantes a nivel de compilador para evitarme estar cambiando 

Tengo un módulo dónde lo pongo todo:
#Const UseObjectLibrary_XLS = False
#Const UseObjectLibrary_OLK = False
#Const UseObjectLibrary_FSO = False
#Const UseObjectLibrary_MSO = False
#Const UseObjectLibrary_WRD = False

' ##################################################    EXCEL
#If UseObjectLibrary_XLS Then
    Public Const blnUseObjectLibrary_XLS    As Boolean = True
    Public xlsApp                           As Excel.Application
#Else
    Public Const blnUseObjectLibrary_XLS    As Boolean = False
    Public xlsApp                           As Object
    ' Varias
    Public Const xlVeryHidden = 2
    Public Const xlPrintNoComments = -4142
    Public Const xlLandscape = 2
    Public Const xlAutomatic = -4105
    Public Const xlDownThenOver = 1
    Public Const xlPrintErrorsDisplayed = 0
    Public Const xlDelimited = 1
    Public Const xlTextQualifierDoubleQuote = 1
    Public Const xlWorkbookDefault = 51
    Public Const xlOpenXMLWorkbook = 51
    Public Const xlCellTypeVisible = 12
    Public Const xlContext = -5002
    ' Direccion
    Public Const xlDown = -4121
    Public Const xlUp = -4162
    Public Const xlLeft = -4159
    Public Const xlRight = -4161
#End If

' ##################################################    OUTLOOK
#If UseObjectLibrary_OLK Then
    Public Const blnUseObjectLibrary_OUT    As Boolean = True
    Public olkApp           As Outlook.Application
    Public olkNs            As Outlook.Namespace
    Public olkFolder        As Outlook.folder
    Public olkMail          As Outlook.MailItem
    Public olkPrp           As Outlook.UserProperty
    Public olkAccount       As Outlook.Account
    Public olkAttach        As Outlook.attachment
#Else
    Public Const blnUseObjectLibrary_OUT    As Boolean = False
    Public olkApp           As Object
    Public olkNs            As Variant
    Public olkFolder        As Object
    Public olkMail          As Variant
    Public olkPrp           As Variant
    Public olkAccount       As Variant
    Public olkAttach        As Variant
    Public Const olMailItem = 0
    Public Const olMSG = 3
    Public Const olByValue = 1
    Public Const olByReference = 4
    
    ' Formateo de mensajes (BodyFormat)
    Public Const olFormatUnspecified = 0
    Public Const olFormatPlain = 1
    Public Const olFormatHTML = 2
    Public Const olFormatRichText = 3
#End If

(es más largo pero como idea ya vale)

Premisas
- los objetos Excel y Outlook siempre se llaman igual: xlsApp y olkApp
- en Outlook todos los "sub-objetos" también tienen el mismo nombre

Durante el diseño marco la librería y cambio la constante #Const a True
De esa forma el Intellisense se activa. cuando termino desmarco y devuelvo a False.

Obviamente cada vez que añado constantes de Excel o Outlook, debo declararlas en la parte "del #Else" de cada tipo de datos.

Caramba! lo acabo de leer y no se si me he explicado demasiado bien... Cualquier duda preguntáis.

Un saludo

Xavi, un minyó de Terrassa

Mi web
Arriba
indexdoc Ver desplegable
Moderador
Moderador


Unido: 22/Marzo/2005
Estado: Sin conexión
Puntos: 2157
Enlace directo a este mensaje Enviado: 23/Junio/2019 a las 20:21
Dos buenas aportaciones!  usar Excel.workbook para pruebas y al final cambiarlo por Object y que se busque la vida.  Lo de copiar las constantes mas usadas genial, no habia reparado en que Intelisense las pilla.  
un saludo
 
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable