Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Re: [EXCEL VBA] Quale controllo ho selezionato?

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

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi pl1957 » 12/12/13 19:29

In un form immetto numero pratica e altri dati.
Tra i vari controlli ho un pulsante che mi ripristina la maschera coi dati iniziali annullando tutte le eventuali modifiche.
Ho anche la necessità di controllare che il numero pratica sia univoco.
E fino a qui ci sono riuscito appieno.

Il problema nasce dal fatto che vorrei evitare il controllo nel caso in cui premo il pulsante di reset.

Perché questo?

Mettiamo che abbia inserito il numero di pratica 100 in una precedente immissione, mentre invece doveva essere 101.
Vado a inserire il numero 100 in questa maschera e il programma mi segnala, giustamente, un errore di duplicazione.
Decido, quindi, di annullare tutto, andare a correggere l'immissione sbagliata nell'altro "record" per poi tornare qui e inserire i miei dati.
Tento di resettare la maschera ma continuo a imbattermi nel messaggio di errore perché la routine "exit" attiva il controllo.
Sono costretto a "inventarmi" un numero di pratica, superare il controllo dell'univocità, rettificare la precedente immissione sbagliata, ritornare su questo "record" e inserire, finalmente, i dati corretti.

Lungo, dispendioso e pericoloso (a richio dimenticanza!)

Vorrei mettere una IF nella routine di controllo che facesse, in italiano, una cosa del genere:

Codice: Seleziona tutto
SE sei_uscito_e_hai_premuto_reset ALLORA
    ritorna_tutto_ok
ALTRIMENTI
     effettua_controllo
FINE_SE


Googleando (neologismo orripilante!) ho trovato un rimando al metodo Me.ActiveControl.Name che, da quanto ho letto, dovrebbe recepire il nome del controllo appena attivato, anche se il cursore non è ancora uscito dalla textbox.
Invece non funziona.
Controllando anche con debug.print, ho notato che Me.ActiveControl.Name restituisce sempre "Num1", ossia il nome della textbox.

Questo il codice nel form:

Codice: Seleziona tutto
Private Sub Num1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Duplicato(Num1.Value) Then
        Cancel = True
        MsgBox "Questo numero di pratica è già stato inserito"
        Num1.SetFocus
    End If
End Sub


Private Function Duplicato(ByVal NumeroImmesso As Single) As Boolean
    If NumeroImmesso <> 0 And Me.ActiveControl.Name <> "pulsRESET" Then
        ' Effettua il controllo per evitare duplicazioni
    End If
End Function


Riassumendo: ho lasciato la casella di testo Num1. Quale controllo ho selezionato per uscire?

Grazie anticipate.

(Excel 2010 / Win 7)
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Sponsor
 

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi Flash30005 » 13/12/13 00:01

non ho idea sarebbe meglio avere il file per verificare

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi Anthony47 » 13/12/13 01:38

A spanne direi che hai un paio di opzioni:
-il tuo pulsante cancella il contenuto di Num1, e questo dovrebbe "accecare" il controllo Duplicato
-oppure imposti una variabile AZZ di tipo booleana condivisa a livello del modulo che gestisce la form, e la imposti poi su True col bottone reset; poi userai If Duplicato(Num1.Value) And AZZ=False Then
Se dopo aver usato il pulsante chiudi la userform ti bastera' impostare AZZ su False all' attivazione della Form, altrimenti (se rimani nella form) devi identificare quali eventi comportano il reset di AZZ e provvedere.

L'istruzione Me.ActiveControl.Name ti restituisce Num1 perche' quando la esegui... e' Num1 il controllo attivo.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi pl1957 » 13/12/13 15:51

"AZZ"!!!
Se neanche Anthony ha in mano una soluzione, c'è veramente da dire AZZ!!!

Taglio la testa al toro: metto il controllo all'interno del blocco del pulsante "Invia dati" ed effettuo le verifiche a valle delle immissioni, prima di piazzare i dati sul foglio. Meno immediato, ma di più facile soluzione...

Intanto, continuo a guardarmi intorno... Hai visto mai? Se trovo la soluzione, la posto!
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi Anthony47 » 13/12/13 17:26

Mi sembrava di aver dato un paio di soluzioni... che cosa non ti torna?
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi pl1957 » 14/12/13 01:40

L'opzione di cancellare il contenuto è quello che già faccio, ma ciò non impedisce l'avvio della funzione Duplicato().

Anche l'altra soluzione proposta non funziona perché la routine di reset risulta non venire chiamata affatto (il controllo sul duplicato "sorpassa a destra" e si mette davanti a qualsiasi altro evento), quindi anche impostando la variabile condivisa il controllo della duplicazione parte.

Di questo ne ho la certezza perché, a parte il MsgBox di errore che campeggia in mezzo allo schermo, non appare il MsgBox che ho impostato in ingresso alla funzione Reset per chiedere conferma prima di annullare tutto.

Ovvio che, se non si verifica alcun errore di duplicazione, i vari pulsanti reagiscono alla perfezione.

Tra l'altro, ho invertito, nel fare la prova, l'ordine dei confronti mettendo prima il controllo su AZZ e poi quello sulla funzione perché, se non mi sbaglio, VBA valuta i Vero/Falso nell'ordine in cui si indicano.

Anthony47 ha scritto:Mi sembrava di aver dato un paio di soluzioni... che cosa non ti torna?

Be', sinceramente mi aspettavo che tirassi fuori dal cilindro qualche funzione non documentata che, leggendo in una sfera di cristallo e verificando le congiunzioni astrali,... :D :D
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi Anthony47 » 14/12/13 02:50

L'opzione di cancellare il contenuto è quello che già faccio, ma ciò non impedisce l'avvio della funzione Duplicato()


la routine di reset risulta non venire chiamata affatto (il controllo sul duplicato "sorpassa a destra" e si mette davanti a qualsiasi altro evento), quindi anche impostando la variabile condivisa il controllo della duplicazione parte

La tua insistenza mi ha costretto a rileggere tutto...
Cosi' mi sono accorto che avevo collaudato le prestazioni col click sulla userform, che non si fa "superare a destra" e vince; pero' e' vero che il click di un commandbutton viene preceduto dall' exit dal textbox, quindi non funziona.

Credo che la soluzione di spostare tutto nel codice di Invia Dati sia la piu' efficace; magari puoi lasciarla anche all' interno della Num1_Exit, ma invece di impedire l' uscita dal controllo potresti limitarti a colorare il testo in Rosso, o dare un messaggio esplicito tramite una label di cui modifichi il testo.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi Anthony47 » 14/12/13 09:23

La notte porta (a volte) buoni consigli...
Anche il pulsante Azzera puo' evitare di farsi sorpassare a destra dall' evento Num1_Exit; basta che la sua proprieta' TakeFocusOnClick sia impostata a False.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL VBA] Quale controllo ho selezionato?

Postdi pl1957 » 14/12/13 10:33

Anthony47 ha scritto:Anche il pulsante Azzera puo' evitare di farsi sorpassare a destra dall' evento Num1_Exit; basta che la sua proprieta' TakeFocusOnClick sia impostata a False.


SÌ, SÌ, SÌ, SÌ, SÌ :!: :!: :!:
Funziona...
Lo sapevo che dentro il cilindro si nascondeva un coniglio...

Grazie!
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche


Torna a Applicazioni Office Windows


Topic correlati a "Re: [EXCEL VBA] Quale controllo ho selezionato?":


Chi c’è in linea

Visitano il forum: Nessuno e 30 ospiti