Semplifica , evita di dichiarare variabili di cui puoi fare a meno in certe circostanze e inserisci un minimo di controlli.
- Abituati a commentare il codice in modo da facilitare una successiva rilettura/aggiornamento/implementazione.
- Se hai bisogno solo di leggere la tabella è bene impostare readonly e garantisci di non interferire sui dati del database, non si sa mai ;-)
- Non far eseguire parte del codice se non serve, ma solo se le condizioni sono soddisfatte.. tipo la definizione del range worksheets che eseguirai solo se hai dei records da importare nel foglio di lavoro. (vedere If Not rs.EOF Then)
Esempio :
Sub YourSub()
On Error GoTo ErrorH
' open connection sqlserver database
Dim conn As New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB;Data Source=xx ;Initial Catalog=xx;User ID=sx;Password=xx;"
conn.Open
' set recordset
Dim rs As New ADODB.Recordset
rs.Open "SELECT xx FROM xx WHERE x like '%%';", conn,adOpenForwardOnly, adLockReadOnly
' read records and populate excel worksheet
If Not rs.EOF Then
' set sheet
Dim startCell As Range
Set startCell = ThisWorkbook.Worksheets("Foglio1").Range("A1")
' set header
Dim i As Integer
For i = 0 To rs.Fields.Count - 1
startCell.Offset(0, i).Value = rs.Fields(i).Name
Next i
' import rows
startCell.Offset(1, 0).CopyFromRecordset rs
' completion message
MsgBox "Import completed", vbInformation, "Info"
Else
MsgBox "No data to import has been found", vbInformation, "Info"
End If
' close database
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
Exit Sub
ErrorH:
MsgBox "Error. . . " & Err.Description, vbCritical, "Error"
' close dtabase on error
If rs.State = adStateOpen Then
rs.Close
Set rs = Nothing
End If
If conn.State = adStateOpen Then
conn.Close
Set conn = Nothing
End If
End Sub
Adesso che hai i dati nel foglio excel devi aggiornare la tabella del database impostando un booleano = True ?