Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Excel - Creare form e macro associate

    Salve a tutti,

    Il mio "problema" consiste nell'associare delle celle a delle caselle di testo create in un form per inserire poi i dati in un foglio apposito.

    Cerco di spiegarmi meglio:

    Ho creato un form con delle caselle di testo, una volta aperto il form tramite una macro attivata da un pulsante, i dati che inserisco in queste caselle dovrebbero essere copiati su una riga di un foglio magari in ordine alfabetico rispetto alle altre righe esistenti.

    La mia idea è di far aprire il form con un pulsante (e fin qui ci sono riuscito), una volta inseriti i dati (nome,cognome,indirizzo, etc.) sfruttare un pulsante di comando sullo stesso form per inserirli in ordine alfabetico in un elenco già esistente su un altro foglio.

    Mi basterebbe capire come associare una determinata cella ad una casella di testo del form e come associare una macro al pulsante di comando dello stesso form.

    Grazie in anticipo a chiunque avrà la pazienza di aiutarmi.

  2. #2
    Ciao, benvenuto,
    non puoi “associare” un controllo del form ad una cella, puoi invece scrivere uno script che preleva il valore di un controllo (come una casella di testo) e ne fa quello che vuoi, per esempio lo inserisce in una cella.

    Ad esempio se hai il Foglio1 col pulsante CommandButton1 che apre il form e il form UserForm1 che contiene i controlli TextBox1, TextBox2 e CommandButton1, dovrai associare al Foglio 1 uno script come questo:

    codice:
    Private Sub CommandButton1_Click()
       UserForm1.Show
    End Sub
    che visualizza il form mentre al form assocerai un codice come questo:

    codice:
    Private Sub CommandButton1_Click()
       [a2] = TextBox1
       [a3] = TextBox2
    End Sub
    che preleva i valori dei due textbox e li inserisce in due celle.

    Nota che i due pulsanti, pur avendo lo stesso nome, sono diversi perché si trovano in contesti diversi, uno nel Foglio1 e uno nel form.

    Per accedere al codice associato al form basta che, dall’editor del VBA, vai sulla barra dei progetti che in genere è un rettangolo in alto a sinistra in cui c’è tutto l’albero dei fogli (oppure clicchi su Visualizza -> Gestione progetti) e clicchi due volte su UserForm1 e poi clicchi due volte sul pulsante del form.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Perfetto!!!

    Grazie NonCeLaFaccio+ (e anche su questo mi trovi d'accordo).

    A questo punto pensavo fosse più semplice realizzare la mia idea che ti spiego:

    Una volta inseriti i dati su ogni cella corrispondente ( ti ringrazio ancora per la delucidazione), vorrei far partire una macro, che ho già fatto, per cui questi dati vengano inseriti in un elenco in ordine alfabetico.

    La mia domanda è:
    Come posso far partire la macro direttamente dal tasto del form che i inserisce i dati?

    i dati, attualmente, vengono inseriti in un altro foglio che mi serve da supporto, dopodichè la macro trasferisce tali dati nell'ultima riga dell'elenco esistente e riordina tutto l'elenco in ordine alfabetico ed inoltre ripulisce le celle del foglio di supporto. Posso far partire la macro dal pulsante del form dopo che ha inserito i dati?

    Visto che ci sono ti pongo anche un altro quesito:
    questo elenco che sto realizzando è una sorta di rubrica che sfrutto per richiamare il cliente e tutti i dati associati con un menu a tendina ( per questo mi servono in ordine alfabetico ).
    Esiste un modo in excel per richiamare un nome scrivendo magari solo le prime lettere?

    Grazie ancora

  4. #4
    Posso far partire la macro dal pulsante del form dopo che ha inserito i dati?
    La macro è una SUB come tutte le altre quindi, se è visibile dallo script (dipende da come l’hai creata e da dove è posizionata nell’albero dei progetti), basta semplicemente richiamarne il nome per eseguirla.

    Per fare una cosa pulita potresti raggruppare tutte le operazioni di inserimento (cioè di trasferimento dalle caselle di testo alle celle del foglio) in una SUB che potrebbe chiamarsi, ad esempio, Inserisci(), tutte le operazioni di trasferimento da un foglio all’altro in un’altra SUB, chiamata Trasferisci() e tutte quelle di ordinamento in una terza chiamata Ordina() e poi richiamarle una di seguito all’altra, così:

    codice:
    Private Sub CommandButton1_Click()
       Inserisci
       Trasferisci
       Ordina
    End Sub
    
    Private Sub Inserisci()
       [a2] = TextBox1
       [a3] = TextBox2
       eccetera ...
    End Sub
    
    Private Sub Trasferisci()
    
         Istruzioni varie prelevate dalla macro attuale
    
    End Sub
    
    Private Sub Ordina()
    
         Istruzioni varie prelevate dalla macro attuale
    
    End Sub
    In questo modo avresti un modulo principale attivato dall’handler dell’evento click e poi tre routine chiamate in sequenza che svolgono compiti ben specifici.


    Esiste un modo in excel per richiamare un nome scrivendo magari solo le prime lettere?
    Il modo più semplice che conosca è di attivare un filtro automatico sulle colonne che ti interessano e poi usare quello (Scheda Dati --> Filtro e poi Filtra per testo --> Inizia con), altrimenti potresti fare una macro, attivata dalla modifica di una cella, che preleva il testo inserito e lo evidenzia, una cosa tipo questa che viene attivata dalla modifica del valore di A1 e colora di rosso i nomi presenti nel range B1:B100 che cominciano col contenuto di A1

    codice:
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, [A1]) Is Nothing And [A1] <> "" Then
           Set Rng = Range("B1:B100")
           For Each Casella In Rng
              If Left(Casella, Len([A1])) = [A1].Value Then
                 Casella.Font.Color = vbRed
              Else
                 Casella.Font.Color = vbBlack
              End If
           Next
        End If
    End Sub
    oppure, sempre attivata dalla modifica di una cella, potrebbe applicare un filtro o fare altre cose.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.