avvio e duplicazione userform

Anonimo
2013-06-28T09:46:34+00:00

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

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-06-29T07:42:36+00:00

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

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-06-29T07:10:22+00:00

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.

La risposta è stata utile?

0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-06-28T13:06:08+00:00

                   

    Ho aggiunto la tua macro e va bene, ma se volessi evitare di far fare "Esegui macro" etc. e volessi far avviare il menù (anche all'apertura del file) sempre con la pressione del click destro del mouse, come posso fare?

    Quale menu?

    Se intendi lanciare la macro che visualizza la UserForm, vedi qui il punto 5 e seguenti:

    http://www.maurogsc.eu/excel/xlsdoveinserirecodice.aspx

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-06-28T10:54:01+00:00

    Ciao,

    grazie per la risposta e specifico meglio quanto detto prima.

    Mi accontento di memorizzare i miei dati in un foglio excel, di vederli e cancellarli (per il momento).

    Il mio menù è in una userform che si apre in automatico all'apertura del file excel.

    Ho aggiunto la tua macro e va bene, ma se volessi evitare di far fare "Esegui macro" etc. e volessi far avviare il menù (anche all'apertura del file) sempre con la pressione del click destro del mouse, come posso fare?

    garzie

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-06-28T10:27:12+00:00

                   

    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ù?

    Una cosa alla volta.

    Excel può avere delle tabelle sui fogli, ha alcune funzionalità *simili* a quelle di un db, ma non è un db.

    Il menu del quale scrivi, si trova sulla UserForm?

    Se chiudi la UserForm, puoi rilanciarla con una macro tipo:

    Public Sub m()

        NomeDellaUserForm.Show

    End Sub

    Ovviamente la UserForm *partirà da zero*, quindi non avrà eventuali dati presenti alla sua chiusura.

    C'è la possibilità di avere la UserForm che *galleggia* sui fogli senza impedirti di poter scrivere nelle celle: questo il codice che la visualizza in questo modo:

    Public Sub m()

        NomeDellaUserForm.Show vbModeless

    End Sub

    Ancora, c'è la possibilità di *nascondere* il pulsante X di chiusura della UserForm e gestirne poi la chiusura con un pulsante tuo creato ad hoc.

    Ho aggiunto un esempio qui:

    http://www.maurogsc.eu/esempiforum13/chiusurauserform.zip

    Se premi CTRL+a hai una UserForm (UserForm1) *senza* la X di chiusura e con un pulsante che gestisce la chiusura.

    Se premi CTRL+s hai una UserForm che premendo il pulsante X di chiusura, chiede conferma della chiusura stessa.

    I codici sono nei moduli di codice delle due UserForm.

    La risposta è stata utile?

    0 commenti Nessun commento