Imprimir página | Cerrar ventana

As Excel.Workbook o as Object?

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84570
Fecha de impresión: 26/Marzo/2026 a las 17:28


Tema: As Excel.Workbook o as Object?
Publicado por: indexdoc
Asunto: As Excel.Workbook o as Object?
Fecha de publicación: 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".



Respuestas:
Publicado por: Mihura
Fecha de publicación: 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.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: xavi
Fecha de publicación: 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

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: indexdoc
Fecha de publicación: 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
 



Imprimir página | Cerrar ventana