Condividi:        

Monitorare la clipboard di Windows da Excel... si può?

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

Monitorare la clipboard di Windows da Excel... si può?

Postdi maxmula » 06/09/07 12:28

Ciao a tutti.
Rieccomi a voi con un nuovo difficile (per me) quesito.

Allora:
- ho scritto un programmino che "fa cose" partendo da un tabulato in formato testo copiato negli Appunti di windows (ovvero, lo incolla in un foglio vuoto, quindi analizza ed estrae i dati necessari).

- Per fare questo è necesario lanciare un comando in un'altra applicazione, aspettare che arrivi l'output (in una textbox), copiare con CTRL+A/CTRL-C, selezionare il foglio con la macro e cliccare su un pulsante che avvia tutta la procedura.

- Ora vorrei fare in modo che sia lo stesso Excel a monitorare gli appunti, senza dover più switchare tra una finestra e l'altra...

Mi spiego: non appena (nell'altra applicazione) faccio CTRL-C, il programma in Excel dovrebbe icncollare e partire con l'analisi.

Un modo a cui ho pensato è usare la funzione OnTime(): ad intervalli predefiniti (es: 1 secondo) si potrebbe far partire la procedura sopra descritta. Però credo che finirebbe per pesare -e non poco- sul sistema!

Ecco quindi il mio quesito: esiste un modo per monitorare efficacemente gli appunti, così da avviare la macro solo se è stato effettivamente copiato qualcosa in memoria?

Grazie in anticipo e... scusate se sono sempre un po' prolisso! :)

MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Sponsor
 

Postdi Anthony47 » 07/09/07 02:36

Da qualche parte devo avere un prototipo che faceva qualcosa del genere, derivato da informazioni prese (credo) sul sito di Chip Pearson.
Se hai pazienza… Intanto se fai progressi sono interessato ad approfittarne.

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

Postdi maxmula » 07/09/07 12:51

Ho visto la pagina di Chip Pearson: sembra interessante!

Appena ho un po' di tempo mi ci metto con calma...

Come al solito... grazie per la dritta!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Postdi maxmula » 08/09/07 23:26

Ho studiato ed implementato.
Ora il mio programma reagisce in modo automatico, monitorando gli Appunti ad intervalli di un secondo: non faccio in tempo ad attivare la finestra di excel che mi trovo i dati già elaborati (e solo quelli che mi servono).
Unico impatto sul sistema: utilizza un po' di memoria, specialmente se il testo è lungo (nel mio caso sono circa 8 KB). Tempo di esecuzione della routine di controllo: irrisorio (permette di lavorare normalmente con gli altri programmi aperti). FANTASTICO!

Posto il codice a beneficio della comunità . Ulteriori informazioni sulle funzioni utilizzate (gettext, getfromclipboard, ecc.) sono disponibili nella guida in linea di VBA.
:)

Codice: Seleziona tutto
Sub CONTROLLA_CLIPBOARD()
   'MONITORA GLI APPUNTI ED INCOLLA AUTOMATICAMENTE DA RAM - by  maxmula for pc-facile, 2007
   
   'Beep 'SERVE SOLO PER SAPERE SE LA ROUTINE STA GIRANDO... ABBASTANZA FASTIDIOSO: TOGLIETE IL COMMENTO SOLO PER DEBUG! :-)
   
Dim AUTO as Boolean

APP_NAME = Sheets("PASTE").Range("O1").Value
   LUNGH = Len(APP_NAME)

   AUTO = Workbooks(APP_NAME).Sheets("Foglio1").Range("AA2").Value
      'Linea "optional": il valore di questa cella, nel mio foglio, è gestito da un ToggleButton che permette di abilitare o disabilitare comodamente la funzione.
   If AUTO <> True Then GoTo FINE
   TESTO = GetOffClipboard()
   
   'vediamo se bisogna far partire l'analisi dei dati...
   If InStr(1, TESTO, "START REPORT:") Then
      Call INCOLLA_GETINFO("RAM")
        'questa è la funzione che "fa cose", di cui parlavo all'inizio del topic. ovviamente la stringa "START REPORT:" caratterizza il tipo di testo che mi interessa importare.

    End If

'Ora non resta che riprogrammare l'evento per il prossimo giro:
Application.OnTime Now + TimeValue("00:00:1"), "CONTROLLA_CLIPBOARD"
FINE:

End Sub



Public Function GetOffClipboard() As Variant
' questa è la funzione presa dal sito di Chip Pearson, con piccoli adattamenti
    Dim MyDataObj As New DataObject
    MyDataObj.GetFromClipboard
    KK = MyDataObj.GetText()
    GetOffClipboard = KK
End Function




N.B. il codice riportato qui è "generalizzato", in quanto ho eliminato righe con richiami a funzioni particolari relative al mio programma.
Dovrebbe comunque funzionare ma non garantisco niente... :P
Se non altro, spero che renda l'idea!

Alla prossima,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Postdi Anthony47 » 09/09/07 23:50

Interessante sviluppo, e' finita nel mio personal.xls!

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


Torna a Applicazioni Office Windows


Topic correlati a "Monitorare la clipboard di Windows da Excel... si può?":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti