21. september 2004 - 11:25Der 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!
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
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
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!
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..........
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 ?
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!
Men godt du stritter imod, selvom jeg lever af det, så har jeg ikke altid ret, ej heller giver det nemmeste løsningsforslag.
Synes godt om
Ny brugerNybegynder
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.