[Access] Pulsante "Filtro in base a selezione"

Anonimo
2009-12-23T19:05:55+00:00

Dunque, la cosa pare semplice ma al momento non ho trovato una soluzione diciamo, pulita. Quello che ho è un database protetto in tutto e per tutto, un MDE con disattivata praticamente ogni cosa, barre, pulsanti, menu, etc... per impedire inevitabili casini qualora un utente inesperto dovesse mettervi le mani. Tutto quello di cui abbisognano l'ho scritto io ex-novo e posizionato nelle maschere.

Il problema quale è: ho la necessità di fornire la classica funzione di Access, che si trova pure nella toolbar sotto forma di un pulsante noto a tutti, ovvero il "Filtro in base a selezione". Quello che desidero quindi è replicare tale comando in un pulsante custom nelle mie maschere. Ma quello che ottengo non si comporta per niente come il comando appartenente ad Access.

Non funziona sia il classico comando che pesca da menu:

DoCmd.DoMenuItem acFormBar, acRecordsMenu, 2, , acMenuVer70

che queste linee di codice leggermente più evolute:

Screen.PreviousControl.SetFocus

DoCmd.RunCommand acCmdFilterBySelection

(ovvero quando premi il pulsante porta il focus al precedente campo ed opera un filtro sulla selezione)

Perchè dico non funzionano? Perchè quando il focus ritorna indietro mi seleziona tutto il campo e non l’eventuale sezione dello stesso che avevo precedentemente selezionato col mouse.

Mi chiedo quindi se c’è un modo, magari diverso dal mio, di approcciare la cosa e risolvere questo problema. Al momento tutto quello che mi viene in mente è costruire una custom toolbar e posizionarvi i pulsanti di Access, ma vorrei evitarlo se possibile.

Grazie per il tempo sin qui dedicatomi.

Massimo.

Microsoft 365 e Office | Access | 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

4 risposte

Ordina per: Più utili
  1. Anonimo
    2009-12-24T13:14:37+00:00

    Ciao Massimo,

    premesso che la soluzione più pulita è quella della custom tollbar, potresti fare così:

    1. Memorizzare da qualche parte le proprietà SelStart e SelLength della casella testo quando perde il fuoco.
    2. Nel pulsante mettere a fuoco la casella testo, riassegnare SelStart e SelLength e poi eseguire DoCmd.RunCommand acCmdFilterBySelection

    come fare:

    Crea una funzione nel codice di classe della maschera per memorizzare SelStart e SelLength

    Function Mem_SelStart_SelLength()

    Me.ActiveControl.Tag = Me.ActiveControl.SelStart & ";" & Me.ActiveControl.SelLength
    

    End Function in visualizzazione struttura della maschera, seleziona tutte le caselle testo e metti nella mascherina delle proprietà in corrispondenza dell'evento "Su Disattivato" la seguente espressione =Mem_SelStart_SelLength()

    Poi modifica il codice del pulsante in questo modo

    Private Sub Comando1_Click()

    Dim ctrl As Object
    Set ctrl = Screen.PreviousControl
    
    If ctrl.Tag = "" Then
       Set ctrl = Nothing
       Exit Sub
    End If
    
    'Metto a fuoco la casella testo
    ctrl.SetFocus
    
    'Riassegno SelStart e SelLength
    ctrl.SelStart = Split(ctrl.Tag, ";")(0)
    ctrl.SelLength = Split(ctrl.Tag, ";")(1)
    
    DoCmd.RunCommand acCmdFilterBySelection
    
    ctrl.Tag = ""
    Set ctrl = Nothing
    

    End Sub Ciao

    Giorgio Rancati

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2009-12-29T20:21:49+00:00

    Figurati, purtroppo in questo caso avevo problemi d'interfaccia e la toolbar avrei desiderato non inserirla, quindi ho aguzzato l'ingegno.

    Soluzione furba ma veloce e funzionante, eh eh.

    A presto.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2009-12-29T11:18:16+00:00

    Ciao Massimo,

    grazie a te per aver mostrato una possibile soluzione.

    In effetti il controllo immagine come anche l'etichetta ha l'evento "Su Click" ma non ha l'evento "Su Attivato (GotFocus)" quindi non fa perdere il fuoco agli altri controlli.

    Mi sembra un'ottima soluzione :-)

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2009-12-25T08:50:44+00:00

    Grazie della risposta, non l'ho provata ma suona molto bene.

    Pensa che io nel frattempo ho avuto un altra idea per non far perdere il focus al campo con selezione parziale: ho implementato un pulsante "fake" utilizzando due immagini che lo simulano: una per "tasto su" e una per "tasto giù", cliccando col mouse hai l'impressione di premere un pulsante che ovviamente non lo è. Con un poco di codice si realizza l'animazione ed a questo punto basta il "DoCmd.RunCommand acCmdFilterBySelection" che tutto funziona regolarmente.

    Grazie di cuore per la risposta che sono sicuro mi sarà utile in altri ambiti.

    Massimo.

    La risposta è stata utile?

    0 commenti Nessun commento