Controllare se varie TextBoxes siano piene o meno

Anonimo
2016-05-15T17:08:53+00:00

Ciao a tutti, sono ancora qui a chiedere aiuto.

In breve, ho costruito un "modulo" da compilare (del quale parlo anche qui) e successivamente ho un "button" che, cliccandolo, crea un file *.txt con il contenuto che voglio. 

La routine dell'evento click di quel pulsante è:

Private Sub CommandButton1_Click()

     'qui metterei il codice che desidero creare ed aggiungere

 Dim varResult As Variant

  varResult = Application.GetSaveAsFilename

 Open varResult & "txt" For Output As #1

  Print #1, Cells(1, 11)

  Close #1

 percorso = MsgBox("Il file è stato salvato su" & vbCr & varResult, vbInformation)

UserProva.Hide

ThisWorkbook.Close Savechanges:=False

End Sub

"UserPr ova" è il nome della form utilizzata per inserire i dati, dati che sono presenti nella "Cells(1, 11)" e nella quale c'è anche il "Button1".

Io ho bisogno che, prima di crearmi il file *.txt si avvi un controllo su più TextBoxes (non tutte ma quelle a carattere obbligatorio) sull'effettiva presenza di dati al loro interno. Penso di farlo con una "If" da mettere subito prima di tutto il codice che ho scritto (alla 2a linea, insomma) ma non ho proprio idea di come iniziare... :P

Avrei anche un'altra necessità, se possibile, quella di evitare che, all'apertura della finestra di "Salva con nome" (chiamata "percorso") , cliccando su "Annulla" mi dia un messaggio di tipo "Il file è stato salvato su Falso". 

Grazie in anticipo :)

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
2016-05-19T08:12:18+00:00

Ho risolto così:

-nel codice della form-

Private Sub CommandButton1_Click()

 Dim ctrl As Control

 Dim bln As Boolean

    With Me

        For Each ctrl In .Controls

            Select Case ctrl.Name

                Case "TextBox1", "TextBox2", "TextBox3", "TextBox5", "TextBox6", "TextBox7", "TextBox10"

                    If ctrl.Text = "" Then bln = True

            End Select

        Next

    End With

    If bln Then MsgBox "Compilare tutti i campi obbligatori" & vbCr & "contrassegnati dall'asterisco *" Else: ThisWorkbook.SalvaConNome

End Sub

-in ThisWorbook-

Public Sub SalvaConNome()

  Dim messaGGino As Integer

  Dim varResult As Variant

  varResult = Application.GetSaveAsFilename

    If varResult = False Then

       messaGGino = MsgBox("Non è stato salvato nessun" & vbCr & "file, vuoi terminare la compilazione?", vbYesNo, "Nessun file creato")

    Else:

        Open varResult & "txt" For Output As #1

        Print #1, Cells(1, 13)

        Close #1

        percorso = MsgBox("Il file è stato salvato su" & vbCr & varResult, vbInformation)

        ThisWorkbook.Close Savechanges:=False

        Application.Quit

    End If

    If messaGGino = vbYes Then

        UserProva.Hide

        ThisWorkbook.Close Savechanges:=False

        Application.Quit

    If messaGGino = vbNo Then

    End If

    End If

End Sub

In pratica mi è stato suggerito di riscrivere la If badando alle righe nel quale metto le istruzioni perché come scritta prima "Open...", "Print #1" e "Close #1" erano all'esterno della If.

Non metto in dubbio la tua soluzione ma così vedo che funziona tranquillamente.

Scrivo questo perché magari ne possiamo parlare e confrontarci e può servire ad altri utenti.

La risposta è stata utile?

0 commenti Nessun commento

17 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-05-16T10:18:16+00:00

    Dunque, la Combobox la posso togliere (dato che non rimane vuota in nessun caso), come nella routine da me malamente scritta bisogna controllare: TextBox1, TextBox2, TextBox3, TextBox5, TextBox6, TextBox7, TextBox10.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-05-16T10:04:47+00:00

    Quali sono i nomi delle TextBox da controllare?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-05-16T09:00:31+00:00

    Non potendo dividere i campi obbligatori da quelli non obbligatori con un Frame sto cercando una soluzione alternativa, la posto ma capisco bene che è un pastrocchio tutto sbagliato...

    Private Sub CommandButton1_Click()

    Dim PrimiCampi, SecondiCampi As Long

        With Me

            For PrimiCampi = 1 To 3

                .Controls ("TextBox" & PrimiCampi)

            For SecondiCampi = 5 To 7

                .Controls ("TextBox" & SecondiCampi)

            Next

        If ComboBox1.Value Controls.Value TextBox10.Value = "" or " " Then

            ATTENZIONE = MsgBox("I campi obbligatori non sono stati tutti compilati", vbCritical)

            Else

     Dim varResult As Variant

      varResult = Application.GetSaveAsFilename

     Open varResult & "txt" For Output As #1

      Print #1, Cells(1, 11)

      Close #1

     percorso = MsgBox("Il file è stato salvato su" & vbCr & varResult, vbInformation)

    UserProva.Hide

    ThisWorkbook.Close Savechanges:=False

        End If

        End With

    End Sub

    Come posso correggere?

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-05-15T17:39:39+00:00

    La cosa è semplice se *organizzi* bene gli oggetti sulla UserForm.

    Utilizzando gli oggetti Frame. un semplice esempio qui dove controllo che SOLO le celle contenute nel Frame 2 siano o meno vuote:

    E qui trovi un intero Wiki sull'argomento:

    Per l'utilizzo delle MsgBox vedi questo articolo Wiki dove è spiegato come è possibile utilizzare MsgBox complesse e recuperare il valore voluto:

    La risposta è stata utile?

    0 commenti Nessun commento