SetFocus



  • SetFocus
    di francesco (utente non iscritto) data: 06/06/2016 18:39:58

    Ho una form con tre textbox 1,2, 3 e un pulsante di chiusura.
    per evitare che si esca dalla textbox1 senza avere immesso dei dati ho questo codice:

    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If UserForm4.TextBox1 = "" Then
    ' UserForm4.TextBox1.SetFocus
    Cancel = True
    End If
    End Sub

    avendo eliminato la X di chiusura con le API questo è il codice che dovrebbe chiudere il form:

    Private Sub CommandButton2_Click()
    Unload UserForm4
    UserForm1.ComboBox1.SetFocus
    End Sub

    cosa che non avviene perché a mio avviso viene impedito dalla mancanza di dati nella text, si può trovare una soluzione,
    grazie.




  • di Marius44 data: 07/06/2016 22:06:29

    Ciao Francesco
    se fino ad ora nessuno ha risposto è perchè, ritengo sei stato ermetico. E' sempre meglio allegare un file, senza dati sensibili, per poterci lavorare sopra.

    Ma guardando ciò che hai scritto penso ci sia un errore. Dici:

    " Ho una form con tre textbox 1,2, 3 e un pulsante di chiusura. "

    ma nella macro relativa al pulsante scrivi:

    " UserForm1.ComboBox1.SetFocus "

    Ma ti funziona o ti dà qualche errore perchè non c'è alcun ComboBox1?

    Prova a rivedere attentamente il codice.
    Ciao,
    Mario



  • di Gianfranco data: 07/06/2016 22:24:56

    Ciao
    Marius

    ho ricreato il file con quattro form
    nel primo ho messo la combo
    ora a parte che il codice dovrebbe essere

    altrimenti che ci vado a fare nella combo?


    è vero quel che dice il ns amico
    se non esce dal circolo vizioso
    If UserForm4.TextBox1 = "" Then
    ' UserForm4.TextBox1.SetFocus

    non avrà la possibilità di premere quel pulsante



     Ciao
    allego un file
    con una proposta
    è da migliorare ma intanto è un'idea
     
    Private Sub CommandButton2_Click() 
    Unload UserForm4 
    userform1.show
    UserForm1.ComboBox1.SetFocus 
    End Sub 



  • di Marius44 data: 08/06/2016 10:56:02

    @Gianfranco

    Ciao
    Ho apportato qualche modifica al tuo file e lo riallego. C'è ancora bisogno di qualche correzione ma adesso sono impegnato.
    Vedi, intanto, come ti sembra.

    Ciao,
    Mario


  • SetFocus
    di francesco (utente non iscritto) data: 09/06/2016 08:52:38

    Buongiorno,
    la situazione è quella del file allegato.



  • di Marius44 data: 09/06/2016 12:28:09

    Ciao Francesco
    non capisco dove vuoi andare a parare ma ti allego il file (bis).
    Un suggerimento: se vuoi che TUTTE le TextBox contengano dei dati, quanto scritto nella routine di TextBox1 va ripetute nelle altre.

    Fai sapere. Ciao,
    Mario


  • SetFocus
    di francesco (utente non iscritto) data: 09/06/2016 13:22:37

    ciao Marius44,
    fammi questa prova: apri form4 e chiudila senza inserire alcun dato.



  • di Marius44 data: 09/06/2016 16:11:02

    Ciao Francesco
    come t'ho detto, non capisco dove vuoi andare a parare.
    Se lasci la TextBox1 SENZA alcun dato non potrai mai chiudere UserForm4 anche se lo hai aperto per errore. L'Exit da TextBox1 preclude qualsiasi azione.
    Se mi dici, passo passo, cosa intendi fare forse, e ripeto forse, qualcosa si può fare. Devo, però, capire cosa deve fare il programma. Allo stato attuale per me è incomprensibile perchè prima devi aprire UserForm1, selezionare (forse) qualche dato fantasma nella Combo per poi, cliccando il pulsante, aprire UserForm4.
    Cosa hai in mente?

    Ciao,
    Mario



  • di Gianfranco data: 09/06/2016 19:02:01

    Ciao

    questa è la risposta che forse cerchi

    elimina la macro in uscita dal textbox 1
    ti sta rompendo gli zebedei più de4l dovuto
    e sposta la limitazione all'inserimento dei dati
     
    Private Sub CommandButton1_Click()
     
     If TextBox1.Value = "" Then
     MsgBox "Manca la data"
     TextBox1.SetFocus
     Exit Sub
     End If
     Dim nriga As Integer
    
    nriga = 3
     While Cells(nriga, 2) <> ""
     nriga = nriga + 1
     Wend
     
    Sheets("Foglio1").Cells(nriga, 1) = CDate(TextBox1)
    Sheets("Foglio1").Cells(nriga, 2) = TextBox2
    Sheets("Foglio1").Cells(nriga, 3) = TextBox3
    Sheets("Foglio1").Cells(nriga, 4) = TextBox4
    
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    
    End Sub
    
    Private Sub CommandButton2_Click()
    Dim usc As Boolean, risp As Integer
        usc = True
        If TextBox1.Value = "" Then
         '   risp = MsgBox("La txt è vuota vuoi uscire lo stesso???", 4 + 32, "Richiesta")
         '   If risp = vbNo Then
         '       Cancel = True
         '       TextBox2.SetFocus
         '       Exit Sub
         '   Else
                Unload UserForm4
         '   End If
         End If
    End Sub



  • di Gianfranco data: 09/06/2016 19:33:17

    Ciao

    ho notato che l'inserimento è vincolato alla cella in colonna B
    che viene alimentata dalla textbox2
    perciò
    ho aggiunto delle varianti.

    se la textbox1 è una data e la textbox2 è diversa da vuota
    allora carica i dati.
    questo perché altrimenti continuava a scrivere la data della txt1
    anche se le altre txt erano vuote.

    Marius che è più esperto sicuramente riuscirà a stringere i comandi
    ( sempre che il tutto ti vada bene )

    file allegato setfocus1
     
    Private Sub CommandButton1_Click()
     
     If TextBox1.Value = "" Then
     MsgBox "Manca la data"
     TextBox1.SetFocus
     Exit Sub
     End If
     If IsDate(TextBox1.Value) Then
        If TextBox1.Value <> Format(DateValue(TextBox1), "dd/mm/yyyy") Then
            MsgBox "Il formato deve essere: dd/mm/yyyy'"
             TextBox1.Value = ""
         TextBox1.SetFocus
            Exit Sub
        End If
    Else
        MsgBox "Non è una data"
        TextBox1.Value = ""
         TextBox1.SetFocus
       Exit Sub
    End If
     Dim nriga As Integer
    If IsDate(TextBox1) = True And TextBox2 <> "" Then
    
    nriga = 3
     While Cells(nriga, 2) <> ""
     nriga = nriga + 1
     Wend
     
    Sheets("Foglio1").Cells(nriga, 1) = CDate(TextBox1)
    Sheets("Foglio1").Cells(nriga, 2) = TextBox2
    Sheets("Foglio1").Cells(nriga, 3) = TextBox3
    Sheets("Foglio1").Cells(nriga, 4) = TextBox4
    
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    End If
    End Sub
    
    Private Sub CommandButton2_Click()
    Dim usc As Boolean, risp As Integer
        usc = True
        If TextBox1.Value = "" Then
         '   risp = MsgBox("La txt è vuota vuoi uscire lo stesso???", 4 + 32, "Richiesta")
         '   If risp = vbNo Then
         '       Cancel = True
         '       TextBox2.SetFocus
         '       Exit Sub
         '   Else
                Unload UserForm4
         '   End If
         End If
    End Sub


  • SetFocus
    di francesco (utente non iscritto) data: 09/06/2016 19:53:42

    Ciao Marius44,
    sembra che la tua:
    Se lasci la TextBox1 SENZA alcun dato non potrai mai chiudere UserForm4 anche se lo hai aperto per errore. L'Exit da TextBox1 preclude qualsiasi azione.

    coincida con una mia frase di inizio post:
    ........cosa che non avviene perché a mio avviso viene impedito dalla mancanza di dati nella text, si può trovare una soluzione,

    azzardo una possibile soluzione : sulla X di chiusura della form ma essendo nascosta????????????


  • SetFocus
    di francesco (utente non iscritto) data: 09/06/2016 19:56:08

    azzardo una possibile soluzione : agire se si può sulla X di chiusura della form ma essendo nascosta????????????



  • di Gianfranco data: 09/06/2016 21:21:08

    Ciao Francesco
    vedo che non hai preso in considerazione la mia proposta.
    se insisti a utilizzare l'uscita dalla text1
    ti precluderai tutte le strade.
    vedi tu
    Marius a te l'arduo compito
    ciao



  • di Marius44 data: 09/06/2016 21:30:00

    Ciao Francesco
    ed un saluto particolare a Gianfranco.

    Ti prego di rileggere il mio post di oggi ore 16.11.02 ed in particolare

    "Se mi dici, passo passo, cosa intendi fare forse, e ripeto forse, qualcosa si può fare."

    Ciao,
    Mario



  • di Gianfranco data: 09/06/2016 21:41:52

    Ciao Marius
    secondo me il mio esempio è più che esaustivo
    se uno si punta all'uscita dalla tex1 non so cosa farci
    alcune considerazioni

    a) il form 1 rimane sempre aperto
    perciò un bel userform1.Hide non ci starebbe male
    nel codice del pulsante.( ma non conosco le dimensioni delle form)

    B) userform1.show
    combobox1.setfocus
    nel codice del pulsante2 della form4.
    e questo è tutto

    ciao genietto







  • SetFocus
    di francesco (utente non iscritto) data: 11/06/2016 17:53:14

    per Gianfranco,
    non è che non ho preso in considerazione il tuo codice ma io non devo verificare che tipo di dati devo inserire nella text, bensì come chiudere una form
    dove la textbox1 senza alcun dato ne preclude l'uscita.
    Spero di aver risposto anche a Marius44.
    Grazie.



  • di Gianfranco data: 11/06/2016 19:25:14

    Ciao
    e il mio file cosa fa?
    solo che ho spostato il codice sul pulsante inserisci
    è la stessa cosa ma non ti preclude la chiusura del form se la text1 è vuota.

    per quanto riguarda i dati sei tu che hai messo la text1 come data
    e io ho migliorato l'inserimento

    prova nel tuo file scrivere un numero e vedi che nella cella di riferimento ti scrive una data.
    chiaro che è una data excel non quella reale.
    ecco che ho obbligato a scrivere una data esatta.

    prova il file e fammi sapere

    ah!

    inserisci anche il codice che ho scritto per ultimo

    tu lasci sempre il form1 aperto
    con HIDE lo nascondi e mantieni i dati.


  • SetFocus
    di francesco (utente non iscritto) data: 12/06/2016 10:08:09

    Ciao,
    se tu intendi che dopo aver inserito dei dati riesci a chiudere la form4 siamo d'accordo:basta non riportare il focus sulla text1, però se vuoi chiudere la form4 senza aver fatto alcuna operazione a me non riesce.



  • di Gianfranco data: 12/06/2016 10:10:37

    ciao
    scarica il file

    setfocus1

    il secondo da sinistra

    e vedi che lo fa


  • SetFocus
    di francesco (utente non iscritto) data: 12/06/2016 10:21:10

    si ma la condizione:
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If UserForm4.TextBox1 = "" Then
    ' UserForm4.TextBox1.SetFocus
    Cancel = True
    End If
    End Sub
    che ti evita di compilare tutte le text magari sono una trentina



  • di Gianfranco data: 12/06/2016 10:33:00

    ma nel mio file
    se non compili la txt 1
    se compili anche le 200 textbox ulteriori e clicchi su registra
    mica te le cancella
    ti dice "devi inserire una data"
    e ti riporta il focus sulla textbox1
    i dati scritti rimangono.
    inibisce solo la registrazione

    fai delle prove e vedi


  • SetFocus
    di francesco (utente non iscritto) data: 12/06/2016 10:39:19

    vediamo di fare con calma la prova, ti dirò.



  • di Gianfranco data: 12/06/2016 10:50:25

    non è difficile da capire

    se metti il set focus sulla txt 1
    o la compili e puoi passare al resto o non fai nulla.
    non puoi uscire né compilare le txt successive.

    per uscire poi devi assolutamente mettere qualcosa sulla txt1
    che verrà registrato su una riga, ma questo a te non serve.

    con il mio metodo
    compili esci fai quello che vuoi
    ma non puoi registrare niente se non c'è una data scritta sulla txt 1

    volendo puoi uscire dal form con HIDE
    avendo compilate tutte le txt successive alla txt1
    e al ripristino del form4 ritrovartele scritte

    fai delle prove e vedi che ti trovi bene