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

Cum să declanșați sau să rulați o macro făcând clic pe o anumită celulă din Excel?

În timp ce lucrați cu Microsoft Excel, este posibil să știți cum să rulați o anumită macro cu un buton de comandă. Dar știți cum să rulați o macro făcând clic pe o anumită celulă dintr-o foaie de lucru? Acest articol vă va arăta metoda de declanșare a unei macro făcând clic pe o anumită celulă în detalii.

Declanșați sau rulați o macro făcând clic pe o anumită celulă cu cod VBA


Declanșați sau rulați o macro făcând clic pe o anumită celulă cu cod VBA

Următorul cod VBA vă poate ajuta să rulați o macro făcând clic pe o anumită celulă din Excel. Vă rugăm să faceți următoarele.

1. În foaia de lucru cu celula pe care trebuie să faceți clic pentru a rula o macro, faceți clic dreapta pe fila de foaie, apoi faceți clic pe Afișați codul din meniul contextual.

2. În Microsoft Visual Basic pentru aplicații fereastra, copiați și lipiți scriptul VBA de mai jos în fereastra Cod.

Cod VBA: declanșați sau rulați o macro făcând clic pe o anumită celulă

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

notițe:

1. În cod, D4 este celula pe care veți face clic pentru a rula Macro;

2. Vă rugăm să înlocuiți numele de cod MyMacro cu Macro veți rula în foaia de lucru. Vedeți captura de ecran:

3. apasă pe Alt + Q tastele simultan pentru a închide Microsoft Visual Basic pentru aplicații fereastră.

De acum înainte, când faceți clic pe celula D4 din foaia de lucru curentă, Macro-ul specificat va fi declanșat imediat.


Articole pe aceeași temă:


Cele mai bune instrumente de productivitate Office

Kutools pentru Excel vă rezolvă majoritatea problemelor și vă crește productivitatea cu 80%

  • reutilizarea: Introduceți rapid formule complexe, diagrame și orice ai folosit anterior; Criptați celulele cu parola; Creați o listă de corespondență și trimiteți e-mailuri ...
  • Super Formula Bar (editați cu ușurință mai multe linii de text și formulă); Layout de citire (citiți și editați cu ușurință un număr mare de celule); Lipiți la interval filtrat...
  • Merge celule / rânduri / coloane fără a pierde date; Conținut de celule divizate; Combinați rânduri / coloane duplicate... Prevenirea celulelor duplicate; Comparați gamele...
  • Selectați Duplicat sau Unic Rânduri; Selectați Rânduri goale (toate celulele sunt goale); Super Find și Fuzzy Find în multe cărți de lucru; Selectare aleatorie ...
  • Copie exactă Mai multe celule fără modificarea referinței formulelor; Creați automat referințe la foi multiple; Introduceți gloanțe, Casete de selectare și multe altele ...
  • Extrageți textul, Adăugați text, eliminați după poziție, Eliminați spațiul; Creați și imprimați subtotaluri de paginare; Convertiți conținutul dintre celule și comentarii...
  • Super Filtru (salvați și aplicați scheme de filtrare altor foi); Sortare avansată după lună / săptămână / zi, frecvență și multe altele; Filtru special cu bold, italic ...
  • Combinați cărți de lucru și foi de lucru; Merge Tables pe baza coloanelor cheie; Împărțiți datele în mai multe foi; Conversia în loturi xls, xlsx și PDF...
  • Peste 300 de funcții puternice. Suportă Office / Excel 2007-2021 și 365. Acceptă toate limbile. Implementare ușoară în întreprinderea sau organizația dvs. Funcții complete Probă gratuită de 30 de zile. Garanție de returnare a banilor de 60 de zile.
fila kte 201905

Fila Office aduce interfața cu file în Office și vă face munca mult mai ușoară

  • Activați editarea și citirea cu file în Word, Excel, PowerPoint, Publisher, Access, Visio și Project.
  • Deschideți și creați mai multe documente în filele noi ale aceleiași ferestre, mai degrabă decât în ​​ferestrele noi.
  • Vă crește productivitatea cu 50% și reduce sute de clicuri de mouse pentru dvs. în fiecare zi!
fundul officetab
Comentarii (37)
Încă nu există evaluări. Fii primul care evaluează!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Declanșați sau rulați o macrocomandă făcând clic pe o anumită celulă cu cod VBA, nu a putut să funcționeze. Am încercat în multe moduri diferite, dar nu a reușit niciodată ceea ce mi s-a promis.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest cod va funcționa numai dacă îl plasați în modulul „ThisWorkbook”. Nu funcționează pe un modul general.
workbookname > Microsft Excel Objects > ThisWorkbook.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest cod va funcționa pe modulul de cod al foii de lucru. Trebuie să faceți clic dreapta pe fila foaie și să faceți clic pe „Vizualizare cod”. Acest lucru va deschide modulul de cod numai pentru acea foaie de lucru. Apoi lipiți codul menționat.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Dacă doriți să aveți mai multe macrocomenzi, celule care rulează macrocomenzi diferite pe aceeași pagină - este posibil?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Draga Simon,
Scriptul VBA de mai jos vă poate ajuta să rulați diferite macrocomenzi făcând clic pe celulele din aceeași pagină.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dacă Target.Count = 1 Atunci
Dacă nu se intersectează (țintă, interval ("D4")) nu este nimic, atunci apelați MyMacro1
Dacă nu se intersectează (țintă, interval ("D8")) nu este nimic, atunci apelați MyMacro2
Dacă nu se intersectează (țintă, interval ("D10")) nu este nimic, atunci apelați MyMacro3
Final, dacă
End Sub

Vă rugăm să adăugați linia „Dacă nu se intersectează (țintă, interval („D10”)) este nimic, atunci apelați Macro-ul meu” pentru a rula mai multe macrocomandări făcând clic pe celulă. Și modificați numele celulelor și macrocomenzilor din cod în funcție de nevoile dvs.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Nu funcționează pe Excel-ul meu. Codul este corect?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Camila,
Scuze pentru neplăceri. Încercați codul VBA de mai jos.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRgArr ca variantă
Dim xFunArr ca variantă
Dim xFNum ca număr întreg
Dim xStr As String
Dim xRg As Range
xRgArr = Array("A1", "D1", "C1") „Celule folosite pentru a declanșa macrocomandă
xFunArr = Array(„Nume cod1”, „Nume cod 2”, „Nume cod 3”) „Numele de cod corespunzătoare
Dacă Selectie.Număr = 1 Atunci
Pentru xFNum = 0 La UBound(xRgArr)
Set xRg = ActiveSheet.Range(xRgArr(xFNum))
Dacă nu se intersectează (țintă, xRg) nu este nimic, atunci
xStr = xFunArr(xFNum)
Aplicație.Run xStr
Final, dacă
Pagina Următoare →
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest lucru a funcționat perfect și mă va economisi mult timp - vă mulțumesc pentru împărtășirea cunoștințelor dvs. - foarte apreciat!
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mă bucur că am putut ajuta.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Grozav. Functioneaza bine... Multumesc....
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună.

Funcționează bine, dar aș dori să adaug o condiție la rularea macrocomenzii. Vreau să rulez macrocomandă numai dacă celula de lângă celula în care fac clic conține o anumită valoare.
De exemplu, când dau clic pe celula F6, vreau ca macro-ul să ruleze dacă celula E6 conține „x”, dar dacă celula E6 este goală, macro-ul nu trebuie să ruleze.
Sper că asta are sens.
mulțumesc

iată codul meu original fără condiția:


Opțiune explicită

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dacă Selectie.Număr = 1 Atunci
Dacă nu se intersectează (Target, Range ("F6:F18")) este nimic, atunci
Apelare dataPick
Final, dacă
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Următorul cod VBA vă poate ajuta să rezolvați problema. Vă rugăm să încercați și vă mulțumesc pentru comentariu.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRg As Range
Dacă nu se intersectează (Target, Range ("F6:F18")) este nimic, atunci
Set xRg = ActiveSheet.Cells(Target.Row, Target.Column - 1)
Dacă (xRg.Value = "") Sau (xRg.Value <> "X"), Ieșire din sub
Sunați la alegerea datei
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumesc, dar cum rămâne cu celulele îmbinate?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Salut Alber,
Codul nu funcționează pentru celulele îmbinate.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Folosesc OpenOffice și am făcut clic dreapta pe sheet-tab și am selectat evenimente și apoi am selectat această macrocomandă din MyMacros.. Cu toate acestea, primesc o eroare la următoarea linie: Dacă Selection.Count = 1 Then >>> "Eroare de rulare de bază, variabila nu este definita...
Acest comentariu a fost redus la minimum de moderatorul de pe site
Hi James,
Codul funcționează numai pentru Microsoft Office Excel. Multumesc pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Codul meu complet din această macrocomandă este:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim val As String
Val REM = Interval("A2").Valoare

Dacă Selectie.Număr = 1 Atunci
Dacă nu se intersectează (țintă, interval ("D24")) este nimic, atunci
REM Apelați MyMacro
val = Interval("D24").Valoare
Interval("B27").Valoare = val
Final, dacă
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Acest subiect este foarte interesant și sunt interesat, dar nu știu unde să găsesc, din fericire ați creat acest subiect, sper că toată lumea mă va ajuta http://run-3.online
Acest comentariu a fost redus la minimum de moderatorul de pe site
Excel 2002 (XP): Dacă un registru de lucru este deschis selectând „Fișier” și apăsând „Shift” se dezactivează macrocomenzile din acea foaie, problema este că dacă selectez „Tools > Macro > Macros...” pot rula macro-ul oricum cum se rezolva?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Hi Roger,
Nu am testat codul în Excel 2002(XP). De ce să nu folosiți versiunea mai nouă de Microsoft Office? Va fi mai ușor pentru munca ta.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Același rezultat în 2010.
Acest comentariu a fost redus la minimum de moderatorul de pe site
De ce să nu folosiți o versiune mai nouă, va fi mai ușor
https://games.lol/racing/
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumesc, dar ce zici de mai multe celule pentru a face clic pentru a rula mai multe macrocomenzi.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună,
Încercați codul VBA de mai jos.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRgArr ca variantă
Dim xFunArr ca variantă
Dim xFNum ca număr întreg
Dim xStr As String
Dim xRg As Range
xRgArr = Array("A1", "D1", "C1") „Celule folosite pentru a declanșa macrocomandă
xFunArr = Array(„Nume cod1”, „Nume cod 2”, „Nume cod 3”) „Numele de cod corespunzătoare
Dacă Selectie.Număr = 1 Atunci
Pentru xFNum = 0 La UBound(xRgArr)
Set xRg = ActiveSheet.Range(xRgArr(xFNum))
Dacă nu se intersectează (țintă, xRg) nu este nimic, atunci
xStr = xFunArr(xFNum)
Aplicație.Run xStr
Final, dacă
Pagina Următoare →
Final, dacă
End Sub
Acest comentariu a fost redus la minimum de moderatorul de pe site
Mulțumesc pentru acest cod. Este posibil ca acest lucru să funcționeze făcând clic pe o celulă care este îmbinată cu altele?
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună M.Symonds,
Codul din acest articol vă poate face o favoare: https://www.extendoffice.com/documents/excel/4354-excel-click-on-cell-to-run-macro.html
Multumesc pentru comentariu.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună ziua, încercam să folosesc acest cod pentru a rula o macrocomandă de lipire, dar nu pot să-mi dau seama cum să lipim corect macrocomanda.

aici este Marco meu original

Sub Paste()
'
' Lipiți macrocomanda
'

'
Interval("B34").Selectați
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
False, NoHTMLFormatting:=Adevărat
End Sub


orice ajutor este apreciat
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, mulțumesc pentru subiectul tău interesant. Ce se întâmplă dacă, de exemplu, vreau să dau clic pe D4 în Sheet1 și să văd rezultatul Macro în Sheet2!F3.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Nu mai functioneaza.
Worksheet_SelectionChange nu există în mod implicit. Înseamnă că nu poți folosi asta pentru a declanșa o macrocomandă.

Singurele sub încorporate pe care le puteți utiliza sunt menționate în lista drop-down „Carte de lucru”, deci...

Singurul lucru cel mai apropiat pe care îl puteți face este să utilizați Workbook_SheetBeforeDoubleClick. Dar va intra în modul Edit (încă nu e mare lucru).
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună, CodeKiller.Worksheet_SelectionChange există numai în editorul Sheet(Code). Faceți clic dreapta pe fila foii și faceți clic pe Vizualizare cod pentru a activa editorul Sheet(Code).
Acest comentariu a fost redus la minimum de moderatorul de pe site
Este important de subliniat că macro-ul rulează doar în foaia de lucru.
Aceia dintre noi care folosesc editorul vizual de bază obișnuit ajung adesea să stocheze macrocomenzi în alte locuri decât în ​​foaia de lucru curentă.
Niciunul dintre aceste coduri nu va funcționa în această situație.
Mi se pare că acest cod este mult mai simplu și funcționează foarte bine pentru mine: 

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dacă nu se intersectează (Range ("d1"), țintă) este nimic, atunci
Sună la aa
Final, dacă
End Sub
Sub aa() ' pune codul aici
Interval("D1").Selectați
Selectare.Copiere
Interval("F1").Selectați
ActiveSheet.PasteEnd Sub
John wells
jnw.wells@gmail.com
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună John Wells, Vă mulțumim pentru împărtășire.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Pentru cei care doresc ca acest lucru să funcționeze pentru celulele îmbinate, cel mai rapid și mai murdar mod este să actualizeze linia 2 după cum urmează:
Opțiunea explicită

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dacă Selecție.Număr > 0 Atunci
Dacă nu se intersectează (țintă, interval ("D4")) este nimic, atunci
Apelați MyMacro
Final, dacă
Final, dacă
End SubSelection.Count este folosit pentru a determina dacă a fost făcută o selecție înainte de a executa macrocomandă rămasă. Dacă selecția dvs. constă din patru celule care au fost îmbinate, Selection.Count va fi egal cu 4, iar codul rămas nu se va executa niciodată. De asemenea, puteți modifica linia 2 cu numărul exact de celule care au fost îmbinate, dar asta va cauza probleme dacă îmbina celule suplimentare.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Grandios! Grazie, era una vita che sognavo di poterlo fare, se poate fi util a cineva a avea nevoie de a executa mai multe coduri pentru mai multe celule.
măriți numărul de opțiuni, adăugați instrucțiunile, în continuare sub la aceeași opțiune explicit, altfel, ci vine detto che il referitor la
fișă de lucru non è univoco. Mi spiego meglio evidentmente su come ho adaptato il codice cu il mio example;

Opțiune explicită
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dacă Selectie.Număr = 1 Atunci
Dacă nu se intersectează (țintă, interval ("Y64")) nu este nimic, atunci
Interval("Y65:Y78").Selectați
Interval ("Y65").Activare
Selectie.ClearContents
Interval("Y65").Selectați
Final, dacă
Dacă nu se intersectează (țintă, interval ("A33")) nu este nimic, atunci
Interval("A33").Selectați
Selectare.Copiere
ActiveWindow.WindowState = xlMinimizat
SendKeys „^v”
Trimiteți cheile „{BACKSPACE}”
Final, dacă
Final, dacă
End Sub

Mulțumiri încă a fost o autentică meraviglia!

maxim
Acest comentariu a fost redus la minimum de moderatorul de pe site
Nu aveam nicio așteptare cu privire la acel titlu, dar cu atât eram mai uimit. Autorul a făcut o treabă grozavă. Am petrecut câteva minute citind și verificând faptele. Totul este foarte clar și de înțeles. Îmi plac postările care completează golurile tale de cunoștințe. Acesta este de genul acesta.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Buna,

No encuentro la manera de a face lo que necesito. Sper că mă pot ajuta.
Necesito că se lance una MACRO pentru a face clic într-o celă, dar nu sé în ce celda va a ser, nu pot compara cu (si se a selectat celda A3, de exemplu, că se lansează la acțiune) deoarece funcționalitățile fichero, las celdas se van a mover de sitio (se han podido insertar, mas o menos filas encima). Necesitaría poder saber ce celda este la care se ha selectat.
Există vreo modalitate de a putea face eso?
Vă mulțumesc foarte mult anticipat.
Acest comentariu a fost redus la minimum de moderatorul de pe site
Bună Hola,
Adresa celulei este constantă. Tot ce poți muta este valoarea celulei.
Celula pe care ați specificat-o în codul VBA este încă celula care declanșează codul VBA specificat.
Nu există comentarii postate aici încă
Lăsa comentarii
Postare ca invitat
×
Evaluează această postare:
0   Caractere
Locații sugerate

Urmărește-ne

Copyright © 2009 - www.extendoffice.com. | Toate drepturile rezervate. Cu sprijinul ExtendOffice. | Harta site-ului
Microsoft și sigla Office sunt mărci comerciale sau mărci comerciale înregistrate ale Microsoft Corporation în Statele Unite și / sau în alte țări.
Protejat de Sectigo SSL