Note: The other languages of the website are Google-translated. Back to English

Come attivare o eseguire una macro facendo clic su una cella specifica in Excel?

Mentre lavori con Microsoft Excel, potresti sapere come eseguire una determinata macro con un pulsante di comando. Ma sai come eseguire una macro semplicemente facendo clic su una cella specifica in un foglio di lavoro? Questo articolo ti mostrerà il metodo per attivare una macro facendo clic su una cella specifica nei dettagli.

Attiva o esegui una macro facendo clic su una cella specifica con codice VBA


Attiva o esegui una macro facendo clic su una cella specifica con codice VBA

Il seguente codice VBA può aiutarti a eseguire una macro facendo clic su una cella specifica in Excel. Si prega di fare quanto segue.

1. Sul foglio di lavoro con la cella su cui è necessario fare clic per eseguire una macro, fare clic con il pulsante destro del mouse sulla scheda del foglio, quindi fare clic su Visualizza codice dal menu di scelta rapida.

2. Nel Microsoft Visual Basic, Applications Edition finestra, copia e incolla lo script VBA sottostante nella finestra del codice.

Codice VBA: attiva o esegui una macro facendo clic su una cella specifica

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.Count = 1 Then
        If Not Intersect(Target, Range("D4")) Is Nothing Then
            Call MyMacro
        End If
    End If
End Sub

Note:

1. Nel codice, D4 ​​è la cella su cui farai clic per eseguire Macro;

2. Si prega di sostituire il nome in codice La mia macro con la Macro eseguirai nel foglio di lavoro. Vedi screenshot:

3. premi il altro + Q contemporaneamente i tasti per chiudere il file Microsoft Visual Basic, Applications Edition finestra.

D'ora in poi, quando si fa clic sulla cella D4 nel foglio di lavoro corrente, la Macro specificata verrà attivata immediatamente.


Articoli correlati:


I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office/Excel 2007-2021 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
fondo officetab
Commenti (37)
Ancora nessuna valutazione. Puoi essere il primo a votare!
Questo commento è stato fatto dal moderatore sul sito
Attivare o eseguire una macro facendo clic su una cella specifica con codice VBA, non è stato possibile farlo funzionare. L'ho provato in molti modi diversi, ma non ha mai raggiunto ciò che era stato promesso.
Questo commento è stato fatto dal moderatore sul sito
Questo codice funzionerà solo se lo inserisci nel modulo "ThisWorkbook". Non funziona su un modulo generale.
nome cartella di lavoro > Oggetti Microsft Excel > Questa cartella di lavoro.
Questo commento è stato fatto dal moderatore sul sito
Questo codice funzionerà sul modulo del codice del foglio di lavoro. È necessario fare clic con il pulsante destro del mouse sulla scheda del foglio e fare clic su "Visualizza codice". Questo aprirà il modulo di codice solo per quel foglio di lavoro. Quindi incolla il codice menzionato.
Questo commento è stato fatto dal moderatore sul sito
Se vuoi avere più macro, celle che eseguono macro diverse sulla stessa pagina, è possibile?
Questo commento è stato fatto dal moderatore sul sito
Caro Simon,
Lo script VBA seguente può aiutarti a eseguire diverse macro facendo clic sulle celle nella stessa pagina.

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Se Target.Count = 1 Allora
If Not Intersect(Target, Range("D4")) non è nulla, chiama MyMacro1
If Not Intersect(Target, Range("D8")) non è nulla, chiama MyMacro2
If Not Intersect(Target, Range("D10")) non è nulla, chiama MyMacro3
End If
End Sub

Si prega di aggiungere la riga "If Not Intersect(Target, Range("D10")) Is Nothing Then Call MyMacro" per eseguire più macro facendo clic sulla cella. E cambia i nomi delle celle e delle macro nel codice in base alle tue esigenze.
Questo commento è stato fatto dal moderatore sul sito
Non funziona sul mio Excel. Il codice è corretto?
Questo commento è stato fatto dal moderatore sul sito
Ciao Camila,
Ci dispiace per l'inconvenienza. Prova il codice VBA sottostante.

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRgArr come variante
Dim xFunArr come variante
Dim xFNum come intero
Dim xStr come stringa
Dim xRg come intervallo
xRgArr = Array("A1", "D1", "C1") 'Celle utilizzate per attivare la macro
xFunArr = Array("Nome codice1", "Nome codice2", "Nome codice3") 'I nomi di codice corrispondenti
Se Selection.Count = 1 Allora
Per xFNum = 0 A UBound(xRgArr)
Imposta xRg = ActiveSheet.Range(xRgArr(xFNum))
If Not Intersect(Target, xRg) non è niente allora
xStr = xFunArr(xFNum)
Applicazione.Run xStr
End If
Successiva
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Questo ha funzionato perfettamente e mi farà risparmiare un sacco di tempo - grazie per aver condiviso la tua conoscenza - molto apprezzato!
Questo commento è stato fatto dal moderatore sul sito
Sono felice di aver potuto aiutare.
Questo commento è stato fatto dal moderatore sul sito
Grande. Funziona bene... Grazie....
Questo commento è stato fatto dal moderatore sul sito
Salve.

Ho funzionato bene, ma vorrei aggiungere una condizione all'esecuzione della macro. Voglio eseguire la macro solo se la cella accanto alla cella su cui faccio clic contiene un determinato valore.
es. Quando faccio clic sulla cella F6, voglio che la macro venga eseguita se la cella E6 contiene "x", ma se la cella E6 è vuota, la macro non deve essere eseguita.
Spero che ha senso.
Grazie

ecco il mio codice originale senza la condizione:


Opzione esplicita

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Se Selection.Count = 1 Allora
If Not Intersect(Target, Range("F6:F18")) non è niente allora
Chiama datePick
End If
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Il seguente codice VBA può aiutarti a risolvere il problema. Per favore, prova e grazie per il tuo commento.

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRg come intervallo
If Not Intersect(Target, Range("F6:F18")) non è niente allora
Imposta xRg = ActiveSheet.Cells(Target.Row, Target.Column - 1)
Se (xRg.Value = "") O (xRg.Value <> "X") Allora Esci da Sub
Chiama la selezione della data
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Grazie, ma per quanto riguarda le celle unite?
Questo commento è stato fatto dal moderatore sul sito
Ciao Alber,
Il codice non funziona per le celle unite.
Questo commento è stato fatto dal moderatore sul sito
sto usando OpenOffice e ho fatto clic con il pulsante destro del mouse sulla scheda del foglio e selezionato gli eventi, quindi ho selezionato questa macro da MyMacros. Tuttavia ottengo un errore nella riga seguente: Se Selection.Count = 1 Quindi >>> "Errore di runtime di base, variabile non definita...
Questo commento è stato fatto dal moderatore sul sito
Ciao James,
Il codice funziona solo per Microsoft Office Excel. Grazie per il tuo commento.
Questo commento è stato fatto dal moderatore sul sito
Il mio codice completo in questa macro è:


Private Sub Worksheet_SelectionChange (ByVal Target As Range)

Dim val come stringa
REM val = Intervallo ("A2"). Valore

Se Selection.Count = 1 Allora
If Not Intersect(Target, Range("D24")) non è niente allora
REM Chiama MyMacro
val = Intervallo ("D24"). Valore
Intervallo ("B27"). Valore = val
End If
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Questo argomento è molto interessante e sono interessato ma non so dove trovarlo, per fortuna crei questo argomento, spero che tutti mi aiutino http://run-3.online
Questo commento è stato fatto dal moderatore sul sito
Excel 2002 (XP): se una cartella di lavoro viene aperta selezionando "File" e premendo "Maiusc" si disabilitano le macro in quel foglio, il problema è che se seleziono "Strumenti > Macro > Macro..." posso eseguire la macro comunque come risolvere?
Questo commento è stato fatto dal moderatore sul sito
Ciao Roger,
Non abbiamo testato il codice in Excel 2002(XP). Perché non utilizzare la versione più recente di Microsoft Office? Sarà più facile per il tuo lavoro.
Questo commento è stato fatto dal moderatore sul sito
Stesso risultato nel 2010.
Questo commento è stato fatto dal moderatore sul sito
Perché non usare solo una versione più recente sarà più facile
https://games.lol/racing/
Questo commento è stato fatto dal moderatore sul sito
Grazie, ma che ne dici di diverse celle per fare clic per eseguire diverse macro.
Questo commento è stato fatto dal moderatore sul sito
Ciao,
Prova il codice VBA sottostante.

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim xRgArr come variante
Dim xFunArr come variante
Dim xFNum come intero
Dim xStr come stringa
Dim xRg come intervallo
xRgArr = Array("A1", "D1", "C1") 'Celle utilizzate per attivare la macro
xFunArr = Array("Nome codice1", "Nome codice2", "Nome codice3") 'I nomi di codice corrispondenti
Se Selection.Count = 1 Allora
Per xFNum = 0 A UBound(xRgArr)
Imposta xRg = ActiveSheet.Range(xRgArr(xFNum))
If Not Intersect(Target, xRg) non è niente allora
xStr = xFunArr(xFNum)
Applicazione.Run xStr
End If
Successiva
End If
End Sub
Questo commento è stato fatto dal moderatore sul sito
Grazie per questo codice. È possibile farlo funzionare facendo clic su una cella unita ad altre?
Questo commento è stato fatto dal moderatore sul sito
Ciao M.Symonds,
Il codice in questo articolo può farti un favore: https://www.extendoffice.com/documents/excel/4354-excel-click-on-cell-to-run-macro.html
Grazie per il tuo commento.
Questo commento è stato fatto dal moderatore sul sito
ciao, stavo cercando di usare questo codice per eseguire una macro di incolla ma non riesco a capire come incollare correttamente la macro.

ecco il mio Marco originale

Sottocolla()
'
' Incolla Macro
'

'
Range ( "B34"). Select
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
Falso, NoHTMLFormatting:=True
End Sub


ogni aiuto è apprezzato
Questo commento è stato fatto dal moderatore sul sito
Ciao, grazie per il tuo argomento interessante. E se per esempio volessi fare clic su D4 in Sheet1 e vedere il risultato di Macro in Sheet2!F3.
Questo commento è stato fatto dal moderatore sul sito
Non funziona più.
Worksheet_SelectionChange non esiste per impostazione predefinita. Significa che non puoi usarlo per attivare una macro.

L'unico sub incorporato che puoi utilizzare è indicato nell'elenco a discesa "Cartella di lavoro", quindi...

L'unica cosa più vicina che puoi fare è usare Workbook_SheetBeforeDoubleClick. Ma entrerà in modalità Modifica (non è ancora un grosso problema).
Questo commento è stato fatto dal moderatore sul sito
Ciao CodeKiller.Worksheet_SelectionChange esiste solo nell'editor Sheet(Code). Fare clic con il pulsante destro del mouse sulla scheda del foglio e fare clic su Visualizza codice per attivare l'editor Foglio(Codice).
Questo commento è stato fatto dal moderatore sul sito
È importante sottolineare che la macro viene eseguita solo nel foglio di lavoro.
Quelli di noi che usano il normale editor di Visual Basic spesso finiscono per archiviare le macro in luoghi diversi dal foglio di lavoro corrente.
Nessuno di questi codici funzionerà in quella situazione.
Trovo che questo codice sia molto più semplice e funziona molto bene per me: 

Private Sub Worksheet_SelectionChange (ByVal Target As Excel.Range)
If Not Intersect(Range("d1"), Target) non è niente allora
Chiama aa
End If
End Sub
Sub aa() ' inserisci il tuo codice qui
Intervallo ("D1").Seleziona
Selection.Copy
Intervallo ("F1").Seleziona
ActiveSheet.PasteEnd Sub
John Wells
jnw.wells@gmail.com
Questo commento è stato fatto dal moderatore sul sito
Ciao John Wells, grazie per la condivisione.
Questo commento è stato fatto dal moderatore sul sito
Per coloro che desiderano che funzioni per le celle unite, il modo più rapido e sporco è aggiornare la riga 2 come segue:
Opzione esplicita

Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Se Conteggio.selezione > 0 Allora
If Not Intersect(Target, Range("D4")) non è niente allora
Chiama MyMacro
End If
End If
End SubSelection.Count viene utilizzato per determinare se è stata effettuata una selezione prima di eseguire la macro rimanente. Se la tua selezione è composta da quattro celle che sono state unite, Selection.Count sarà uguale a 4 e il codice rimanente non verrà mai eseguito. Puoi anche modificare la riga 2 con il numero esatto di celle che sono state unite, ma ciò causerà problemi se unire celle aggiuntive.
Questo commento è stato fatto dal moderatore sul sito
Grandioso! Grazie, era una vita che sognavo di poterlo fare, se può essere utile a qualcuno avendo necessità di eseguire più codici su più celle per
aumentare il numero di opzioni basta aggiungere le nuove istruzionisempre sotto la stessa opzione esplicita altrimente ci viene detto che il riferimento al
foglio di lavoro non è univoco. Mi spiego meglio evidentemente su come ho adattato il codice con il mio esempio;

Opzione esplicita
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Se Selection.Count = 1 Allora
If Not Intersect(Target, Range("Y64")) non è niente allora
Intervallo("Y65:Y78").Seleziona
Intervallo ("Y65"). Attiva
Selection.ClearContents
Intervallo ("Y65").Seleziona
End If
If Not Intersect(Target, Range("A33")) non è niente allora
Intervallo ("A33").Seleziona
Selection.Copy
ActiveWindow.WindowState = xlMinimizzato
Chiavi di invio "^v"
SendKeys "{BACKSPACE}"
End If
End If
End Sub

Grazie ancora è stata un'autentica meraviglia!

Massimo
Questo commento è stato fatto dal moderatore sul sito
Non avevo aspettative riguardo a quel titolo, ma più ne rimasi sbalordito. L'autore ha fatto un ottimo lavoro. Ho passato alcuni minuti a leggere e controllare i fatti. Tutto è molto chiaro e comprensibile. Mi piacciono i post che colmano le tue lacune di conoscenza. Questo è del genere.
Questo commento è stato fatto dal moderatore sul sito
Ciao,

No encuentro la manera de hacer lo que necesito. Espero de veras que me podáis ayudar.
Necesito che se lancia una MACRO per fare clic su una cella, ma non si trova in questa casella, non lo può confrontare con (se ha selezionato la casella A3, per esempio, che lancia l'azione) perché funziona fichero, las celdas se van a mover de sitio (se han podido insertar, mas o menos filas encima). Necesitaría poder saber que celda es la que se ha seleccionado.
Hay alguna manera de poder hacer eso?
Vi ringrazio molto in anticipo.
Questo commento è stato fatto dal moderatore sul sito
Ciao Hola,
L'indirizzo della cella è costante. Tutto ciò che puoi spostare è il valore della cella.
La cella specificata nel codice VBA è ancora la cella che attiva il codice VBA specificato.
Non ci sono ancora commenti pubblicati qui
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite

Seguici

Copyright © 2009 - www.extendoffice.com. | Tutti i diritti riservati. Offerto da ExtendOffice, | Mappa del sito
Microsoft e il logo Office sono marchi o marchi registrati di Microsoft Corporation negli Stati Uniti e / o in altri paesi.
Protetto da Sectigo SSL