ciao
ho visto il tuo lavoro, ben fatto dal punto di vista strutturale.
Alcune cose:
- l'immagine sul foglio che viene generata dalla proc. legata al pulsante blu (Meteo), non viene cancellata e, pertanto se esegui la procedura più volte, avrai immagini sovrapposte. Inoltre gli cambierei posto, in quanto copre parte delle descrizioni in col. A.
- Ordinerei l'elenco della convalida in E1 (e, "pignoleria" cambierei il nome da regio
mi a regio
ni)
- assegnerei alle label ed alle combo della uForm dei nomi che richiamino cosa sono, es: al posto di ComboBox1: Localita - etc.
Toglierei la caption dalle label14 e label 16 e le rinominerei mMin e mMax......
Questo per avere una "lettura" comprensibile del codice.
- relativamente alla trasparenza non so aiutarti. (Se per esempio fai una prova ed apri un png con paint e lo salvi in jpg, paint ti dice che perdi la trasparenza.)
- Quando azzeri le variabili, non c'è bisogno di scrivere per esempio:
If Not oIP Is Nothing Then Set oIP = Nothing
ma basta
Set oIP = Nothing
Non serve testarne lo stato.
Infine "credo" che tu abbia un concetto errato dell' On Error Resume Next, in quanto lo trovo un po' dappertutto e NON serve a gestire gli errori.
Gli errori vanno gestiti in un altro modo, es:
Sub TuaSub ()
Dim.....
On error GoTo errori
qui eventuali applicazioni disattivate:
-------------------------------------
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
--------------------------------------
TUO CODICE
esci:
qui ripristino eventuali applicazioni disattivate e azzeramento variabili
------------------------------------------------
With Application
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
-----------------------------------------------
Exit Sub
errori:
MsgBox "Errore " & Err.Number & " - " & Err.Description
Resume Esci
End Sub
Per quanto riguarda On Error Resume Next, tale istruzione può essere usata in casi particolari, MA POI si deve annullare con On Error GoTo 0, per passare all'interprete gli eventuali errori non voluti.
Detta istruzione non fa altro che passare alla riga successiva l'esecuzione del codice, quindi (e mi sembra che lo sai a tue spese) capisci bene i danni che potrebbe causare.
Ti faccio un piccolo esempio:
ipotizziamo che tu voglia creare un foglio nuovo in un documento, chiamandolo "temporaneo".
Se il foglio già esiste e tenti di crearlo, l'istruzione andrebbe in errore.
In questo casi si che va usato On error Resume Next, ma, come vedi, subito dopo va annullato (on Error GoTo 0) per la ragione su esposta:
.....
On Error Resume Next 'QUI SE IL FOGLIO TEMPORANEO ESISTE PASSA IL CONTROLLO ALLA RIGA SUCCESSIVA
Worksheets("temporaneo").Delete
On Error GoTo 0 'QUI RIPRISTINA IL CONTROLLO DEGLI ERRORI
Application.DisplayAlerts = True
ActiveWorkbook.Sheets.Add Before:= etc etc
ActiveSheet.Name = "temporaneo"
....
saluti
[Modificato da dodo47 05/07/2020 17:27]
Domenico
Win 10 - Excel 2016