Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Compilazione obbligatoria Userform

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Compilazione obbligatoria Userform

Postdi BG66 » 01/04/17 06:27

Ciao a tutti,
vorrei che il pulsante carica dati non avviasse la macro prima che tutti i campi (3 textbox e le 2 opzioni delle 6 OptionButton complessive) fossero compilati.
E' fattibile?
https://www.dropbox.com/s/l60xrdjih5dt7he/inserire_dati_RipV1.xls?dl=0
Avevo iniziato con qualcosa di simile ma non sono in grado di andare avanti e in realtà non so neanche se quel poco che ho scritto ha un senso.
Codice: Seleziona tutto
Dim obbligOK As Boolean

    With UserForm1
        obbligOK = Len(.TextBox1.Text) > 0 _
              And Len(.TextBox2.Text) > 0 _
              And Len(.TextBox3.Text) > 0 _
              ' And  come si continua con le optionbutton??? Devo inserirle in un apposito frame??
             
        If Not obbligOK Then
            Call MsgBox(Prompt:="non hai compilato tutti i campi obbligatori", _
                        Buttons:=vbCritical, _
                        Title:="Non Compilato!")
            Exit Sub
        End If
    End With

Grazie in anticipo.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 252
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Compilazione obbligatoria Userform

Postdi Anthony47 » 01/04/17 12:08

Potresti inserire il blocco For Each myC In Me.Controls /Next myC prima del check sui textbox e inserire, come ultimo "And", l'esito di questo loop:
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
Dim myC As Control, obCtr As Long, obbligOK As Boolean
'
    For Each myC In Me.Controls
        If TypeName(myC) = "OptionButton" Then
            obCtr = obCtr + myC.Value
        End If
     Next myC
'se le 2 scelte sono state effettuate allora obCtr sara' uguale a -2
'
    With UserForm1
        obbligOK = Len(.TextBox1.Text) > 0 _
              And Len(.TextBox2.Text) > 0 _
              And Len(.TextBox3.Text) > 0 _
              And (obCtr = -2)
        If Not obbligOK Then
        ' etc etc


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17450
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Compilazione obbligatoria Userform

Postdi BG66 » 01/04/17 13:20

Ciao Anthony,
ho integrato il tuo script nella macro esistente (era giusto fare cosi ??) e la versione finale dovrebbe essere la seguente:
Codice: Seleziona tutto
Sub Inserisci_Dati()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets("Anno")
Dim iRow As Long
Dim myC As Control, obCtr As Long, obbligOK As Boolean
'
    For Each myC In Me.Controls
        If TypeName(myC) = "OptionButton" Then
            obCtr = obCtr + myC.Value
        End If
     Next myC
'se le 2 scelte sono state effettuate allora obCtr sara' uguale a -2
'
    With UserForm1
        obbligOK = Len(.TextBox1.Text) > 0 _
              And Len(.TextBox2.Text) > 0 _
              And Len(.TextBox3.Text) > 0 _
              And (obCtr = -2)
        If Not obbligOK Then
ws1.Select
iRow = 2 'riga da cui partire per scrivere i dati
If ws1.Cells(iRow, 1).Value = "" Then
   Else
      iRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
ws1.Cells(iRow, 1) = UserForm1.TextBox1.Value
ws1.Cells(iRow, 4) = UserForm1.TextBox2.Value
ws1.Cells(iRow, 5) = UserForm1.TextBox3.Value

If UserForm1.OptionButton1.Value = True Then Sheets("Anno").Cells(iRow, 3).Value = "1°turno"
If UserForm1.OptionButton2.Value = True Then Sheets("Anno").Cells(iRow, 3).Value = "2°turno"
If UserForm1.OptionButton3.Value = True Then Sheets("Anno").Cells(iRow, 3).Value = "3°turno"
If UserForm1.OptionButton4.Value = True Then Sheets("Anno").Cells(iRow, 2).Value = "R1"
If UserForm1.OptionButton5.Value = True Then Sheets("Anno").Cells(iRow, 2).Value = "R2"
If UserForm1.OptionButton6.Value = True Then Sheets("Anno").Cells(iRow, 2).Value = "R3"


    For x = 1 To 3 'Ciclo di cancellazione dati
    UserForm1.Controls("TextBox" & x) = ""
    Next x
        For y = 1 To 6 'Ciclo di cancellazione dati
        UserForm1.Controls("OptionButton" & y) = ""
        Next y
 
With ws1
    uRow = .Cells(Rows.Count, 1).End(xlUp).Row  'trova l'ultima cella piena nella colonna A
        For y = 2 To uRow  'ciclo che spazzola dalla riga 5 all'ultima piena
            If .Cells(y, 1) <> "" Then  'se le celle della colonna A sono piene
                With .Range("A1:E" & y).Borders  'stabilisce l'intervallo che va dalla cella A1 alla Cella AA (numero di riga ultima cella piena)
                    .LineStyle = xlContinuous  'questa riga prevede l'esistenza del bordo
                    .ColorIndex = 12  'questa riga stabilisce il colore del bordo
                    .Weight = 1  'questa riga stabilisce lo spessore del bordo (1 è il più piccolo)
                End With
            End If
 
        Next
  End With
     

'UserForm1.Hide
   'Application.DisplayAlerts = False
   'ActiveWorkbook.Save
  ' ActiveWorkbook.Close
   'Application.DisplayAlerts = True
Set ws1 = Nothing

End Sub


Ma ottengo questo errore:
Immagine

Grazie per l'aiuto.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 252
Iscritto il: 20/08/16 07:44

Re: Compilazione obbligatoria Userform

Postdi alfrimpa » 01/04/17 13:45

Ciao Gene

Prova a sostituire

Codice: Seleziona tutto
Me.Controls


con

Codice: Seleziona tutto
Userform1.Controls
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 1201
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Compilazione obbligatoria Userform

Postdi BG66 » 01/04/17 13:56

Ciao Alfredo,
era sicuramente quello.
Peccato che ora,anche provando ad indendare ho sbagliato qualcosa mi dice ch manca un End IF.
Mi aiuti a capire dove??
Inserito alla fine prima del Nothing non ho avuto blocchi ma in pratica ha "scritto" tutto anche se non avevo attivato un option button.
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 252
Iscritto il: 20/08/16 07:44

Re: Compilazione obbligatoria Userform

Postdi Anthony47 » 01/04/17 14:10

Metti il codice nella Sub Commandbutton1_click.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17450
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Compilazione obbligatoria Userform

Postdi BG66 » 02/04/17 07:29

Ciao Anthony,
ho fatto quanto mi hai indicato e aggiunti un End If e un End with che mancavano ma continua ad ignorare i campi non compilati e ad inserire comunque quelli presenti:

Immagine


https://www.dropbox.com/s/t30iztv1b45uj0e/inserire_dati_RipV1A.xls?dl=0

Dove / Cosa sbaglio?? :evil:
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 252
Iscritto il: 20/08/16 07:44

Re: Compilazione obbligatoria Userform

Postdi Anthony47 » 02/04/17 11:49

Hai notato che riesci a inserire quando "non torna" ma NON quando "tutto torna"?

Se obbligOK e' True quando "tutto torna" allora poi devi usare
Codice: Seleziona tutto
       If obbligOK Then

(invece che If Not obbligOK, che fa appunto l'opposto)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17450
Iscritto il: 21/03/06 16:03
Località: Ivrea

[RISOLTO] Compilazione obbligatoria Userform

Postdi BG66 » 02/04/17 13:20

[RISOLTO]
Ciao Anthony,
ovviemente era quello l'inghippo. Avevo fatto la prova solamente con il "bicchiere mezzo vuoto".

Grazie di tutto e alla prossima
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 252
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Compilazione obbligatoria Userform":


Chi c’è in linea

Visitano il forum: Nessuno e 25 ospiti