avvio e duplicazione userform

Salve, 
sono alle prime armi e quindi, per molti, porrò una domanda banale.
Sto realizzando la gestione di  un DB in excel ed il codice VBA è all'interno del file excel.
Ho un menù iniziale nel quale scelgo fra varie opzioni (inserimento, variazione e cancellazione). 
Questa userform parte in automatico all'apertura del file.xls e poi, su una delle scelte, passa il controllo alle schermate successive. 
Se clicco sulla X del menù (o sul tasto chiudi) questa prima schermata si chiude ma poi non riseco a farla partire di nuovo. E' necessario chiudere il file e poi riaprirlo o c'è la possibilità di far riavviare il menù? 
Inoltre, vorrei sapere come fare a  duplicare la schermata di inserimento perchè vorrei usarla anche per la visualizzazione e la cancellazione tenendo il codice separato. 
Grazie
 

Informazioni domanda


Ultimo aggiornamento febbraio 27, 2018 Visualizzazioni 772 Si applica a:
Risposta
Ciao Andrea,
ho provato come dici tu ma non funziona, mi dice sempre che la data è superiore ad oggi.
Ma ti spiego meglio cosa accade perchè credo che dipenda dal formato della mia data.
Io ho 3 combobox con le quali inserisco il gg (da 1 a 31) il mm (da 1 a 12)  e l'aaaa (da 2011 a 2012).
Poi compongo la data in un campo data = cbgg & "/" & cbmm & "/" & cbaaaa  ma
If data > Date Then  
' la data immessa è futura'

mi dice che la data è sempre superiore ad oggi anche se non è vero.
...

Ciao Patrizio,
lo supponevo che trattassi le date come testo, ma questa non è di sicuro la scelta migliore per eseguire confronti o operazioni sulle stesse. Molto meglio utilizzare una variabile data da formattarsi a necessità in formato 'human readable' nelle TextBox, quindi, ecco due alternative (per i dettagli leggi l'help delle funzioni) per restituire una variabile data, da utilizzarsi per il confronto come ti avevo già indicato:

Dim dtDataCorrente As Date

dtDataCorrente = DateValue("29 giugno 2013")
dtDataCorrente = DateSerial(anno, mese, giorno)
 
L'operazione inversa, da variabile data a data testo, la puoi ottenere con:

Dim strDataCorrente As String 
strDataCorrente = Format(dtDataCorrente, "dd/mm/yyyy") 

...
Approfitto della tua gentilezza per farti un'altra domanda.
Dal menù  Strumenti - Protezione, ho protetto il foglio di lavoro nel quale devo scrivere i dati con una psw e lo lascio comunque visibile.
Nel codice VBA, quando vado a scrivere faccio
ActiveSheet Unprotect

istruzioni per scrivere...

ActiveSheet.Protect
ActiveWorkbook.Save

ma mi chiede la psw per scrivere.
Dove sbaglio?
Grazie


Se hai protetto il foglio con una password, dovrai fornire la medesima password per proteggerlo, quindi:

ActiveSheet.Protect Password:="pwd"
 
qui il tuo codice

ActiveSheet.Unprotect Password:="pwd"

Ciao,
Andrea.

Andrea

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.

Risposta
grazie per il consiglio di buona programmazione del quale terrò conto.
però mi conservo questa sub preziosamente.
Ho un altro problema; con  la sub:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Not isDate(TextBox1.Text) Then
   MsgBox "Formato data non valida"
   TextBox1 = ""
  Cancel = True
End If
End Sub

controllo la validità della data.

Come faccio a controllare che non sia superiore a quella odierna?
Ancora grazie


http://www.maurogsc.eu/comefareperexcel/userformdata.aspx

 

Poi se devi utilizzare  il contenuto della TextBox (che è testo!!!) per confrontarlo con il contenuto di una cella, devi specificare in modo esplicito che la TextBox contiene una data. Ad esempio:

 

If CDate(TextBox1.Text) > Foglio1.Range("A1").Value

 

 

 

 

--
Mauro Gamberini
Microsoft© MVP (Excel)
http://www.maurogsc.eu

La risposta è risultata utile a 1 persona

·

Il problema è stato risolto?

Siamo spiacenti che questo non sia stato d'aiuto.

Fantastico! Grazie per aver scelto questa risposta.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento, ci aiuta a migliorare il sito.

Sei soddisfatto di questa risposta?

Grazie per il tuo commento.