Secondo me l'errore sta nell'usare l'EarlyBinding, quando invece devi usare il LateBinding.
Il tuo codice da per scontato che nel computer via sia la libreria di Excel della versione 2003, quindi quando non trova la 2003 ma la 2007 va in palla.
Non si deve mai referenziare una libreria direttamente nel progetto, cioè usando l'EarlyBinding, ma sempre e solo in LateBinding, cioè usando CreateObject(), altrimenti quando si cambia versione.... patatrac!
Logicamente dovrai portarti dentro ANCHE tutte le costanti di Excel che usi nel progetto perchè in LateBinding non sono più referenziate, ad esempio per disegnare un bordo di una cella servono queste
codice:
Const xlAutomatic = -4105
Const xlEdgeLeft = 7
Const xlEdgeTop = 8
Const xlEdgeBottom = 9
Const xlEdgeRight = 10
Const xlContinuous = 1
Const xlThin = 2
La cosa migliore da fare è utilizzare le Istruzioni di compilazione condizionale , così da usare l'EarlyBinding in progettazione, ed il LateBinding nell'esecuzione compilata.
In questo caso non importa quale versione di Excel avrai referenziato nel progetto, una volta compilato il programma invece sfrutterà il LateBinding utilizzando la libreria presente sul quel computer.
Se poi nelle proprietà del progetto imposti un Argomento di compilazione condizionale allora potrai eseguire il progetto come se lo stessi eseguendo su un'altro computer.
Esempio:
Argomento di compilazione condizionale: LateBinding = 0
Istruzioni di compilazione condizionale (nel codice):
codice:
#If LateBinding Then
Rem EXE stand alone
Const sModalita = "LateBinding"
Dim myExcel As Object 'Excel.Application
#Else
Rem IDE di VB
Const sModalita = "VB IDE"
Dim myExcel As Excel.Application
#End If
Poi, quando devi creare l'istanza dell'oggetto
codice:
#If LateBinding Then
Set myExcel = CreateObject("Excel.Application")
#Else
Set myExcel = Outlook.Application
#End If
Ora, essendo LateBinding = 0, il progetto sarà eseguito in modalità normale: EarlyBinding, utilizzando la libreria referenziata.
Se invece imposti LateBinding = 1, il progetto sarà eseguito in modalità LateBinding, ovvero usando la CreateObject() che creerà l'oggetto myExcel sempre corretto che ricaverà dalla versione di Excel sul computer corrente.
Vedi la guida di VB6 per come funzionano le Istruzioni di compilazione condizionale