• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Een Macro automatisch Starten

Status
Niet open voor verdere reacties.
Hey!

Op het moment dat er "In Bestelling" staat en er komt nieuwe Voorraad binnen word de Cel in E5 verhoogt. E5 stuurt B5 aan waardoor B5 en C5 (die samenkomen in F5) hoger worden dan 10. F5 is dus hoger dan tien.
Op het moment dat dat gebeurd en "In Bestelling" verdwijnt (door de IF functie) blijft de Excel sheet loopen; constant vult hij in D5 de IF (met bestellen) functie in. En is de sheet dus onhandelbaar.
Hij moet gewoon dat één keertje doen.


Groetjes,
Fons
 
De E kolom is de enige variabele die ingevoerd kan worden. Daarmee manipuleer je B5 (die heeft een formule =E5)
 
Het punt is dat er gekeken wordt of er Bestellen staat en indien dat het geval is, wordt de formule aangepast.
Vervolgens kijkt de macro in de F-kolom of er een waarde kleiner dan 10 staat. In dat geval moet er een andere formule geplaatst worden. De uitkomst van die formule is .... Bestellen, dus begint het weer van voren af aan.
Volgens mij kunnen we het oplossen door een voorwaarde aan de 1e IF toe te voegen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Static Opnieuw As Boolean
Dim rBereik As Range
    If Opnieuw = False Then
        Opnieuw = True
        For Each rBereik In ActiveSheet.Range("D5:D7")
            If rBereik.Value = "Bestellen" And rBereik.Offset(0, 2).Value > 10 Then
'                CDO_Send_Selection_Or_Range_Body
                ActiveSheet.Range("D" & rBereik.Row).FormulaR1C1 = "=IF((RC[-2]+RC[-1])<10,""In Bestelling"","""")"
            End If
        Next
        For Each rBereik In ActiveSheet.Range("F5:F7")
            If rBereik.Value < 10 And rBereik.Offset(0, -2).Value = "In Bestelling" And rBereik > "" Then
                ActiveSheet.Range("D" & rBereik.Row).FormulaR1C1 = "=IF((RC[-2]+RC[-1])<10,""Bestellen"","""")"
            End If
        Next
    Else
        Opnieuw = False
    End If
End Sub


Met vriendelijke groet,


Roncancio
 
Nee het punt is niet dat er Bestellen staat.
Bestellen komt er als de voorraad onder een bepaald niveau valt.
Als de Makro klaar is met Bestellen (dus een mail gestuurd)
moet Bestellen veranderd worden in 'In Bestelling'
zodat diegene die de sheet lezen snappen dat er al contact is gemaakt met Inkoop.

Op het punt dat de Voorraad weer boven het bepaalde niveau komt (door inslag; de bestelling is binnengekomen) moet 'In bestelling' ten eerste weg
en ten tweede moet de sheet weer ingesteld zijn op het feit dat:
er weer 'Bestellen' komt te staan als de voorraad onder het bepaalde niveau komt (en dus weer een mail stuurt)

Nu doet de Sheet niets als er 'Bestellen' komt te staan. (want E5 komt op 1 te staan, waardoor B5 op 1 komt te staan waardoor F5 (B5+C5) ook 1 wordt. (C5 is 0 voor het gemak) Waardoor de voorwaarde > 10 niet gehaald wordt.
 
Het enige wat ik echt nodig heb is een "Stop op de Loop."
Is er geen functie die gewoon ervoor zorgt dat mijn VBA IF maar echt een keertje zijn werk doet, en niet constant kijkt. Dus alleen als het cijfer van laag naar Boven de de 10 komt dat hij dan heel even ingrijpt en dan rust.
Daar hang ik op. De rest werkt.
 
Het enige wat ik echt nodig heb is een "Stop op de Loop."
Is er geen functie die gewoon ervoor zorgt dat mijn VBA IF maar echt een keertje zijn werk doet, en niet constant kijkt. Dus alleen als het cijfer van laag naar Boven de de 10 komt dat hij dan heel even ingrijpt en dan rust.
Daar hang ik op. De rest werkt.

Er bestaat een commando genaamd: Application.EnableEvents
Door deze op False te zetten wordt de WorkSheet_Change tijdelijk niet meer aangeroepen.
Aan het eind van de code zet je het weer op True om WorkSheet_Change weer aan te kunnen roepen.
Bij mij werkt het goed want de code wordt maar 1 keer doorlopen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
        For Each rBereik In ActiveSheet.Range("D5:D7")
            If rBereik.Value = "Bestellen" Then
                CDO_Send_Selection_Or_Range_Body
                ActiveSheet.Range("D" & rBereik.Row).FormulaR1C1 = "=IF((RC[-2]+RC[-1])<10,""In Bestelling"","""")"
            End If
        Next
        For Each rBereik In ActiveSheet.Range("F5:F7")
            If rBereik.Value < 10 And rBereik > "" Then
                ActiveSheet.Range("D" & rBereik.Row).FormulaR1C1 = "=IF((RC[-2]+RC[-1])<10,""Bestellen"","""")"
            End If
        Next
    Application.EnableEvents = True
End Sub

Met vriendelijke groet,


Roncancio
 
Misschien is de oplossing om gewoon geen formules in de cel teztten en vba te laten kijken of aan iff voorwaarde wordt voldaan en dan "in bestelling" als tekst neer te zetten.
Dan krijg je dezelfde situatie voor de gebruiker of VBA.
Als je dan de macro laat kijken of er "in bestelling"staat dan laat je dan de uitvoering stoppen.

mvg leo
 
Misschien is de oplossing om gewoon geen formules in de cel teztten en vba te laten kijken of aan iff voorwaarde wordt voldaan en dan "in bestelling" als tekst neer te zetten.
Dan krijg je dezelfde situatie voor de gebruiker of VBA.
Als je dan de macro laat kijken of er "in bestelling"staat dan laat je dan de uitvoering stoppen.

mvg leo

Ja, dat zou goed zijn. Maar ik heb geen idee hoe je dat zou moeten programmeren. Ik ben er niet zo goed in.

En Bovendien Het werkt!
Maar het werkt echt maar één keer. Voor de robuustheid is dat niet echt heel best. Ik weet dat ik misschien wat veel van mijn excel sheet vraag; maar is er misschien een lichtere 'kill loop' dan deze enorme 'Application.EnableEvents = False' ?

Verder heb ik nog een puntje. Op een andere sheet (havanna) wordt er een getal ingevoerd die er voorzorgt dat op 'HavannaMail' een getal veranderd; en dus er voor zorgt dat er 'Bestellen' komt. Maar als je niet op de 'HavannaMail' iets veranderd (het is de bedoeling dat er niemand ooit op HavannaMail iets veranderd) dan gaat de VBA functie die achter een 'Activesheet' zit niet aan!
Is er een functie die na iedere wijziging in de Havanna sheet de HavannaMail VBA aanzet?

Bijvoorbeeld dat op het moment dat er iemand op de Havanna sheet gewerkt heeft en er mee klaar is dat er een soort IF staat:
IF Havanna = Unactive
Then Start Macro HavannaMail

ofzo?


Groetjes
 
Laatst bewerkt:
Wat is precies je bezwaar om enableevents op false te zetten.
Het kan ongewenste loops goed onder controle houden.

Wat betreft de havannamail, kijk daarvoor eens naar het deactivate event, die in werking wordt gezet op het moment dat de gebruiker naar een ander blad gaat.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan