Newsgroup: it.comp.lang.visual-basic
Titolo: Errore di Automazione - un po lungo - soluzione?

ho sviluppato (tre anni fa....) per un mio cliente un pgm (VB5 + sp3)
che fa un utilizzo smodato di automazione excel per le stampe...
il pgm è utilizzato in più succursali del mio cliente e tutto ha
funzionato perfettamente fino a pochi giorni fa...
poi una SH ha sviluppato un altro programma (XP + VB6 + sp5)  che una
volta installato sui computer dove girava il mio PGM provoca
l'errore di automazione -21470230067 alle mie chiamate a excel.
ho indagato sul sito di supporto MS ed ho scoperto che l'errore è
generato dalle seguenti librerie:
oleaut32.dll
asycfilt.dll
stdole2.tlb
olepro32.dll
che il setup dell'altra applicazione ha installato sui computer.
Come risolvere il problema con una patch visto che le
macchine dove è installato il mio PGM sono sparse per l'italia... e
per me inaccessibili?
secondo voi è sufficiente ridistribuire solo le librerie originarie...
con un setup ad hoc che non modifichi l'eseguibile?
se le sovrascivo volgarmente cosa succede a livello di registrazione?
Se installo le dll nella cartella dell'applicazione (lasciando nella
system quelle che ha installato in nuovo pgm) le librerie saranno
correttamente chiamate?
grazie a chi mi suggerisce qualche soluzione....
palmiro
PS il giorno che MS rilascerà delle librerie con una completa
compatibilità all'indietro GIURO che mi sbronzo.....

 compatibilità all'indietro GIURO che mi sbronzo.....
Ecco, ma finiremo tutti stesi per terra?


http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B320108
l'errore si verifica quando creo l'oggetto excel
e prima che sui computer venissero installate le nuove librerie tutto
funzionava perfettamente.
la pagina di supporto microsoft indica chiaramente che il problema sta
nelle diverse versioni delle librerie in particolare quelle di XP.
putroppo non posso ricreare i setup dei programmi come suggerisce MS
come soluzione.
il mio grosso problema è che non posso neanche andare a fare dei test
sulle macchine del cliente che come ho detto sono sparse in mezza
italia.... ma ho la certezza che su tutte le macchine dove è stato
installato il nuovo software (XP +VB6 + SP5) il mio programma si
blocca.
e devo trovare una soluzione tramite una patch...
quello che mi viene in mente è:
1) rimettere le librerie della mia applicazione nella windows\system e
fregarmene dell'altra applicazione.... (ma c'è il problema di
deregistrare e registrare le librerie....)
2) mettere le mie librerie nella cartella dell'applicativo e sperare
che nella logica del VB il PGM le vada a cercare innanzitutti nella
sua app.path piuttosto che nella system.
cosa suggerisci tra le due soluzioni o ne hai altre?
ciao e grazie
palmiro

 compatibilità all'indietro GIURO che mi sbronzo.....
Se aspetti quel giorno, puoi anche rimanere astemio ;-).
Bye, G.
--
Astenersi guerre di religione, lo so che la MS non è l'unica
con questo problema...


Le olb per Excel sono perfettamente compatibili all'indietro.
Il problema potrebbe nascere da una mania che si era diffusa tempo fa, che
tendeva a generare direttamente il workbook con il createobject, anzichè
l'application.
Questa 'mala-usanza', sebbene scoraggiata da alcuni articoli MS, si era
diffusa, e ha generato una marea di problemi quando sono uscite nuove
versioni di Excel, che avevano un object model diverso, ma assolutamente
compatibile con l'approccio corretto.
Per risolvere il problema, un setup è fortemente sconsigliabile, e
presumibilmente inutile (non puoi certo andare a sovrascrivere dll più
recenti con versioni vecchie...).
Prova a postare il pezzo di codice in cui ti genera l'errore. Se il problema
è lì, puoi correggerlo, ricompilare e ridistribuire con una semplice
sovrascrittura dell'exe.
Alberto

sovrascrittura dell'exe.
questo č il codice che utilizzo per creare l'oggetto excel
Public GoExcel As Excel.Application
Public obj_sheet As Excel.Worksheet
Function MSExcelOpen()
        Screen.MousePointer = 11
        On Error Resume Next
        Set GoExcel = Nothing
        Set GoExcel = GetObject(, "Excel.Application")
        If Err = 429 Then
                Set GoExcel = CreateObject("Excel.Application")
        End If
        If GoExcel Is Nothing Then
            MsgBox "Impossibile utilizzare l'oggetto Excel ...
", 64, "Errore"
            MSExcelOpen = False
        Else
            If Not GoExcel.Visible Then
                    GoExcel.Visible = True
                    GoExcel.WindowState = xlMinimized
            End If
            MSExcelOpen = True
            GoExcel.WindowState = xlMinimized
        End If
                DoEvents
        Screen.MousePointer = 0
End Function
questo č dove lo utilizzo ... come ho detto prima non posso fare debug
sulle macchine dove č installato il pgm.. ma solo sulla mia di
sviluppo e lě non rilevo errori....
If MSExcelOpen() Then
            Screen.MousePointer = 11
            riga_excel = 1
                    obj_sheet.Rows(riga_excel).Font.Bold = True
                    obj_sheet.Cells(riga_excel, 1) = "INIZIALE"
                    obj_sheet.Cells(riga_excel, 2) = "Stanziato"
                    obj_sheet.Cells(riga_excel, 3) = "Crediti"
                    obj_sheet.Cells(riga_excel, 4) = "Incassato"
                   ................
                   piu altri dato che arrivano da un recordset.....
                  eccetera eccetera....
                  ...........................
                   Screen.MousePointer = 0
                   GoExcel.Worksheets("Entrate").Activate
                  GoExcel.WindowState = xlMaximized
end if
	poi "uccido" l'oggetto 
Sub MSExcelKill()
    On Error Resume Next
                    GoExcel.WindowState = xlMaximized
                    GoExcel.Quit
                    Set GoExcel = Nothing
                    Set obj_sheet = Nothing
    Exit Sub
errore:
    MsgBox Err.Description
    Exit Sub
End Sub

per albe...  
scusa ho dimenticato di postare il codice dove creo le cartelle...
Sub inizializza_cartella()
        Dim i As Integer
        GoExcel.Workbooks.Add
        GoExcel.ActiveWorkbook.Worksheets.Add
        GoExcel.ActiveWorkbook.Worksheets.Add
        GoExcel.ActiveWorkbook.Worksheets.Add
        GoExcel.ActiveWorkbook.Worksheets.Add
        If Quadro_Excel = 3 Then
                GoExcel.Worksheets(1).Name = "Entrate"
                GoExcel.Worksheets(2).Name = "Uscite"
                GoExcel.Worksheets(3).Name = "Cassa"
        Else
                GoExcel.Worksheets(1).Name = "Entrate"
                GoExcel.Worksheets(2).Name = "Uscite"
                GoExcel.Worksheets(4).Name = "Cassa"
        End If
        For i = 1 To GoExcel.Worksheets.Count
            If GoExcel.Worksheets(i).Name = "Entrate" Or
GoExcel.Worksheets(i).Name = "Uscite" Or GoExcel.Worksheets(i).Name =
"Cassa" Then
               GoExcel.Worksheets(i).Visible = True
            Else
                GoExcel.Worksheets(i).Visible = False
            End If
        Next i
End Sub
palmiro....