Avatar billede gider_ikke_mere Nybegynder
21. september 2004 - 11:25 Der er 7 kommentarer og
1 løsning

Worksheet Change - kun køre makro ved userinput

I et ark kører jeg nogle makroer med (eksempel):

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Name.Name = ("A1") Then

<something>

End Sub

Nogle andre makroer skal bl. a. slette eller ændre værdien i A1. Men da må Worksheet ikke køre <something> eller der skal en ekstra option i Worksheet.Change a la:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Name.Name = ("A1") And Worksheet.Onkey = True Then

<something>

End Sub

Jeg vil helst have koden ændret i Worksheet_Change da det er lidt nemmere at overskue og koden kun skal ændres et sted!
21. september 2004 - 11:30 #1
Jeg er ikke sikker på hvad du mener.... men måske mener du, at du gerne vil have en IF-sætning, som forhindre <something> i at køre, hvis indholdet i A1 slettes. Hvis det er tilfældet, så kan det gøres således:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("a1")) Is Nothing Then
        If Not Range("A1") = "" Then
            MsgBox "Celle A1 indeholder en værdi!!"
        End If
    End If
End Sub
Avatar billede gider_ikke_mere Nybegynder
21. september 2004 - 12:09 #2
Hvis jeg sletter eller ændrer værdien i A1, startes en makro som skriver "hej" i A2.
Trykker jeg på en knap som starter en anden makro der skal slette værdierne i cellerne ("A1:P1") bliver A1 ændret. I det tilfælde må "hej"-makroen ikke køres
21. september 2004 - 12:22 #3
OKAY - så er jeg med.
I den makro du kører skal du have følgende linier omkring din kode, som ændrer A1:

Application.EnableEvents = False
    ' A1 bliver ændret
Application.EnableEvents = True
Avatar billede gider_ikke_mere Nybegynder
21. september 2004 - 12:31 #4
Jeg har en del makroer som skal slette eller rette celler forskellige steder, og som kommer forbi A1 og ændrer denne.
Ved næsten alle disse makroer bruger jeg Application.EnableEvents, dvs. at jeg skal ind i alle disse makroer og sætte Application.EnableEvents = False efter jeg har passeret A1. Det virker ikke holdbart.
Som jeg skriver i mit indlæg er dette kun et eksempel. Eksemplet A1 er mange steder i arket.
Det er derfor jeg gerne vil fange om det er brugeren eller en makro der ændrer en celle!
21. september 2004 - 22:06 #5
Du kan ikke fange om cellen bliver ændret via makro eller indtastning. Mit svar er rigtigt, om du kan lide det eller ej - men du skal bruge Application.EnableEvents som beskrevet..........
Avatar billede bak Forsker
21. september 2004 - 22:15 #6
Min opfattelse er at det forholder sig som flemming beskriver, men hvorfor ikke bare indsætte Application.EnableEvents = false i toppen af dine makroer og true i bunden ?
Er der andre evnts der s k a l køres samtidig med at du sletter/ændrer ?
Avatar billede gider_ikke_mere Nybegynder
22. september 2004 - 10:36 #7
Jeg har leget lidt med det og må erkende at flemmingdahl har ret. Det fungerer tilsyneladende ok, og skulle der være et par steder hvor en anden event skal køre må jeg midlertidig sætte Application.EnableEvents til true!
Tak for hjælpen!
22. september 2004 - 12:34 #8
Men godt du stritter imod, selvom jeg lever af det, så har jeg ikke altid ret, ej heller giver det nemmeste løsningsforslag.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester