VB6: un eseguible che utilizza Excel, si blocca al cambio di versione ...

mercoledì 26 gennaio 2005 - 14.01

quettih Profilo | Newbie

Ciao a tutti,
sto scrivendo diverse applicazioni di import di dati da XLS ad un portfolio di Asset Management (tale Argis di Computer Associates). Il problema che sto affrontando è il seguente: una applicazione VB compilata su una macchina con ad esempio excel 2000, non funziona su un computer con Excel 2002 o 2003. Questo vale anche al contrario, ovvero il programma funziona SOLO con excel della stessa versione utilizzata nel progetto. Se inoltre apro il progetto, dove nelle reference avevo collegat excel 2003, su un computer con excel 2000, nelle reference mi trovo un bel "missing: microsoft excel 11.0 object library".
Domanda: esiste una reference più "elastica" trasversale alle versioni di office? che workaround si usa in questi casi?

ciao!!

quettih Profilo | Newbie

Vi aggiungo un progettino semplice semplice che apre un file XLS, scrive 4 cose e si chiude...
nei reference ho utilizzato EXCEL 9.0 visto che io ho office 2000.
il file si chiama "Excel e stampa.ZIP"

Brainkiller Profilo | Guru

Ciao mitico,
si distribuiscono le DLL :)
Un uccellino mi ha suggerito di provare a fare così:

Dim exApp as Object
Set exApp=CreateObject("Excel.Application")

In questo modo non sei più vincolato ad una o all'altra versione.
Essendo però un oggetto generico (Object) non avrai l'intellisense.

Non ho potuto provare questa soluzione perchè non ho più VB6.0 :)

Fammi sapere se va.

ciao
david

quettih Profilo | Newbie

ahio!!
praticamente mi stai dicendo di fare come si faceva in ASP... createobject...
bhe.. provo... caso mai per avere l'intellisense e facilitarmi la vita, prima dichiaro nella reference la versione di XLS che ho sul mio sistema, e poi convertiro' la chiamata in "createobject"... potrebbe funzionare..
grazie per ora... ti faccio sapere
ricorda le stelline

quettih Profilo | Newbie

ahio!
in effetti sei un grande.. ma questo già lo sapevo da molti anni.... funziona. unica cosa il workbook non deve più essere definito
Dim excelWork As New Excel.Workbook

ma semplicemente
Dim excelWork As Object

mentre l'application è corretta cosi' come me l'hai scritta
Dim excelApp As Object
Set excelApp = CreateObject("Excel.Application")

ATTENZIONE: da versione a versione di XLS, alcuni comandi cambiano, anche se di poco... stiamo attenti a utilizzare comandi "comuni"!!

Brainkiller Profilo | Guru

Ciao mitico,
si il CreateObject non faceva parte di ASP ma dell'architettura COM quindi lo potevi usare sia in VB6 che in ASP.

>da versione a versione di XLS, alcuni comandi cambiano, anche se di poco... stiamo attenti a utilizzare comandi "comuni"!!
Infatti questo è il problema in cui puoi incorrere.

Evidentemente con il CreateObject prende il nome di classe va a leggere nel registro e istanzia la versione disponibile di Excel e quindi seleziona la versione corretta. Naturalmente come tu hai detto devi usare oggetti generici (Object).

ciao
david

quettih Profilo | Newbie

allora mi merito qualche stellina...

Brainkiller Profilo | Guru

Un bel cartone in testa e ne prendi 10 di stelline :)
ROTFL
Va bene ? :)

ciao
david

quettih Profilo | Newbie

tu devi averne presi di cartoni!!!! guarda quante stelline....

:-))

Brainkiller Profilo | Guru

mor sec !

ciao
david
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5