Funzione Copia su tasto

di il
16 risposte

Funzione Copia su tasto

Buongiorno a tutti, da parecchio che non ci si legge…

Sto cercando di implementare, su un pulsante, la funzione Copia (so che si può effettuare facendo Ctrl+C, ma purtroppo i miei colleghi non sono o non voglio essere capaci di farlo, per cui devo “abbozzare”…).

Il motivo è che devo poter copiare il contenuto di una casella di testo per poterla, ad esempio, inserira in un portale WEB.

Ho girato su Google, ma la maggioranza dei messaggi mi riporta al defunto Masterdrive…

Oltretutto, guardando meglio in giro, ho visto che posso aprire una Macro o generare una macro incorporata nel pulsante, ma l'opzione EseguiComando non me la trovo nei comandi disponibili in Macro; mi ritrovo solamente EseguiComandoMenu, che non mi serve.

Francamente, però, vorrei evitare di aprire una Macro (io le Macro non le uso praticamente mai, preferisco evitarle), meglio sarebbe una routine in VBA.

Cosa mi manca o cosa sto sbagliando?

Voglio aggiungere che uso Office 2021

Grazie a chi mi risponderà

16 Risposte

  • Re: Funzione Copia su tasto

    Argomento non banale… e temo non ti piacerà la risposta.

    Con Access si può usare il RunCommand ed usare [acCmdCopy] e [acCmdPaste], tuttavia questi sono funzionali solo in Access.

    Se devi rendere disponibile tra APP differenti devi andare nella ClipBoard di Windows… e quì le cose si complicano molto… API

    http://allenbrowne.com/func-07b.html

  • Re: Funzione Copia su tasto

    Sapevo bene dall'inizio che l'argomento non era banale, ed infatti ero consapevole anche del “rischio” di una risposta “poco gradita”; quindi, se ho capito bene, devo prima copiare il testo nella casella (di testo, appunto) nella ClipBoard (quindi negli Appunti), e poi fare l'"Incolla" sull'altra applicazione, ho capito bene?

  • Re: Funzione Copia su tasto

    Detto semplicemente non ne vale la pena per 2 motivi…!

    1)Troppo codice da scrivere contro il CTRL+C e CTRL+V
    Puoi verificare se dopo il SetFocus e SelStart/SelLenght puoi lanciare un Senkeys:

    Me!TuaTextBox.SetFocus
    Me!TuaTextBox.SelStart=0
    Me!TuaTextBox.SelLenght=Len(Me!TuaTextBox.value)
    SendKeys "^C"

    2) Sempre funzioni, ma al limite con le API si fa, il problema diventa il PASTE nell'applicazione WEB… come pensi di recuperare il punto di inserimento nella pagina…?

    Una volta con Explorer si poteva anche fare ora, Explorer non è più gestibile(parlo della libreria non del Browser o meglio la libreria del Browser, la cosa è assai complessa… da Access poi…

  • Re: Funzione Copia su tasto

    Ma infatti credo che con l'API andiamo troppo oltre per complicarci la vita, anche perché, come dici anche tu, è facile che il portale WEB mi possa creare qualche tipo di problema.

    Provo ad usare il codice che hai postato, si sa mai che con poco risolvo il problema …

    Ti faccio sapere in pochi minuti; grazie per il TIP

  • Re: Funzione Copia su tasto

    Si ma come fai il PASTE…?

  • Re: Funzione Copia su tasto

    Il SendKeys in quale libreria si trova, per poterla attivare?

  • Re: Funzione Copia su tasto

    26/08/2024 - @Alex ha scritto:


    Si ma come fai il PASTE…?

    Aspetta, andiamo per gradi; Vorrei prima vedere di iniziare a fare il Copy; poi mi dedico al Paste

  • Re: Funzione Copia su tasto

    Secondo me non lo risolvi proprio quello…!

    SendKeys è nativo, togli Application dall'esempio vedrai che funziona… il comando.

  • Re: Funzione Copia su tasto

    Niente da fare. :-(

  • Re: Funzione Copia su tasto

    Quì trovi esempi API 32bit, quindi da modificare…

    http://access.mvps.org/access/api/api0049.htm

    Puoi vedere anche questo se funziona in MsAccess

    https://www.vbforums.com/showthread.php?585616-clipboard-activex-for-vba-vbs-etc

    Tuttavia come ti ho cercato di far capire la cosa piu complessa è capire come fare il paste nel posto giusto.

    Esprimo tuttavia la mia contrarietà a questi accrocchi fuori dalla portata per accontentare chi non sa/vuole fare CTRL+C/V capisco tante storture per chi fa questi lavori, ma serve avere semrpe una misura, questa richiesta è da cassare.

  • Re: Funzione Copia su tasto

    26/08/2024 - @Alex ha scritto:


    Quì trovi esempi API 32bit, quindi da modificare…

    http://access.mvps.org/access/api/api0049.htm

    Puoi vedere anche questo se funziona in MsAccess

    https://www.vbforums.com/showthread.php?585616-clipboard-activex-for-vba-vbs-etc

    Tuttavia come ti ho cercato di far capire la cosa piu complessa è capire come fare il paste nel posto giusto.

    Esprimo tuttavia la mia contrarietà a questi accrocchi fuori dalla portata per accontentare chi non sa/vuole fare CTRL+C/V capisco tante storture per chi fa questi lavori, ma serve avere semrpe una misura, questa richiesta è da cassare.

    Fondamentalmente sono TOTALMENTE d'accordo con te, visto che alla fine, chi si smazza dietro lo sviluppo del database sono io…

    E' che io, purtroppo, con i miei colleghi (non tutti) sono sempre stato di animo buono e compiacente, ma stavolta credo di essere in diritto di poter dire “non è possibile”.

  • Re: Funzione Copia su tasto

    Di scarsa utilità pratica per il thread specifico, intervengo solo come informazione generale sull'argomento.

    DoCmd.RunCommand acCmdCopy funziona fino a 32767 caratteri, poi va in errore di overflow. Non l'ho provato su Access a 64bit. Situazione improbabile, però questa limitazione esiste.

    Da valutare la possibilità di non copiare niente se non c'è niente da copiare, nel senso di non avviare proprio l'azione di copia.

    Textbox01.SetFocus
    If Len(Textbox01.Value & vbNullString) = 0 Then
       MsgBox ("Non c'è niente da copiare")   'O semplicemente Exit Sub/Function
    Else
       Textbox01.SelStart=0
       Textbox01.SelLength=Len(Textbox01.value)
       DoCmd.RunCommand accmdCopy
       Textbox01.SelStart = Len(Textbox01.Value)
       Textbox01.SelLength = 0
    End If

    Le ultime due righe servono per riportare il cursore alla fine della casella e non lasciare il testo selezionato.

    Se non hai a disposizione il nuovo controllo WebView2 (ero rimasto al fatto che fosse solo su Microsoft365 ma potrebbe non essere più così, quindi da verificare) l'unico modo che conosco di controllare un browser da VBA è Selenium ma anche anche lì… uff che fatica trovare il punto giusto, in alcune situazioni ci ho rinunciato.

  • Re: Funzione Copia su tasto

    27/08/2024 - Philcattivocarattere ha scritto:


    Textbox01.SetFocus If Len(Textbox01.Value & vbNullString) = 0 Then MsgBox ("Non c'è niente da copiare") 'O semplicemente Exit Sub/Function Else Textbox01.SelStart=0 Textbox01.SelLength=Len(Textbox01.value) DoCmd.RunCommand accmdCopy Textbox01.SelStart = Len(Textbox01.Value) Textbox01.SelLength = 0 End If

    Phil sei stato davvero prezioso!!!! 

    Ho chiaramente sostituito Textbox01 con la casella che mi serviva e ho fatto la prova su un file Word; funziona alla perfezione!!!

    Grazie!!

  • Re: Funzione Copia su tasto

    27/08/2024 - carlo pots ha scritto:

    Phil sei stato davvero prezioso!!!! 

    Ok, ma si poteva fare meglio e se non lo scrivo non mi do pace. La regola dice: “Nella If metti prima la condizione che risulta vera con maggior frequenza” e siccome immagino che siano molte più le occasioni in cui c'è qualcosa da copiare rispetto al contrario, il codice diventa

    With Textbox01
    	.SetFocus
    	If Len(.Value & vbNullString) = 0 Then
    	   .SelStart=0
    	   .SelLength=Len(.value)
    	   DoCmd.RunCommand accmdCopy
    	   .SelStart = Len(.Value)
    	   .SelLength = 0
    	Else
    	   MsgBox ("Non c'è niente da copiare")   'O Exit Sub/Function o senza Else del tutto.
    	End If
    End With

    Così c'è anche un punto solo dove cambiare il nome del controllo.

Devi accedere o registrarti per scrivere nel forum
16 risposte