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!!! ;-)