Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    30

    VB. 6.0 Problemi con excel 2007

    Ciao a tutti, ho un'applicazione la quale va a leggere un foglio excel e trasferisce i dati in un database.
    Andava tutto bene fino a che non ho cambiato excel da 2003 a 2007, infatti ora quando l'applicazione apre il foglio excel mi viene fatta la seguente domanda:

    Salvare le modifiche apportate a "CARDINIS_AOL_XLS"?
    All'aperture dei file salvati con una versione precedente di Exce, le formule contenute vengono ricalcolate.

    e viene richiesto Si No Cancella.

    a qualcuno è già capitato ? e secondo voi è possibile simulare la pressione del taasto No da codice in maniera da poter proseguire con l'applicazione ?
    o può esserci un'altra soluzione ?

    intanto grazie a tutti per l'attenzione

    ciao

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    30
    Direi che hai ragione, volevo fare anche una precisazione.
    Il sistema più facile per risolvere il problema sarebbe quello di salvare il modulo excel in formato 2007 ma non è possibile perchè il programma risiede in una rete aziendale e non tutti i pc hanno excel 2007.

    Questo è il codice di aperture per l'excel.

    Dim appExcel As Excel.Application
    Dim worExcel As Excel.Workbook

    Set appExcel = New Excel.Application
    Set worExcel = appExcel.Workbooks.Open(nomef2)
    For X = 1 To 3
    For Y = 2 To 4000
    sCliente = worExcel.Sheets(X).Cells(Y, 7)
    sAppl = worExcel.Sheets(X).Cells(Y, 4)
    ........
    Next
    Next

    ciao

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    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


  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    30
    Grazie mille per la tua spiegazione Gibra, purtroppo oggi sono incasinato col lavoro, ma questa sera provo a cambiare il codice poi ti faccio sapere.
    grazie ancora e buona giornata a tutto il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    30
    Ciao Gibra, ieri sera ho fatto una prrova e il risultato è stato positivo.
    Metto il pezzo di codice pel l'accesso, non si sà mai che possa servire.

    Dim appExcel As Object
    Dim worExcel As Object

    'Creo la nuova applicazione
    Set appExcel = New Excel.Application

    'Attraverso la nuova applicazione apro il Workbook
    'assegnandolo alla variabile oggetto xlBook
    Set worExcel = appExcel.Workbooks.Open(nomef2)

    Dim sID As String
    Dim sBanca As String


    For X = 1 To 3
    'Decido quale foglio utilizzare
    If X = 1 Then
    Set appExcel = worExcel.Worksheets("AOL_CARDINIS")
    ElseIf X = 2 Then
    Set appExcel = worExcel.Worksheets("AOL_CONSEGNATO")
    ElseIf X = 3 Then
    Set appExcel = worExcel.Worksheets("AOL_CHIUSO")
    ElseIf X > 3 Then
    GoTo FineElaborazione
    End If
    'ricavo i dati
    For Y = 2 To 100
    sBanca = appExcel.Cells(Y, 7).Value
    sID = appExcel.Cells(Y, 3).Value
    Call VerificaNumeri(sID)
    If sID = "" Then
    GoTo ProsimoFoglio:
    End If
    Next
    ProsimoFoglio:
    Next

    FineElaborazione:

    ciao e grazie per l'aiuto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.