• 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.

VBA code, wijzig letter in hoofdletter werkt niet bij uitvoeren andere code

Status
Niet open voor verdere reacties.

samabert

Gebruiker
Lid geworden
27 mrt 2010
Berichten
308
Hallo,

Volgende code die ik van een forum lid gekregen heb plaatst (X) in cellen onder voorwaarden.
Bij invullen van kleine letters in de cellen worden deze automatisch hoofdletters. Tot zover alles in orde.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range, i As Long, j As Long, cell As Range, rCell As Range, nieuw, oud
    If Intersect(Target, Range("B6:M19").Resize(lEmp)) Is Nothing Then Exit Sub
    With Application
        .EnableEvents = False
        nieuw = Target.Value
        .Undo
        oud = Target.Value
        Set Rng = Cells(6, Target.Column).Resize(lEmp)

        If oud = "X" And nieuw <> 1 And nieuw <> 2 And .Sum(Rng) <> 12 Then Target.Value = oud Else Target.Value = UCase(nieuw)


        If .CountBlank(Rng) + .Min(.CountIf(Rng, 1), 2) + .Min(.CountIf(Rng, 2), 2) <= 5 And .CountBlank(Rng) > 0 Then Rng.SpecialCells(xlCellTypeBlanks).Value = "X"

        .EnableEvents = True

    End With

End Sub


Nu via deze tweede code hef ik tijdelijk de vorige code op zodat de (X) vrij kan gewijzigd worden in voorbeeld "V"
Code:
Private Sub CommandButton1_Click()
    Dim Rng As Range
    With CommandButton1
        If .BackColor = vbGreen Then
            .BackColor = vbRed
            .Caption = "(X)  kan niet gewijzigd worden"


        Else
            .BackColor = vbGreen
            .Caption = "(X)  kan gewijzigd worden"

        End If
    End With
    
    Application.EnableEvents = Not Application.EnableEvents


End Sub

Probleem, nu werkt natuurlijk het wijzigen niet naar hoofletters.

Is er een mogelijkheid om dit aan te passen dat wanneer de tweede code in gebruikt is toch nog naar hoofletters gewijzigd kan worden?

Ik heb geprobeerd om tijdens het terug overschakelen naar "kan niet gewijzigd worden" de wijziging naar hoofdletters uit te voeren, maar zonder succes.
Ik hoop dat mijn vraag duidelijk is.

Alvast bedankt.
Marc
 

Bijlagen

Wat denk je dat onderstaande regel doet...
Code:
Application.EnableEvents = Not Application.EnableEvents
...en wat dan de gevolgen zijn?
 
euh, dat de volledige code uitgeschakeld wordt...?
Is er soms een andere manier om de wijzigen door te voeren?
Als ik na sluiten het werkboek terug open kan je dan instellen dat alle letters hoofdletters worden? Of zie ik het te eenvoudig.

Het kan bij wijzigen ook eenvoudig direct in hoofdletters ingetikt worden, dat is misschien nog het eenvoudigste.

Bedankt voor jouw reactie
 
Pas nadat Excel wordt afgesloten en heropent, of met een aparte aanroep wordt de event pas weer op true gezet.
 
ik weet niet precies wat er precies moet gebeuren, maar veronderstel dat als de commandbutton rood is, dat er dan niets mag gebeuren
Code:
    If Intersect(Target, Range("B6:M19").Resize(lEmp)) Is Nothing Or CommandButton1.BackColor = vbRed Then Exit Sub
 
Geen slecht idee Bart.

Als er een X staat mag het niet veranderd worden.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range, i As Long, j As Long, cell As Range, rCell As Range, nieuw, oud
     If Intersect(Target, Range("B6:M19")) Is Nothing Then Exit Sub
       
    With Application
        .EnableEvents = False
     If CommandButton1.BackColor = vbred Then
        nieuw = Target.Value
          .Undo
        oud = Target.Value
         Set Rng = Cells(6, Target.Column).Resize(lEmp)


        If oud = "X" And nieuw <> 1 And nieuw <> 2 And .Sum(Rng) <> 12 Then Target.Value = oud Else Target.Value = UCase(nieuw)




        If .CountBlank(Rng) + .Min(.CountIf(Rng, 1), 2) + .Min(.CountIf(Rng, 2), 2) <= 5 And .CountBlank(Rng) > 0 Then Rng.SpecialCells(xlCellTypeBlanks).Value = "X"
    Else
     Target = UCase(Target)
    End If
        .EnableEvents = True


    End With


End Sub
 
Laatst bewerkt:
cow18,
Jij ook bedankt voor je reactie, doch dit doet het niet.

De bedoeling is als je de knop op groen "kan gewijzigd worden" zet de cellen met (X) kan wijziging naar een andere letter en in hoofdletters. Het wijzigen werkt, maar niet naar hoofdletters.
Dus mensen vullen voorkeuren in op een verlof blad, bij 5 lege cellen worden deze gemerkt met een (X) en rood gemerkt. Tot hier werkt alles uitstekend. Er mag nu enkel shift 1 of 2 gevraagd worden. Bij een vraag naar een V of R of iets anders moet je de knop gebruiken om de (X) te wijzigen, dit wordt dan uitgevoerd door een verantwoordelijke.

HSV heeft mij daar ook attent op gemaakt dat via "Application.EnableEvents = Not Application.EnableEvents" alles uitgeschakeld wordt en dat het enkel via Excel terug te starten terug werkt.
Ik vermoed dat dit dus anders niet op te vangen is en dat bij een eventuele wijziging via de knop je zelf in hoofdletter moet typen.
 
Je hebt vast de code uit #6 nog niet getest.
 
HSV,

Ik heb dit zojuist getest, of de knop nu op wijzigen of niet wijzigen staat, je kan nu altijd de cellen met (X) wijzigen.
In je eerste post sprak je van "of met een aparte aanroep wordt de event pas weer op true gezet" Hoe zou je dat uitvoeren?
Toch ook op dit late uur bedankt.
 
Deze regel moet er wel uit natuurlijk.
Code:
Application.EnableEvents = Not Application.EnableEvents
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan