TetxBox_Change UCase probleem

Status
Niet open voor verdere reacties.

Lemmod

Gebruiker
Lid geworden
4 jan 2008
Berichten
27
Hallo allemaal

Sinds enige tijd ben ik bezig met VBA en nu loop ik tegen een probleem aan waar ik niet uit kan komen. Ik heb de volgende code:
Code:
Private Sub AlarmTextBox_Change()
    If AlarmTextBox = "" Then
        AlarmOn.value = False
    Else
        AlarmOn.value = True
    End If
    AlarmTextBox.value = UCase(AlarmTextBox.value)
End Sub
Nu is het zo dat als er een alarmtext in staat "ALARM POORT OPEN" en ik wil die wijzigen in "ALARM POORT STAAT OPEN" dan krijg ik de volgende situatie:
"ALARM POORT OPENSTAAT" als ik meteen doortik. Oftwel na het indrukken van de spatie springt de cursor naar het einde van de text. Druk ik echter de shiftknop in dan gaat het wel goed.
Mijn vermoeden, wat waarschijnlijk wel klopt, is dat het komt doordat zonder het gebruik van de shiftknop er voor elke letter opnieuw de AlarmTextBox_Change wordt aangeroepen en dus wordt de cursor automatisch achteraan gezet. Hoe kan ik dat voorkomen? Oftewel in welke hoek moet ik het zoeken als ik het zo wil krijgen dat ik gewoon door kan tikken zonder de shiftknop te gebruiken?

Alvast bedankt voor jullie hulp :)
 
Je was .Text achter AlarmTextBox vergeten.

Code:
Private Sub AlarmTextBox_Change()
  AlarmOn.value = AlarmTextBox.Text<>""
  application.enableevents=false
  AlarmTextBox.Text = UCase(AlarmTextBox.Text)
  application.enableevents=true
End Sub
 
Hallo snb

Ik heb je code getest en helaas die doet exact hetzelfde als mijn eigen code bij mij. Ik ben er inmiddels al wel achter dat als ik de capslock aanzet dat het ook werkt zoals ik wil.

Ik denk dat ik maar eens ga opzoeken hoe ik die kan simuleren
 
En opgelost

:thumb:Uiteindelijk na lang zoeken en prutsen gevonden wat ik zocht. Het heeft me wel een halve dag gekost maar het werkt zoals ik wil :)

Voor die liefhebbers zal ik mijn oplossing hier ook even neerzetten :thumb:

Code:
Private Sub AlarmTextBox_Change()
Dim selstart As Variant
    selstart = AlarmTextBox.selstart
    AlarmOn.value = AlarmTextBox.Text <> ""
    AlarmTextBox.value = UCase(AlarmTextBox.value)
    AlarmTextBox.selstart = selstart
End Sub
 
Dan denk ik dat dit ook lukt:

Code:
Private Sub AlarmTextBox_Change()
  with AlarmTextBox
    AlarmOn.value = .Text <> ""
    .value = UCase(.value)
    .selstart = 0
  End with
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan