Macro con double clickright click



  • Macro con double click/right click
    di Alex (utente non iscritto) data: 06/01/2015 20:22:03

    Buonasera e buon anno a tutti,
    vi pongo la seguente domanda: per attivare una macro cliccando su una determinata cella di un foglio xls, in genere io uso i gestori di eventi BeforeDoubleClick o BeforeRightClick, ma questa volta vorrei che la macro venisse attivata attraverso un click singolo non del tasto destro del mouse, bensì del sinistro.
    E' possibile. Conoscete un comando?
    Grazie come sempre
    Ciao
    Alex



  • di Vecchio Frac data: 06/01/2015 20:38:38

    Un evento "BeforeLeftClick" del foglio non c'è, puoi avvicinarti con l'evento SelectionChange (che si verifica quando punti e clicchi una nuova cella) ma questa è una soluzione approssimativa perchè l'evento si scatena anche quando sposti il cursore con i tasti freccia.
    Magari se contestualizzi l'esigenza possiamo darti qualche aiuto più mirato, e forse con una logica diversa.





  • di Vecchio Frac data: 06/01/2015 20:45:15

    Come sto leggendo da qualche parte adesso, qualcuno scambia i pulsanti destro e sinistro del mouse con una piccola API, da richiamare al momento opportuno (quando si entra in un certo range per esempio, in modo che l'evento BeforeRightClick ora si riferisce a quello che è rimasto, fisicamente, il tasto sinistro).





  • di Vecchio Frac data: 06/01/2015 20:48:37

    In pratica:
    * l'API in questione è
    Declare Function SwapMouseButton Lib "user32" (ByVal swap As Integer) As Integer

    * la logica è
    - se attivo il workbook, lo sheet, o il range che deve intercettare l'evento click on cell, scambio i pulsanti e intercetto l'evento BeforeRightClick, poi ripristino il corretto significato dei tasti del mouse.

    Non ho (ancora) provato, è un'idea comunque interessante anche se (penso) poco pratica.





  • di Vecchio Frac data: 06/01/2015 21:04:54

    Mah, ecco un pezzo di codice di prova.
    Ha qualche sbavatura, ma può funzionare...
    Incolla tutto nel codice del foglio 1, ora seleziona la cella A1.
    Ora basta un click sinistro nella cella A1 per far apparire il msgbox.
    Che però devi far sparire con invio, spazio o click DESTRO :) (a meno che non modifichi il codice, è solo un esempio)
    Se selezioni una cella diversa da A1 o cambi foglio, i tasti del mouse tornano normali.
     
    Option Explicit
    
    Public swapped As Boolean
    
    Private Declare Function SwapMouseButton Lib "user32" (ByVal swap As Integer) As Integer
    
    Private Sub Worksheet_Activate()
        SwapMouseButton 1
        swapped = True
    End Sub
    
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
        If Not swapped Then Exit Sub
        MsgBox "Event BeforeRightClick (with Left click!) on A1 trapped!"
        Cancel = True
    End Sub
    
    Private Sub Worksheet_Deactivate()
        SwapMouseButton 0
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Not Intersect(Target, Range("A1")) Is Nothing Then
            SwapMouseButton 1
            swapped = True
        Else
            SwapMouseButton 0
            swapped = False
        End If
    End Sub






  • di Textomb data: 06/01/2015 22:19:03

    Buona l'idea dello swap.
    Un'altra soluzione percorribile, ma non so fino a che punto, è utilizzando il collegamento ipertestuale.
    Sostanzialmente nella cella esiste il collegamento ipertestuale che rimanda alla cella A1 del foglio e utilizzando l'evento worksheetchange fa partire la macro.
    In questo modo la macro si attiva solo con levento click destro del mouse...


  • Macro con double click/right click
    di Alex (utente non iscritto) data: 07/01/2015 01:56:27

    L'idea (da PROFANO) mi pare geniale. Domattina a lavoro provo. Grazie Vecchio Frac
    Per quel che riguarda il collegamento ipertestuale, il problema è che non lo posso usare dato che lavoro su fogli nascosti.
    Usare il pulsante destro invece del sinistro ma quando in un fogli odi lavoro ci sono una decina di collegamenti ipertestuali da attivare con il pulsante sinistro ed almeno 5 celle attivabili con il destro, immagino diventerebbe complicato per l'utente individuare quando cliccare l'uno e quando l'altro. Non vorrei impazzissero premendo tasti del mouse a casaccio!



  • di Vecchio Frac data: 07/01/2015 12:07:58

    Per me non è un'idea tanto geniale, anzi è una fonte di possibili guai piuttosto seri.
    Vale a livello didattico, ma in produzione non farei pasticci col mouse, se si inchioda l'applicazione e ti rimane il mouse scambiato, l'utente non pilota più Windows nel modo usuale e ne rimane come minimo sconcertato.






  • di Textomb data: 07/01/2015 12:47:44

    cit. Per me non è un'idea tanto geniale, anzi è una fonte di possibili guai piuttosto seri.
    Io non lo volevo dire...


  • Macro con double click/rigght click
    di Alex (utente non iscritto) data: 07/01/2015 13:53:19

    In effetti avete ragione.
    A livello teorico però mi piaceva un mucchio.
    In realtà gira, però mi è capitato un paio di volte che rimanesse il mouse a tasti invertiti, poi però facendo rigirare la macro la situazione si è assestata.
    La risposta cmq mi era garbata.




  • di scossa data: 07/01/2015 15:02:08

    Ciao,

    io punterei sull'evento Worksheet_SelectionChange, ma dovresti essere meno avaro di informazioni:
    - quante e quali sono le celle su cui vorresti attivare una macro al click sinistro del mouse?
    - queste celle contengono dei valori ovvero devono o possono essere editate/modificate o servono solo per farci click e lanciare la macro?

    allegare un file di esempio aiuterbbe ad aiutarti.



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Alex (utente non iscritto) data: 08/01/2015 01:45:20

    Ciao Scossa,
    scusa se ti rispondo solo ora ma ho la linea internet di casa che fa le bizze.
    Comunque, speravo di non dover allegare il file, dato che è abbastanza in fogli e con informazioni aziendali che dovrei cancellare, quindi ti rispondo dicendo che si tratta di celle su cui non va immesso un valore. Hanno al loro interno delle formule (ho inserito delle formule collegamento ipertestuale) che se il file è visualizzato nella sua versione estesa (cioè con tutti i fogli visibili) mi permettono di navigare tra i vari fogli con semplici collegamenti ipertestuali, altrimenti, a scelta dell'utente, esiste una versione ridotta, con un indice visibile e gli altri fogli che si aprono tramite macro cliccando (per adesso click right o doppio click) su quelle stesse celle che nella visualizzazione estesa ospitano i collegamenti ipertestuali. Si tratta di un numero variabile di celle (a seconda del foglio di appartenenza), tra le 5 e le 10, messe in punti simili ma non sempre uguali dei diversi fogli. Comunque non devono essere editate ma solo cliccate.
    Scusami tanto, ho scritto un mucchio e probabilmente non sono riuscito a farmi capire.



  • di Vecchio Frac data: 08/01/2015 09:38:11

    Non ci sono molte altre soluzioni (SelectionChange come dicevo intercetta il cambiamento di cella sia da tastiera che da mouse, quindi devi definire bene i range di intercettazione, ma è a questo punto preferibile ad altri accrocchi).
    In alternativa, inserisci dei rettangoli di testo nelle celle desiderate, con il testo opportuno, senza bordo visibile, e imposti il click su questi oggetti. Si appesantisce il foglio e impazzisci a posizionare gli oggetti ma... soddisfi la condizione di "un click in cella" :)





  • di scossa data: 08/01/2015 09:54:56

    cit. Alex: "... e gli altri fogli che si aprono tramite macro cliccando (per adesso click right o doppio click) su quelle stesse celle che nella visualizzazione estesa ospitano i collegamenti ipertestuali."

    Scusa ma perché parli di visualizzato nella "versione estesa" o nella "versione ridotta" anziché di "visualizzazione estesa" o "visualizzazione ridotta"? Hai due versioni di ogni foglio?

    Perché mi sfugge come possa in una cella ad esserci il collegamento ipertestuale in un caso e non nell'altro






    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Vecchio Frac data: 08/01/2015 10:16:40

    Io ho capito che lui ha preparato due versioni del file, una "estesa" con tutti gli hyperlink e l'altra "ridotta", con solo testo nelle celle attivabili via VBA, probabilmente per ridurre le dimensioni del file e/o la lentezza di esecuzione, o per offrire meno funzionalità. Altrimenti, non ha senso :)





  • di scossa data: 08/01/2015 10:30:04

    cit. V.F.: "Io ho capito che lui ha preparato due versioni del file, una "estesa" con tutti gli hyperlink e l'altra "ridotta", con solo testo .....Altrimenti, non ha senso"

    Beh, nemmeno la scelta di avere due file mi pare sia la migliore: significa lavorare il doppio per mantenere allineati i due file!

    Ma, senza un esempio concreto, sono solo congetture.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Alex (utente non iscritto) data: 08/01/2015 16:22:38

    Immaginavo di dover esere decriptato, d'altronde senza file è un casino spiegarsi.
    Comunque, il file è unico.
    Ci sono una 50na di fogli che di default sono tutti visibili e collegati l'uno all'altro con un sistema di collegamenti ipertestuali. Questa è la versione di default per chi non volesse ricorrere alle macro o qualora per un qualche motivo alcune macro non girino e nessuno ci sappia mettere le mani.
    Poi ho creato una versione short (richiamabile attivando una macro) in cui sono visibili solo un allegato di indice che apre, attraverso altre macro gli allegati via via scelti.
    Questo mi ha portato a dover rivedere i collegamenti tra i fogli perchè se apro l'allegato 1 e questo ha una cella in cui c'è un collegamento ipertestuale all'all. 2 (per es) ma l'allegato 2 è nascosto, è chiaro che il collegamento si va a far benedire. Quindi nella cella dove avevo messo i collegamento ho inserito il richiamo tramite doppio click ad una macro di apertura dell'allegato 2.
    Il tutto fatto da una mente contorta come la mia e molto (ma molto) profana in tema di macro.
    Scusate...vi ho fatto interpretare la mail di ieri sera nemmeno fossi Nostradamus :((




  • di scossa data: 08/01/2015 17:17:12

    cit. Alex: "Comunque, il file è unico."

    cit. Alex: "Poi ho creato una versione short ....."

    A me non hai chiarito nulla! Cosa intendi con "VERSIONE SHORT"?!?!?!?!?





    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)