Condividi:        

Se textbox piene abilitare pulsante e passare alla page

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

Se textbox piene abilitare pulsante e passare alla page

Postdi WCB » 20/06/19 12:40

Salve a tutti,
spero che possiate aiutarmi..
il titolo completo sarebbe questo "Se textbox piene abilitare pulsante e passare alla page successiva (Multipage)".

Spiego la mia intenzione: in una useform ho una multipage composta da 6 pagine; in ogni pagina ho varie textbox ed un pulsante che mi trasferisce i contenuti delle textbox in una cartella esterna.
Io vorrei che tutte le pagine e pulsanti a partire dalla 2 (2,3,4,5,6) siano bloccate in modo che l'unica opzione per passare alla page successiva è completare tutte le textbox (e di conseguenza si abilita il button per passare alla successiva).
Sarebbe possibile fare ciò?
Ringrazio chi vorrà aiutarmi nell'impresa e buona continuazione :)
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52

Sponsor
 

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi alfrimpa » 20/06/19 13:33

Magari se alleghi un file di esempio.

Comunque devi impostare un ciclo For sulle textbox e se la proprietà Value di ciascuna di eese è <> da "" allora CommandButton1.Enabled = True
Alfredo

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

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi WCB » 20/06/19 15:19

Ciao Alfredo e grazie per aver risposto..
Qui trovi il link al file: https://we.tl/t-9yij1NT1Gq
Chiedo scusa in anticipo ma sto affrontando in questi giorni il discorso multipage.
Nel button troverai solo il codice per trasferire dati, ancora non mi è chiaro come passare alla page successiva in modalità normale se non cliccandoci sulla scheda direttamente (cosa che vorrei evitare di fare).
Grazie della disponibilità.
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi Anthony47 » 20/06/19 23:19

La mia proposta e' di lavorare sull'evento MultiPage1_Change, che scatta quando si seleziona una nuova Pagina; in questa circostanza si controlla che le pagine "precedenti" siano compilate, altrimenti si impedisce il passaggio di pagina.
Ed e' stato piu' incasinato di quanto pensavo, perche' un Multipage e' in realta' solo un ...fenomeno ottico: i "controlli" appartengono tutti alla Userform, ma vengono visualizzati a gruppi separati.

Per quello che dico devi inserire nel modulo vba della userform:
Codice: Seleziona tutto
Private Sub MultiPage1_Change()
'
NonOk = FillPage
If NonOk < Me.MultiPage1.Value Then
    Beep
    MsgBox ("Completare la compilazione di " & Me.MultiPage1(NonOk).Caption)
    Application.OnTime Now + TimeSerial(0, 0, 0), "MPSet"
End If
End Sub


Function FillPage() As Long
Dim I As Long, myJ As Long, mPage()
'
ReDim mPage(0 To 2)                         '<<< 0 to NumPagine-1
'
arr0 = Array("TextBox1", "TextBox2")        '<<< Elenco TextBox in Page1
arr1 = Array("TextBox3", "TextBox4")        '<<< Elenco TextBox in Page2
arr2 = Array("TextBox5", "TextBox6")        '<<< Elenco TextBox in Page3
'<<< Qui eventuali altri ARRxyz
'
'Compilo mPage con ARRx:
mPage(0) = arr0
mPage(1) = arr1
mPage(2) = arr2
'<<< Qui eventuali altri caricamenti di mPage(xyz) con ARRxyz
'
'Controllo compilazione TxtBox
For I = 0 To UBound(mPage)
    For myJ = LBound(mPage(I)) To UBound(mPage(I))
        If Me.Controls(mPage(I)(myJ)).Value = "" Then
            FillPage = I
            Exit Function
        End If
    Next myJ
Next I
FillPage = I
End Function

Le istruzioni marcate <<< vanno compilate come da commento; in particolare nei vari ARRx devi inserire il nome dei controlli che devono risultare compilati prima di autorizzare il passaggio alla Pagina successiva. I valori che trovi nella macro sono basati su un multipage con 3 pagine, contenenti ognuna 2 txtbox.

Invece in un Modulo standard del vba, inizialmente vuoto, devi inserire:
Codice: Seleziona tutto
Public NonOk As Long       'RIGOROSAMENTE in testa al modulo
Sub MPSet()
    UserForm1.MultiPage1.Value = NonOk
End Sub
L'uso di questa Sub MPSet, che viene schedulata dalla Sub MultiPage1_Change, si e' resa necessaria perche' con la mia versione di Excel il set delle Pagine fatto all'interno dei moduli vba della userform producevano un risultato assurdo: la pagine "sembrava" selezionata, ma i controlli esposti erano quelli della pagina precedente.

E' opportune che anche le Sub CommandButtonX_Click contengano la verifica che i controlli siano tutti compilati prima di salvare i dati e passare al controllo successivo; ad esempio, per CommandButton1_Click:
Codice: Seleziona tutto
Private Sub CommandButton1_Click()
'
NonOk = FillPage
If NonOk <= Me.MultiPage1.Value Then
    Beep
    MsgBox ("Completare la compilazione di " & Me.MultiPage1(NonOk).Caption)
    Application.OnTime Now + TimeSerial(0, 0, 0), "MPSet"
Else
'Codice per trasferire contenuto TxtBox a foglio:
    With ActiveSheet
    Range("A2").Value = TextBox1.Text
    Range("A3").Value = TextBox2.Text
    Range("A4").Value = TextBox3.Text
    Range("A5").Value = TextBox4.Text
    End With
    Me.MultiPage1.Value = 1         'Passa da Page(0) a Page(1), la seconda
End If
End Sub

So che qualcosa non sara' comprensibile in prima battuta...
Avatar utente
Anthony47
Moderatore
 
Post: 19431
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi WCB » 21/06/19 10:07

Ciao a tutti e grazie mille per essere intervenuti..
Anthony, ho un problema col tuo codice. :cry:
Mi esce un messaggio che dice "Variabile non definita" su questa riga:
Codice: Seleziona tutto
Function FillPage() As Long
Dim I As Long, myJ As Long, mPage()

ReDim mPage(0 To 1)                         '<<< 0 to NumPagine-1

arr0 = Array("TextBox91", "TextBox1", "TextBox2", "TextBox3", "TextBox6", "ComboBox1", "TextBox4"


Mi evidenzia in giallo "Function FillPage() As Long" e in blu "arr0"
L'ho inserito nella userform...
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi WCB » 21/06/19 11:01

alfrimpa ha scritto:Magari se alleghi un file di esempio.

Comunque devi impostare un ciclo For sulle textbox e se la proprietà Value di ciascuna di eese è <> da "" allora CommandButton1.Enabled = True

Ciao Alfredo, il ciclo For...Next la dovrei inserire nelle textbox o nella userform?
Grazie mille della pazienza..
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi Anthony47 » 21/06/19 12:17

Mi esce un messaggio che dice "Variabile non definita"
Evidentemente hai impostato "Option Explicit" in testa ai moduli; quindi tutte le variabili devon essere definite prima del loro uso.
Devi quindi inserire, in testa al codice delle Sub o Function, la dichiarazione delle variabili su cui hai errore.
Ti bastera' aggiungere Dim MiaVariabile per ogni variabile. Esempio
Codice: Seleziona tutto
Function FillPage() As Long
Dim I As Long, myJ As Long, mPage()
Dim arr0
Dim arr1
'...


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

Re: Se textbox piene abilitare pulsante e passare alla page

Postdi WCB » 21/06/19 13:17

Fatto ora e funziona benissimo...
Ti ringrazio tantissimo e buon weekend 8) 8)
"I computer sanno quando vai di fretta"
Excel 2016
Avatar utente
WCB
Utente Senior
 
Post: 101
Iscritto il: 09/01/19 17:52


Torna a Applicazioni Office Windows


Topic correlati a "Se textbox piene abilitare pulsante e passare alla page":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti

cron