< návrat zpět

MS Excel


Téma: Podmíněné makra rss

Zaslal/a 28.11.2015 16:46

Merlin99Zdravím bojuju s jednim problemem podmineneho makra..
kdyz si vytvorim jednotlivy makra a nasledne chci mennit jednu bunku stim ze podle teto hodnoty se dany makro zavola.. mam problem ze se mi to zacykluje... potreboval bych aby se to zavolalo jen jednou.. kdyby nekdo neaky napad 6 viz priloha

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("K2").Value = 1 Then
Call Makro1


ElseIf Range("K2").Value = 2 Then
Call Makro2

ElseIf Range("K2").Value = 3 Then
Call Makro3

ElseIf Range("K2").Value = 4 Then
Call Makro4


ElseIf Range("K2").Value = 5 Then
Call Makro5


End If

End Sub

Příloha: rar28379_podminene-makro-postup.rar (15kB, staženo 31x)
Zaslat odpověď >

#028380
Opičák
Cykluje to proto, protože Worksheet Change volá makra při každé změně na listu. Je třeba tuto událost po dobu vykonávání makra zakázat a to příkazem Application.EnableEvents= False.
Pak zase povolit (True). Vaše makra jsem nezkoumal a nepochopil, ale to není důležité. Nějaké řešení v příloze.

ty Goto ex je možné vyhodit.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Select Case Range("K2")
Case 1: Call Makro1
Case 2: Call Makro2
Case 3: Call Makro3
Case 4: Call Makro4
Case 5: Call Makro5
End Select

Application.EnableEvents = True
End Sub
Příloha: zip28380_kopie-podminene-makro-postup.zip (23kB, staženo 33x)
citovat
#028383
Merlin99
Mazec funguje ELEGANTNÍ díky moc 9citovat
#028384
Merlin99
Jen mě napadlo nebylo by možný aby se kazdy makro spustilo jen jednou i kdyz kliknu jinam do bunky tak se zpusti zase to same slo by to bez toho? díky moccitovat
#028387
Opičák
Udělal bych to bez události listu.
Příloha: zip28387_kopie-podminene-makro-postup_2.zip (28kB, staženo 31x)
citovat
#028390
Merlin99
Opičák DíKY - jen jestli by bylo možný ty čísla brát z listu jako na začátku, páč ty čísla chci napojit na další výpočty ze sešitu a nato už nemám mozek...citovat
#028391
avatar

Merlin99 napsal/a:

Jen mě napadlo nebylo by možný aby se kazdy makro spustilo jen jednou i kdyz kliknu jinam do bunky tak se zpusti zase to same slo by to bez toho? díky moc


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("K2")) Is Nothing Then
Application.EnableEvents = False
Select Case Range("K2")
Case 1: Call Makro1: GoTo ex
Case 2: Call Makro2: GoTo ex
Case 3: Call Makro3: GoTo ex
Case 4: Call Makro4: GoTo ex
Case 5: Call Makro5: GoTo ex
End Select
ex:
Application.EnableEvents = True
End If
End Subcitovat
#028392
avatar
V těch událostních procedurách je trochu zmatek. Přidání návěští ex: nezmění na jejím chodu vůbec nic, protože každý Case stejně skončí za End Select. Důležitý je ale test, který odfiltruje změny jinde, než v K2. To je asi jádro pudla. A pokud makra mění obsah listu, je užitečné dočasné vypnutí událostí, jak ho Opičák navrhl už poprvé.citovat
#028395
avatar
@Vovka
Makro som zobral z prílohy od Opičáka. Samozrejme že GoTo ex je zbytočné. Iba som tam vložil dva riadky. Nemám potrebu sa v tom ďalej špárať.citovat
#028407
Merlin99
marjankaj 9 díky, funguje díky všemcitovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje