Excel: UCase middels VBA

Status
Niet open voor verdere reacties.

Figaro75

Gebruiker
Lid geworden
12 dec 2011
Berichten
91
In een planning gebruik ik VBA om de uitlijning en de lettergrootte aan te passen van een waarde die ik invul.
Nu dacht ik 'simpel' ook meteen in te stellen dat hij altijd een hoofdletter toont (binnen het benoemde bereik).

Ik heb de regel .Value = UCase(.Value) toegevoegd maar dat vindt Excel niet leuk....
Hij maakt van de invoer wel een hoofdletter waarna ik direct een foutmelding krijg.

Nu is VBA niet echt mijn ding en probeer ik op basis van voorbeelden voor elkaar te krijgen wat ik wil, maar hier loop ik weer vast.

Kan iemand naar de onderstaande code kijken en mij helpen hoe ik de waarde naar een hoofdletter zet.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim InRange As Range

Set InRange = Application.Intersect(ActiveCell, Range("Planning"))

If Not InRange Is Nothing Then
    With Target
    On Error Resume Next
    Select Case .Value
        Case "1" To "2"
            .Font.Size = 1
            .HorizontalAlignment = xlRight
            .VerticalAlignment = xlTop
         Case Else
            .Font.Size = 10
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
'            .Value = UCase(.Value)
        End Select
     End With
End If
End Sub
 
Bij een wijziging van de cel treedt het _Change event weer in werking en herhaalt de code zich tot de stack vol is.
Controleer ook of je met maar 1 cel te maken hebt. Tevens is die Set opdracht overbodig.
Doe het eens zo:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 And Not Intersect(Target, Range("Planning")) Is Nothing Then
        Application.EnableEvents = False
        With Target
            Select Case .Value
                Case "1" To "2"
                    .Font.Size = 1
                    .HorizontalAlignment = xlRight
                    .VerticalAlignment = xlTop
                 Case Else
                    .Font.Size = 10
                    .HorizontalAlignment = xlCenter
                    .VerticalAlignment = xlCenter
                    .Value = UCase(.Value)
            End Select
        End With
        Application.EnableEvents = True
    End If
End Sub
 
Laatst bewerkt:
@edmoor
Dit werkt perfect, idd er niet aan gedacht dat elke wijziging ook weer een wijziging triggert.
Bedankt voor je moeite.....
 
Kan ook:

Case 1, 2
 
Zo kan het ook. Al wordt IIF niet echt aangeraden.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count = 1 And Not Intersect(Target, Range("Planning")) Is Nothing Then
    Application.EnableEvents = False
    With Target
      t = .Value = 1 Or .Value = 2
        .Font.Size = IIf(t, 1, 10)
        .HorizontalAlignment = IIf(t, xlRight, xlCenter)
        .VerticalAlignment = IIf(t, xlTop, xlCenter)
        .Value = IIf(t, UCase(.Value), .Value)
      End With
    Application.EnableEvents = True
  End If
End Sub
 
Niks mis met Iif, maar het concept van de booleans in de verschillende secties is vaak erg lastig voor de gemiddelde vraagsteller.
Maar je hebt dat netjes in elkaar gestoken :)
 
@iedereen,

Bedankt voor het meedenken en het aanreiken van oplossingen.
Ik heb nu de oplossing van @edmoor met de aanpassing van @HSV toegepast en dit werkt prima.

Misschien kan Microsoft Excel gewoon zo aanpassen dat je met voorwaardelijke opmaak ook de lettergrootte etc. kan aanpassen :)
Zou een stuk simpeler zijn.....
 
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count = 1 And Not Intersect(Target, Range("Planning")) Is Nothing Then
    Application.EnableEvents = False

    With Target
      .Font.Size = 10 - 9 * ((.Value = 1) + (.Value = 2))
      .HorizontalAlignment = -4108 + 44 * (.Font.Size = 1)
      .VerticalAlignment = -4108 + 52 * (.Font.Size = 1)
      .Value = UCase(.Value)
    End With

    Application.EnableEvents = True
  End If
End Sub
 
Laatst bewerkt:
@snb
Een nog kortere code.....:)
Ik hou het vooralsnog even bij de eerste oplossing want die is voor mij het makkelijkst te volgen.
Wel mooi om te zien hoe iedereen tot een oplossing komt met verschillende programmeringen.
 
Misschien kan Microsoft Excel gewoon zo aanpassen dat je met voorwaardelijke opmaak ook de lettergrootte etc. kan aanpassen

Wat MS gedaan heeft, heb je blijkbaar nog niet ontdekt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan