Condividi tramite

Togliere il focus ad una userform

Anonimo
2012-05-24T17:53:02+00:00

Un saluto a tutto il forum.

In una cartella di Excel faccio uso di una Form Modeless per inserire dei valori nella cella attiva cliccando su dei bottoni nella form stessa.

L'evento click del bottone inserisce un valore nella cella attiva e sposta la cella attiva a destra.

Il problema è questo:

La successiva cella da riempire potrebbe non essere quella a destra, oppure l'utente potrebbe dover inserire il valore da tastiera.

Per poter eseguire operazioni con la tastiera è necessario fare prima click sul foglio, altrimenti la digitazione ha effetto (naturalmente) sulla form e non sul foglio.

Mi chiedevo se fosse possibile inserie nell'evento click del pulsante una qualche istruzione che restituisca automaticamente ogni volta il focus al foglio, cioè che in parole povere simuli il click del mouse sulla cella attiva.

Grazie per l'attenzione.

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

11 risposte

Ordina per: Più utili
  1. Anonimo
    2012-05-25T18:07:52+00:00

    Ciao Mauro, e grazie ad entrambi.

    Alla fine sono riuscito a risolvere usando le API di windows, modificando "a naso" una routine trovata in rete; questo è il codice che ho usato:

     Public Const SW_SHOW = 5

     Public Declare Function _

            SetForegroundWindowAPI Lib "USER32.dll" Alias "SetForegroundWindow" _

                     (ByVal hwnd As Long) As Long

    Public Declare Function _

            ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

    Private Sub mAppFocus()

          ShowWindow Application.hwnd, SW_SHOW

          SetForegroundWindowAPI (Application.hwnd)

    End Sub

    Ciao e grazie ancora.

    PS: mi sono appena reso conto che la chiamata a ShowWindow è del tutto inutile, dal momento che la finestra è gia visibile.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-05-25T17:30:35+00:00

    Probabimente mi sbaglio, ma credo che con la maschera visibile non puoi ottenere ciò che chiedi (quindi tornare al foglio senza prima cliccarci sopra).

    Tuttavia potresti implemetare il meccanismo di correzione sulla maschera stessa ovvero aggiungi un pulsante che non fa altro che nascondere la maschera e restituire il controllo al foglio. Alla successiva modifica del valore, o come detto con una combinazione di tasti, richiami la maschera visibile.

     

    David

    Puoi ma è un pasticcio:

    Private Sub CommandButton1_Click()

        Dim lng As Long

        With Application

            .ScreenUpdating = False

            ActiveCell.Value = 12345

            ActiveCell.Offset(0, 1).Select

            lng = .WindowState

            .WindowState = xlMinimized

            .WindowState = lng

            .ScreenUpdating = True

        End With

    End Sub

    Se trovo un attimo di tempo vedo di fare qualcosa di meglio.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-05-25T14:42:34+00:00

    Probabimente mi sbaglio, ma credo che con la maschera visibile non puoi ottenere ciò che chiedi (quindi tornare al foglio senza prima cliccarci sopra).

    Tuttavia potresti implemetare il meccanismo di correzione sulla maschera stessa ovvero aggiungi un pulsante che non fa altro che nascondere la maschera e restituire il controllo al foglio. Alla successiva modifica del valore, o come detto con una combinazione di tasti, richiami la maschera visibile.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-05-25T14:27:32+00:00

    Ciao David.

    Il fatto è che l'utilizzo "normale" prevede che l'inserimento dei dati e lo spostamento conseguente della cella attiva avvenga quasi sempre tramite form, e la necessità di utilizzare la tastiera si presenta solo occasionalmente (es. per correggere un inserimento errato o inserire un valore non previsto).

    Il problema reale è che alcuni degli utilizzatori a questo punto rimangono "impantanati" in quanto cercano di utilizzare la tastiera e non riescono. In realtà è più un fastidio che un reale problema, ma se ci si potesse ovviare migliorerebbe l'usabilità della cartella.

    Grazie comunque.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2012-05-25T09:50:53+00:00

    Ciao,

    potresti imporre un Me.Hide sul pulsante che inserisce il valore nella cella

    In questo modo nascondi la maschera e restituisci lo stato attivo al foglio sottostante.

    Potresti poi mostrare di nuovo la maschera con una combinazione di tasti oppure sfruttando l'evento Change del foglio di lavoro.

    David

    La risposta è stata utile?

    0 commenti Nessun commento