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

Hur aktiverar eller kör du en makro genom att klicka på en specifik cell i Excel?

När du arbetar med Microsoft Excel kanske du vet hur du kör en viss makro med en kommandoknapp. Men vet du hur man kör en makro genom att bara klicka på en specifik cell i ett kalkylblad? Den här artikeln visar hur du aktiverar en makro genom att klicka på en specifik cell i detaljer.

Utlös eller kör en makro genom att klicka på en specifik cell med VBA-kod


Utlös eller kör en makro genom att klicka på en specifik cell med VBA-kod

Följande VBA-kod kan hjälpa dig att köra en makro genom att klicka på en specifik cell i Excel. Gör så här.

1. På kalkylbladet med cellen måste du klicka för att köra en makro, högerklicka på arkfliken och klicka sedan på Visa kod från snabbmenyn.

2. I Microsoft Visual Basic för applikationer fönster, kopiera och klistra in nedanstående VBA-skript i kodfönstret.

VBA-kod: Utlös eller kör en makro genom att klicka på en specifik cell

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

Anmärkningar:

1. I koden är D4 cellen du klickar för att köra makro.

2. Ersätt kodnamnet MyMacro med makroen kommer du att köra i kalkylbladet. Se skärmdump:

3. tryck på andra + Q samtidigt för att stänga Microsoft Visual Basic för applikationer fönster.

Från och med nu, när du klickar på cell D4 i det aktuella kalkylbladet, kommer din angivna makro att utlösas omedelbart.


Relaterade artiklar:


De bästa Office-produktivitetsverktygen

Kutools för Excel löser de flesta av dina problem och ökar din produktivitet med 80%

  • återanvändning: Sätt snabbt i komplexa formler, diagram och allt som du har använt tidigare; Kryptera celler med lösenord; Skapa e-postlista och skicka e-post ...
  • Super Formula Bar (enkelt redigera flera rader med text och formel); Läslayout (enkelt läsa och redigera ett stort antal celler); Klistra in i filtrerat intervall...
  • Sammanfoga celler / rader / kolumner utan att förlora data; Delat cellinnehåll; Kombinera duplicerade rader / kolumner... Förhindra duplicerade celler; Jämför intervall...
  • Välj Duplicera eller Unikt Rader; Välj tomma rader (alla celler är tomma); Super Find och Fuzzy Find i många arbetsböcker; Slumpmässigt val ...
  • Exakt kopia Flera celler utan att ändra formelreferens; Skapa referenser automatiskt till flera ark; Sätt in kulor, Kryssrutor och mer ...
  • Extrahera text, Lägg till text, ta bort efter position, Ta bort mellanslag; Skapa och skriva ut personsökningstalsatser; Konvertera mellan celler innehåll och kommentarer...
  • Superfilter (spara och tillämpa filterscheman på andra ark); Avancerad sortering efter månad / vecka / dag, frekvens och mer; Specialfilter av fet, kursiv ...
  • Kombinera arbetsböcker och arbetsblad; Sammanfoga tabeller baserat på nyckelkolumner; Dela data i flera ark; Batchkonvertera xls, xlsx och PDF...
  • Mer än 300 kraftfulla funktioner. Stöder Office / Excel 2007-2021 och 365. Stöder alla språk. Enkel implementering i ditt företag eller organisation. Fullständiga funktioner 30 dagars gratis provperiod. 60 dagars pengarna tillbaka-garanti.
kte-flik 201905

Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare

  • Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
  • Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
  • Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
officetab botten
Sortera kommentarer efter
Kommentarer (37)
Inga betyg än. Bli först med att betygsätta!
Denna kommentar minimerades av moderatoren på webbplatsen
Utlösa eller köra ett makro genom att klicka på en specifik cell med VBA-kod, kunde inte få detta att fungera. Jag provade det på många olika sätt, men det uppnådde aldrig vad som utlovats.
Denna kommentar minimerades av moderatoren på webbplatsen
Den här koden fungerar bara om du placerar den i modulen "ThisWorkbook". Det fungerar inte på en allmän modul.
arbetsboksnamn > Microsft Excel-objekt > ThisWorkbook.
Denna kommentar minimerades av moderatoren på webbplatsen
Den här koden kommer att fungera på kalkylbladskodmodulen. Du måste högerklicka på arkfliken och klicka på "Visa kod". Detta öppnar kodmodulen endast för det kalkylbladet. Klistra sedan in den nämnda koden.
Denna kommentar minimerades av moderatoren på webbplatsen
Om du vill ha flera makron, celler som kör olika makron på samma sida - är det möjligt?
Denna kommentar minimerades av moderatoren på webbplatsen
Kära Simon,
VBA-skriptet nedan kan hjälpa dig att köra olika makron genom att klicka på celler på samma sida.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Om Target.Count = 1 Då
Om inte intersect(Target, Range("D4")) är ingenting, ring då MyMacro1
Om inte intersect(Target, Range("D8")) är ingenting, ring då MyMacro2
Om inte intersect(Target, Range("D10")) är ingenting, ring då MyMacro3
End If
End Sub

Vänligen lägg till raden "If Not Intersect(Target, Range("D10")) Is Nothing Then Call MyMacro" för att köra mer makro genom att klicka på cellen. Och ändra cell- och makronamnen i koden baserat på dina behov.
Denna kommentar minimerades av moderatoren på webbplatsen
Det fungerar inte på min Excel. Är koden korrekt?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Camila,
Beklagar olägenheten. Prova nedanstående VBA-kod.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRgArr som variant
Dim xFunArr som variant
Dim xFNum Som heltal
Dim xStr As String
Dim xRg As Range
xRgArr = Array("A1", "D1", "C1") 'Celler som används för att utlösa makro
xFunArr = Array("Kodnamn1", "Kodnamn2", "Kodnamn3") 'Motsvarande kodnamn
Om Selection.Count = 1 Då
För xFNum = 0 Till UBound(xRgArr)
Ställ in xRg = ActiveSheet.Range(xRgArr(xFNum))
Om inte skära (Target, xRg) är ingenting då
xStr = xFunArr(xFNum)
Application.Kör xStr
End If
Nästa
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Detta fungerade perfekt och kommer att spara mig en hel del tid - tack för att du delar med dig av din kunskap - mycket uppskattat!
Denna kommentar minimerades av moderatoren på webbplatsen
Jag är glad att jag kunde hjälpa till.
Denna kommentar minimerades av moderatoren på webbplatsen
Bra. Det fungerar bra... Tack...
Denna kommentar minimerades av moderatoren på webbplatsen
Hej.

Jag har det här fungerar bra, men skulle vilja lägga till ett villkor för att köra makrot. Jag vill bara köra makrot om cellen bredvid cellen jag klickar i innehåller ett visst värde.
När jag klickar på cell F6 vill jag att makrot ska köras om cell E6 innehåller "x", men om cell E6 är tom får makrot inte köras.
Hoppas det är meningsfullt.
Tack

här är min originalkod utan villkoret:


Explicit alternativ

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Om Selection.Count = 1 Då
If Not Intersect(Target, Range("F6:F18")) är ingenting då
Ring datePick
End If
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Följande VBA-kod kan hjälpa dig att lösa problemet. Prova gärna och tack för din kommentar.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRg As Range
If Not Intersect(Target, Range("F6:F18")) är ingenting då
Ställ in xRg = ActiveSheet.Cells(Target.Row, Target.Column - 1)
Om (xRg.Value = "") Eller (xRg.Value <> "X") Avsluta Sub
Ring datepick
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Tack men hur är det med sammanslagna celler?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Alber,
Koden fungerar inte för sammanslagna celler.
Denna kommentar minimerades av moderatoren på webbplatsen
jag använder OpenOffice och har högerklickat på arkfliken och valt händelser och sedan valt detta makro från MyMacros.. Men jag får ett felmeddelande på följande rad: Om Selection.Count = 1 Sedan >>> "Basic runtime error, variabel inte definierad...
Denna kommentar minimerades av moderatoren på webbplatsen
Hej James,
Koden fungerar bara för Microsoft Office Excel. Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
Min fullständiga kod i detta makro är:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim val As String
REM val = Range("A2").Värde

Om Selection.Count = 1 Då
Om inte skära (mål, intervall("D24")) är ingenting då
REM Ring MyMacro
val = Range("D24").Värde
Range("B27").Value = val
End If
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Det här ämnet är väldigt intressant och jag är intresserad men vet inte var jag kan hitta, tack och lov skapar du det här ämnet, hoppas alla hjälper mig http://run-3.online
Denna kommentar minimerades av moderatoren på webbplatsen
Excel 2002 (XP): Om en arbetsbok öppnas genom att välja "Arkiv" och trycka på "Skift" inaktiverar det makron i det arket, problemet är att om jag väljer "Verktyg > Makro > Makron..." kan jag köra makrot hur som helst, hur löser man det?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Roger,
Vi har inte testat koden i Excel 2002(XP). Varför inte använda den nyare versionen av Microsoft Office? Det blir lättare för ditt arbete.
Denna kommentar minimerades av moderatoren på webbplatsen
Samma resultat 2010.
Denna kommentar minimerades av moderatoren på webbplatsen
Varför inte bara använda någon nyare version, det blir lättare
https://games.lol/racing/
Denna kommentar minimerades av moderatoren på webbplatsen
Tack, men vad sägs om flera celler för att klicka för att köra flera makron.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,
Prova nedanstående VBA-kod.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim xRgArr som variant
Dim xFunArr som variant
Dim xFNum Som heltal
Dim xStr As String
Dim xRg As Range
xRgArr = Array("A1", "D1", "C1") 'Celler som används för att utlösa makro
xFunArr = Array("Kodnamn1", "Kodnamn2", "Kodnamn3") 'Motsvarande kodnamn
Om Selection.Count = 1 Då
För xFNum = 0 Till UBound(xRgArr)
Ställ in xRg = ActiveSheet.Range(xRgArr(xFNum))
Om inte skära (Target, xRg) är ingenting då
xStr = xFunArr(xFNum)
Application.Kör xStr
End If
Nästa
End If
End Sub
Denna kommentar minimerades av moderatoren på webbplatsen
Tack för den här koden. Är det möjligt att få detta att fungera genom att klicka på en cell som är sammanfogad med andra?
Denna kommentar minimerades av moderatoren på webbplatsen
Hej M. Symonds,
Koden i den här artikeln kan göra dig en tjänst: https://www.extendoffice.com/documents/excel/4354-excel-click-on-cell-to-run-macro.html
Tack för din kommentar.
Denna kommentar minimerades av moderatoren på webbplatsen
hej, jag försökte använda den här koden för att köra ett klistra makro men jag verkar inte förstå hur man klistrar in makrot ordentligt.

här är min original Marco

Sub Paste()
'
' Klistra in makro
'

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


Någon hjälp uppskattas
Denna kommentar minimerades av moderatoren på webbplatsen
Hej, tack för ditt intressanta ämne. Tänk om jag till exempel vill klicka på D4 i Sheet1 och se resultatet av Macro i Sheet2!F3.
Denna kommentar minimerades av moderatoren på webbplatsen
Fungerar inte längre.
Worksheet_SelectionChange finns inte som standard. Det betyder att du inte kan använda det för att utlösa ett makro.

Den enda inbäddade sub du kan använda hänvisas till i rullgardinsmenyn "Arbetsbok", så...

Det enda närmaste du kan göra är att använda Workbook_SheetBeforeDoubleClick. Men det kommer att gå in i redigeringsläge (fortfarande inte en stor sak).
Denna kommentar minimerades av moderatoren på webbplatsen
Hej CodeKiller.Worksheet_SelectionChange finns bara i Sheet(Code)-redigeraren. Högerklicka på arkfliken och klicka på Visa kod för att aktivera Sheet(Code)-redigeraren.
Denna kommentar minimerades av moderatoren på webbplatsen
Det är viktigt att betona att makrot bara körs i kalkylbladet.
Vi som använder den vanliga Visual Basic-editorn slutar ofta med att lagra makron på andra ställen än i det aktuella kalkylbladet.
Ingen av dessa koder kommer att fungera i den situationen.
Jag tycker att den här koden är mycket enklare och den fungerar väldigt bra för mig: 

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Intersect(Range("d1"), Target) är ingenting då
Ring aa
End If
End Sub
Sub aa() ' lägg din kod här
Range("D1"). Välj
Selection.Copy
Range("F1"). Välj
ActiveSheet.PasteEnd Sub
John Wells
jnw.wells@gmail.com
Denna kommentar minimerades av moderatoren på webbplatsen
Hej John Wells, tack för att du delar med dig.
Denna kommentar minimerades av moderatoren på webbplatsen
För de som vill att detta ska fungera för sammanslagna celler är det snabbaste och smutsigaste sättet att uppdatera linje 2 enligt följande:
Alternativ Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Om Selection.Count > 0 Då
Om inte skära (mål, intervall("D4")) är ingenting då
Ring MyMacro
End If
End If
End SubSelection.Count används för att avgöra om ett val har gjorts innan det återstående makrot körs. Om ditt urval består av fyra celler som har slagits samman kommer Selection.Count att vara lika med 4, och den återstående koden kommer aldrig att köras. Du kan också ändra rad 2 till det exakta antalet celler som slogs samman, men det kommer att orsaka problem om du slå samman ytterligare celler.
Denna kommentar minimerades av moderatoren på webbplatsen
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 option explicit altrimente ci viene detto che il riferimento al
arbetsblad non è unnivoco. Mi spiego meglio evidentemente su come ho adattato il codice con il mio esempio;

Explicit alternativ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Om Selection.Count = 1 Då
Om inte skära (Mål, räckvidd("Y64")) är ingenting då
Range("Y65:Y78"). Välj
Range("Y65").Aktivera
Selection.ClearContents
Range("Y65"). Välj
End If
Om inte skära (Mål, intervall("A33")) är ingenting då
Range("A33"). Välj
Selection.Copy
ActiveWindow.WindowState = xlMinimerad
Skicka nycklar "^v"
Skicka nycklar "{BACKSPACE}"
End If
End If
End Sub

Grazie ancora è stata un'autentica meraviglia!

Massimo
Denna kommentar minimerades av moderatoren på webbplatsen
Jag hade inga förväntningar på den titeln, men desto mer förvånad blev jag. Författaren gjorde ett bra jobb. Jag ägnade några minuter åt att läsa och kolla fakta. Allt är väldigt tydligt och förståeligt. Jag gillar inlägg som fyller ut dina kunskapsluckor. Den här är av den sorten.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej,

Ingen encuentro la manera de hacer lo que necesito. Espero de veras que me podáis ayudar.
Necesito que se lance una MACRO al hacer clic en una celda, pero no sé en qué celda va a ser, no lo puedo comparar con (si se ha seleccionado la celda A3, por ejemplo, que se lance la acción) porque por funcionalidades del fichero, las celdas se van a mover de sitio (se han podido insertar, mas o menos filas encima). Necesitaría poder sabre qué celda es la que se ha seleccionado.
Hay alguna manera de poder hacer eso?
Tack så mycket i förväg.
Denna kommentar minimerades av moderatoren på webbplatsen
Hej Hola,
Celladressen är konstant. Allt du kan flytta är cellens värde.
Cellen du angav i VBA-koden är fortfarande cellen som utlöser den angivna VBA-koden.
Det finns inga kommentarer här ännu
Lämna dina kommentarer
Postar som gäst
×
Betygsätt detta inlägg:
0   Tecken
Föreslagna platser

Följ oss

Copyright © 2009 - www.extendoffice.com. | Alla rättigheter förbehållna. Drivs av ExtendOffice. | | Sitemap
Microsoft och Office-logotypen är varumärken eller registrerade varumärken som tillhör Microsoft Corporation i USA och / eller andra länder.
Skyddad av Sectigo SSL