Print side | Luk vindue

Auto aktivering af makro ved en bestemt celleværdi

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=2641
Udskrevet den: 23.Nov.2024 kl. 15:59


Emne: Auto aktivering af makro ved en bestemt celleværdi
Besked fra: Blackbox
Emne: Auto aktivering af makro ved en bestemt celleværdi
Posteringsdato: 08.Jul.2016 kl. 08:40
Hejsa...

Håber at i kan hjælpe mig.

Hvor kan man få en makro til at aktiver hvis en celleværdi evt er 1 og ikke hvis den er 0 ?

På forhånd tak.



Svar:
Besked fra: zpjj
Posteringsdato: 08.Jul.2016 kl. 13:41
Hej
 
Prøv denne Smile
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Sheets("Sheet1").Range("A1") = 1 Then
    Call macro
End If
End Sub
 
Sub macro()
MsgBox "A1 er lig med 1"
End Sub


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 11.Jul.2016 kl. 07:30
Hej Peter.... Smile

Jeg er desvære meget ny inde for makro´er, så skal lige have lidt mere hjælp Smile.

Når du skriver "Call macro", hvilken makro referer den så til ?
Det jeg skal bruge er at hvis celle A1 = 1, skal den selv aktiver makro1, hvis celle A1 =2, skal den aktiver makro2, osv frem til makro21

Håber du kan hjælpe mig, på forhånd tak.

/Per Smile




Besked fra: zpjj
Posteringsdato: 11.Jul.2016 kl. 08:22
Hej Per
 
Det kan laves lidt mere simpelt, men nedenstående giver lidt mere forståelse for hvad der sker.
Sæt det ind i F.eks. Sheet1
Håber du kan bruge det og giver mening :-)
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Select Case Range("A1").Value
 
          Case 1
              Call macro1 'Kalder macro1
 
          Case 2
              Call macro2 'Kalder macro2
 
          Case 3
              Call macro3 'Kalder macro3
 
          Case 4
              Call macro4 'Kalder OSV......
 
          Case 5
              Call macro5
 
          Case 6
              Call macro6
 
          Case 7
              Call macro7
 
          Case 8
              Call macro8
 
          Case 9
              Call macro9
             
          Case 10
              Call macro10
 
          Case 11
              Call macro11
 
          Case 12
              Call macro12
 
          Case 13
              Call macro13
 
          Case 14
              Call macro14
 
          Case 15
              Call macro15
 
          Case 16
              Call macro16
 
          Case 17
              Call macro17
 
          Case 18
              Call macro18
 
          Case 19
              Call macro19
          
          Case 20
              Call macro20
 
          Case 21
              Call macro21

          Case Else
              Exit Sub
    End Select

End Sub
 
Sub macro1()
MsgBox "A1 er lig med 1" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro2()
MsgBox "A1 er lig med 2" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro3()
MsgBox "A1 er lig med 3" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro4()
MsgBox "A1 er lig med 4" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro5()
MsgBox "A1 er lig med 5" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro6()
MsgBox "A1 er lig med 6" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro7()
MsgBox "A1 er lig med 7" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro8()
MsgBox "A1 er lig med 8" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro9()
MsgBox "A1 er lig med 9" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro10()
MsgBox "A1 er lig med 10" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro11()
MsgBox "A1 er lig med 11" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro12()
MsgBox "A1 er lig med 12" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro13()
MsgBox "A1 er lig med 13" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro14()
MsgBox "A1 er lig med 14" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro15()
MsgBox "A1 er lig med 15" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro16()
MsgBox "A1 er lig med 16" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro17()
MsgBox "A1 er lig med 17" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro18()
MsgBox "A1 er lig med 18" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro19()
MsgBox "A1 er lig med 19" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro20()
MsgBox "A1 er lig med 20" 'Udskift dette med den macro du vil køre.
End Sub
 
Sub macro21()
MsgBox "A1 er lig med 21" 'Udskift dette med den macro du vil køre.
End Sub
 


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: zpjj
Posteringsdato: 11.Jul.2016 kl. 21:20
Hej Per
 
Her er en lidt anden måde at gøre det på. Smile
Håber du kan bruge noget af det Smile
 
Følgende ligges i Sheet1:
 
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim y As Variant
  Dim x As Integer
  Dim macro As String
 
    y = ActiveSheet.Range("A1").Value   'Henter værdi fra A1 som Variant
   
    If Not IsNumeric(y) Then                  'Checker om værdien er et tal
        Exit Sub                                      'Hvis værdien ikke er et tal, gå til slut sub
    End If
   
    x = ActiveSheet.Range("A1").Value   'Henter værdi fra A1 som Integer
    If x < 1 Or x > 21 Then                    'Checker om værdien ligger mellem 1 og 21
        Exit Sub                                       'Hvis værdien ikke ligger mellem 1 og 21, gå til slut sub
    End If
 
    macro = "macro" & x                      'Navngiver macro med det nummer der er valgt F.eks. macro15
    Application.Run (macro)                  'Kører macro15 som ligger i Modul1
End Sub
 
De næste ligges i Modul1:

Sub macro1()
MsgBox "A1 er lig med 1" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro2()
MsgBox "A1 er lig med 2" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro3()
MsgBox "A1 er lig med 3" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro4()
MsgBox "A1 er lig med 4" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro5()
MsgBox "A1 er lig med 5" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro6()
MsgBox "A1 er lig med 6" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro7()
MsgBox "A1 er lig med 7" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro8()
MsgBox "A1 er lig med 8" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro9()
MsgBox "A1 er lig med 9" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro10()
MsgBox "A1 er lig med 10" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro11()
MsgBox "A1 er lig med 11" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro12()
MsgBox "A1 er lig med 12" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro13()
MsgBox "A1 er lig med 13" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro14()
MsgBox "A1 er lig med 14" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro15()
MsgBox "A1 er lig med 15" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro16()
MsgBox "A1 er lig med 16" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro17()
MsgBox "A1 er lig med 17" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro18()
MsgBox "A1 er lig med 18" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro19()
MsgBox "A1 er lig med 19" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro20()
MsgBox "A1 er lig med 20" 'Udskift dette med den macro du vil køre.
End Sub

Sub macro21()
MsgBox "A1 er lig med 21" 'Udskift dette med den macro du vil køre.
End Sub

 

 
 


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: EXCELGAARD
Posteringsdato: 12.Jul.2016 kl. 09:51
Hvis det er nummeret i cellen, der angiver, hvilken makro, der skal køres, må jeg så ikke foreslå en lidt mere simpel Event Smile
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.Run "Macro_" & Range("A1").Value
End Sub
...og, så benytte 'Datavalidering' i selve regnearket til at sørge for, at værdien i A1 ikke går ud over de mulige afgræsninger.




-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: zpjj
Posteringsdato: 12.Jul.2016 kl. 10:10
Hej EXELGAARD
 
Det har du helt ret i, man lærer hele tiden noget nyt herinde.
Det er derfor at dette forum er så kanon godt :-)
Med det første forslag, ville jeg bare gøre det meget simpelt, så han kunne se hvad der sker.


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: EXCELGAARD
Posteringsdato: 12.Jul.2016 kl. 10:47
Jo,jo, Zpjj,

Du havde jo hele grund ideen rigtigt, med at benytte 'Application.Run' i stedet for 'Call'. Thumbs Up

Og, alle skal da vide, at jeg er stor tilhænger af VBA, men når man nu lettere, hurtigere og mere sikkert, kan lave det i selve regnearket, så er man da et skarn, hvis man ikke gør det Smile


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: zpjj
Posteringsdato: 12.Jul.2016 kl. 11:10
Jeg kan kun give dig ret Smile
Så det som en lille udfordring, "Maybe we can use it in another afsnit" Big smile


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: EXCELGAARD
Posteringsdato: 28.Jul.2016 kl. 13:56
Et forslag:
uploads/732/BlackBox.XLSm" rel="nofollow - uploads/732/BlackBox.XLSm




-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: zpjj
Posteringsdato: 28.Jul.2016 kl. 14:31
Wink Her er lige en /topic662.html - upload på tideligere kode.
/uploads/856/BlackBox1.xlsm" rel="nofollow">uploads/856/BlackBox1.xlsm


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 29.Jul.2016 kl. 08:57
Hejsa....

Jeg kan bare ikke få det til at virke.... CryCryCry.

Når jeg i macro skriver den macro den skal trække så udføre den godt nok opgaven, men melder også fejl i "Application.Run "macro"

Jeg forstår det bare ikke... eller måske indsætter jeg den macro son den skal trække forkert... HJÆLP.

Mvh.

Per


Besked fra: Blackbox
Posteringsdato: 29.Jul.2016 kl. 08:58
Hejsa....

Jeg kan bare ikke få det til at virke.... CryCryCry.

Når jeg i macro skriver den macro den skal trække så udføre den godt nok opgaven, men melder også fejl i "Application.Run "macro"

Jeg forstår det bare ikke... eller måske indsætter jeg den macro son den skal trække forkert... HJÆLP.

Mvh.

Per


Besked fra: EXCELGAARD
Posteringsdato: 29.Jul.2016 kl. 09:00
Hva' skriver du helt præcist?

Jeg tror, du har misforstået, hvad der skal skrives i Application.Run...

Det eksempel, jeg har uploadet virker, så, hvad ændrer du???


-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Blackbox
Posteringsdato: 29.Jul.2016 kl. 12:40
Hejsa...

Ja, det ark du har sendt virker fint.... men når jeg vil have den til at virke med de macro´er jeg har lavet, så kan jeg desværre ikke få det til at virke.... CryCryCry.

Jeg har 21 macro´er som i princippet gør det samme, altså kopier nogle celler. Men de celler som der skal kopieres er forskellige fra hvilke værdi der står i A1. 

Det skal forstås således at, hvis A1 = 1 skal den trække macro1 (som kopier nogle celler over i et andet ark). Hvis A1 = 2 skal den trække macro2 (som kopier nogle andre celler over i et andet ark). Det samme igen hvis A1 =3 osv..... helt frem til 21.

Jeg har højest snarsynlig misforstået noget da macro ikke er min stærke side, men dammmm hvor ville jeg gerne lære at bruge det SmileTongueEmbarrassed 


Besked fra: zpjj
Posteringsdato: 29.Jul.2016 kl. 15:00
Hej BlackBox
Jeg tror du skal vedhæfte dit ark, så vi har noget at arbejde med :-)
 


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 31.Jul.2016 kl. 08:43
Hejsa...

 

Sender det gerne.... Smile.

 

Det du har sendt virker super, men hvordan får jeg den til at trække en macro frem for at der kommer en tekstbox frem ?. Hvis jeg fjerner den linie i macro1 hvor der står (MsgBox "A1 er lig med 1" 'Udskift dette med den macro du vil køre.) og i stedet for tilføjer

Range("D1").Select

    Selection.Copy

    Range("J1").Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

    Application.CutCopyMode = False

    ActiveWorkbook.Save

    Range("A1").Select

 

Så kopier den godt nok celle D1 til J1 men den køre i loop og efter kort tid kommer der denne fejl  

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

  Dim y As Variant

  Dim x As Integer

  Dim macro As String

      y = ActiveSheet.Range("A1").Value   'Henter værdi fra A1 som Variant

        If Not IsNumeric(y) Then                  'Checker om værdien er et tal

        Exit Sub                                      'Hvis værdien ikke er et tal, gå til slut sub

    End If

    x = ActiveSheet.Range("A1").Value   'Henter værdi fra A1 som Integer

    If x < 1 Or x > 21 Then                    'Checker om værdien ligger mellem 1 og 21

        Exit Sub                                       'Hvis værdien ikke ligger mellem 1 og 21, gå til slut sub

    End If

    macro = "macro" & x                      'Navngiver macro med det nummer der er valgt F.eks. macro15

    Application.Run (macro)                  'Kører macro15 som ligger i Modul1= (Denne linje bliver gul)

 

End Sub


Håber dette giver lidt mening.... WinkWinkWink.

Mvh. den meget fortvivlet...





Besked fra: Blackbox
Posteringsdato: 31.Jul.2016 kl. 13:20
Hejsa igen.

Her er den fil du var så venlig at sende mig. Hvis der skrives 1, 2 eller  3 i "A1" træker den godt nok de macro´er som er tilknyttet dertil, men den går i fejl, kan du evt se hvorfor ?

Mvh.

Per

SmileSmileSmileSmileSmileSmileSmileSmileSmileSmile


uploads/1734/BlackBox1_1.xlsm" rel="nofollow - uploads/1734/BlackBox1_1.xlsm


Besked fra: zpjj
Posteringsdato: 31.Jul.2016 kl. 16:52
Hej BlackBox
 
Den kigger på ændringer i hele arket og derfor vil den blive ved med at køre.
 
Jeg har lagt en begrænsning ind, så den kun reagerer på ændring i celle A1.
 
Prøv at se om det virker Smile
 
/uploads/856/BlackBox1_2.xlsm" rel="nofollow">uploads/856/BlackBox1_2.xlsm


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 02.Aug.2016 kl. 14:50
Hejsa... TongueTongueTongueTongueTongueTongueTongueTongueTongueTongueTongueTongueTongueTongue

Det virker bare super.... Taaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaak.

Nu mangler jeg blot det sidste og så virker mit excelark som det skal, så håber også du kan hjælpe mig der ligeså.

Det er således at cellen "A1" er reelt set en beregnings celle, hvor den henter en værdi i "A10" og hvis værdien i "A1" mellem 1 og 3, så skulle den gerne selv aktiver den macro som værdien i "A1" referer til.

Håber virkelige du kan hjælpe mig.

uploads/1734/BlackBox1_2_1.xlsm" rel="nofollow - uploads/1734/BlackBox1_2_1.xlsm

/Per Smile


Besked fra: zpjj
Posteringsdato: 02.Aug.2016 kl. 15:42
Hej Per
 
Som jeg ser det, aktiverer den også den macro A1 refererer til, når du skriver noget i A10.
Jeg lavde en simpel formel i A1 "=A10*1" også her kaldte den, den pågældende macro.
 
Hvis jeg forstår dig ret, så har du en formel i A1, hvor værdien fra A10 bruges ?
Ret mig, hvis der er noget jeg har misforstået.
 
 


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 02.Aug.2016 kl. 17:43
Hej Peter.

Det er korrekt at "A1" hedder "=A10". Hvis jeg så skriver 1 i "A10" så kommer der også til at stå 1 i "A1". Men "A1" starter ikke "macro1" som jeg gerne ville have den til.... Hvad gør jeg forkert og har prøvet at med "=A10*1", der sker stadig intet.... desværre.

Er meget taknemlig for den hjælp jeg allerede har fået af dig.... Tongue, håber du har en ide til den sidste del.

Mvh.

Per Hansen


Besked fra: zpjj
Posteringsdato: 02.Aug.2016 kl. 19:40
Hej Per
 
Nu kan jeg se hvad du mener :-)
 
Du skal bare ændre 1 til 10 (markeret med rødt)
 
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim y As Variant
  Dim x As Integer
  Dim macro As String
 
  If Target.Address = "$A$10" Then       ' Kigger kun på ændringer i celle A10
    y = ActiveSheet.Range("A1").Value   'Henter værdi fra A1 som Variant
   
    If Not IsNumeric(y) Then                  'Checker om værdien er et tal
        Exit Sub                                      'Hvis værdien ikke er et tal, gå til slut sub
    End If
   
    x = ActiveSheet.Range("A1").Value   'Henter værdi fra A1 som Integer
    If x < 1 Or x > 3 Then                    'Checker om værdien ligger mellem 1 og 21
        Exit Sub                                       'Hvis værdien ikke ligger mellem 1 og 21, gå til slut sub
    End If
 
    macro = "macro" & x                      'Navngiver macro med det nummer der er valgt F.eks. macro15
    Application.Run (macro)                  'Kører macro15 som ligger i Modul1
End If
End Sub


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 03.Aug.2016 kl. 09:45
Hej Peter.

Jeps, det godt se at det virker sgu Smile... men tænkte på om man også kan ligge den som en marco, således at jeg blot kan bruge "Appolaction.run" for at starte hele processen, men ved ikke om man kan det.

/Per


Besked fra: zpjj
Posteringsdato: 03.Aug.2016 kl. 10:11
Hej Per
 
Godt det virkede :-)
 
Det andet ved jeg ikke lige, men ser lige på det når jeg får tid en dag :-)


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 03.Aug.2016 kl. 13:22
Hej Peter.

Har selv fundet løsning på det sidste spørgsmål... men tusind tak for din hjælp, den har været guld værd...

TAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk

/Per


Besked fra: zpjj
Posteringsdato: 03.Aug.2016 kl. 14:00
Det var så lidt Per, glad for at jeg kunne hjælpe.
Hvis jeg må være så fræk at spørge, hvad gjorde du med det sidste ? :-)


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: Blackbox
Posteringsdato: 04.Aug.2016 kl. 07:39
Jeg lavede blot en macro der kunne kopier "A10" til "A1", derved aktiver "A1" sig selv Smile

Men ved du evt. hvordan man laver en macro der køre på tid. Det skal forstås sådan at den selv trækker en macro evt. for hver 15 min ?

/Per


Besked fra: zpjj
Posteringsdato: 04.Aug.2016 kl. 09:01
Hej Per
 
Prøv at se på nettet, hvor der findes mange gode hints.
 
eks. denne:
http://stackoverflow.com/questions/2319683/vba-macro-on-timer-style-to-run-code-every-set-number-of-seconds-i-e-120-secon" rel="nofollow - http://stackoverflow.com/questions/2319683/vba-macro-on-timer-style-to-run-code-every-set-number-of-seconds-i-e-120-secon
 
 


-------------
Med venlig hilsen
Peter Juul

Jeg bruger EXCEL 2010


Besked fra: EXCELGAARD
Posteringsdato: 04.Aug.2016 kl. 09:07

   http://msdn.microsoft.com/en-us/library/office/ff196165.aspx?f=255&MSPPError=-2147217396" rel="nofollow - Application.OnTime 



-------------
Husk, at trykke på [Tak], hvis du kan lide et indlæg.
Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.


Besked fra: Blackbox
Posteringsdato: 10.Aug.2016 kl. 18:52
Hejsa..... Smile

Vil bare lige fortælle at jeg har fået timer til at funger..... igen tusind tak for jeres hjælp.

/Per


Besked fra: Blackbox
Posteringsdato: 10.Aug.2016 kl. 18:55
Men tænker, hvordan låser man tid (Kl.:) i en celle. Det skal forstås således at at hvis der i "A1" er formlen =NU() - (celleformat til kl) men når der skrives noget i en celle ændres tiden jo heletiden, hvordan undgår man at tiden ændres... ?

/Per



Print side | Luk vindue