Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Leggere dati da diversi file Excel (era: Principiante Chiede Aiuto!!! )

$
0
0

Buongiorno a tutti!!!

Chiedo umilmente il vostro aiuto per risolvere un errore di cui non capisco l'origine del mio programma scritto in visual basic. Premetto dicendo che sono assolutamente un principiante e che il codice che ho scritto è stato frutto di un minimo di conoscenza di programmazione (ma davvero minimo) e da quanto ho potuto trovare in rete e sul forum!

Il programma che ho scritto non è altro che un'interfaccia grafica ad alcuni fogli excel usati come database (non mi uccidete!!! ;-)) tramite la quale è possibile inserire i dati, salvarli e visualizzarli in seguito. I dati inseriti fanno riferimento a una giornata di lavoro.I file excel sono organizzati in 12 foglio (1 per ciascun mese) e su ogni foglio ho tante righe quanti i giorni del mese associato.

Veniamo al nocciolo della questione: Il programma, quando si apre, deve mostrare in una delle svariate textbox un dato inserito il giorno prima; ovviamente questo deve valere anche se il giorno in questione è il primo del mese: fin qui nessun problema... creo una nuova applicazione excel che fa riferimento a un nuovo foglio e gli dico di leggere l'ultima riga

oExcel3 = CreateObject("Excel.Application")
oBook3 = oExcel3.Workbooks.Open(DIR3)         #Specifico la directory del file
oSheet3 = oBook3.WorkSheets(Form2.ComboBox1.Items(m - 2))   #Specifico il foglio (mese) 

 

Il problema nasce quando il giorno in questione è il 1 Gennaio: in questo caso il dato precedente deve essere recuperato da un altro file... sostanzialmente il codice che ho scritto è analogo a quanto vi ho mostrato prima (con directory scelta appositamente) ma quando eseguo un controllo per verificare chela data aperta sia di un nuovo giorno (dati da inserire) o uno vecchio (dati gia inseriti) mi da l'errore "riferimento a un oggetto non impostato su un'istanza di oggetto".

Il problema è che non capisco proprio il motivo visto che le stringhe di codice sono esattamente le stesse dei casi "primo del mese".

 

Vi incollo il mio codice sperando possiate aiutarmi!!!

 

Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        msc = CreateObject("MSScriptControl.ScriptControl")
        msc.Language = "VBScript"
        DateTimePicker1.Value = New DateTime(Val(y), Val(m), Val(int))

        m = DateTimePicker1.Value.Month
        y = DateTimePicker1.Value.Year
        int = DateTimePicker1.Value.Day

        DIR2 = My.Settings.PercorsoDataBase + "\" + y + ".xls"

        oExcel2 = CreateObject("Excel.Application")
        oBook2 = oExcel2.Workbooks.Open(DIR2)
        oSheet2 = oBook2.WorkSheets(Form2.ComboBox1.Items(m - 1))

        Dim cella2 As Object = oSheet2.Cells

        TextBox1.Text = cella2(int + 1, 5).Value
        TextBox2.Text = cella2(int + 1, 6).Value
        .

        .

        .
        TextBox39.Text = cella2(int + 1, 42).Value
        TextBox38.Text = cella2(int + 1, 43).Value

        If int = 1 Then
            If m = 1 Then
                DIR3 = My.Settings.PercorsoDataBase + "\" + Convert.ToString(Val(y) - 1) + ".xls"

                oExcel3 = CreateObject("Excel.Application")
                oBook3 = oExcel3.Workbooks.Open(DIR3)
                oSheet3 = oBook3.WorkSheets(Form2.ComboBox1.Items(11))

                Dim rng3 As Object = oSheet3.UsedRange

                ROW3 = rng3.Rows.Count

                If cella2(int + 1, 43).Value = 0 Then
                    Dim cella3 As Object = oSheet3.Cells
                    TextBox32.Text = cella3(ROW3, 43).Value
                    cella3 = Nothing
                Else
                    TextBox32.Text = cella2(int + 1, 32).Value
                End If

                rng3 = Nothing
                oSheet3 = Nothing
                oBook3.Close()
                oBook3 = Nothing
                oExcel3.Quit()
                oExcel3 = Nothing
            Else

                  CASO PRIMO DEL MESE

 End If

    CASO NORMALE

End If

 

La parte in grassetto è la riga di codice che mi genera l'errore! 

Vi prego... Sto diventando matto!!!

 

PS: mi rendo conto che il codice è tutto fuorchè bello, elegante, efficiente ecc ecc... probabilmente la maggior parte di voi si metterà le mani nei capelli leggendolo... sappiate che vista la mia inesperienza ho preferito arrivare a un qualcosa che funzionasse a discapito ahimè dell'eleganza!!! Siate clementi!!! ;-)


Viewing all articles
Browse latest Browse all 2212