如何在UserForm TextBox上强制执行Change()时保持光标位置?

r.o*_*ook 4 excel controls vba userform uppercase

假设我在EXCEL VBA UserForm中有以下代码:

Private Sub TextBox_Change()

TextBox.Value = UCase(TextBox.Value)

OtherText.Value = "FOO " & TextBox.value & " BAR"

End Sub
Run Code Online (Sandbox Code Playgroud)

它强制文本框始终为大写,并且当用户从末尾键入时效果很好.

然而,我说我得到了一个文本"HELLO WORLD",我想在其间插入 "CRUEL "(由用户手动输入),一旦我输入C,光标将跳转到后面D,最终结果将成为"HELLO CWORLDRUEL "(如果我盲目输入).

如果我有大写锁定,光标位置不会改变,但它会破坏代码的目的......并且使用小写字符它总是将光标踢到最后.

有没有办法保持这些类型的强制案例更改的光标位置?

我曾考虑使用_Exit()方法,但我确实希望每次更改都保持值OtherTextTextBox值大写.否则OtherText将全部为大写,而TextBox_Exit()执行之前仍然是小写,它看起来......不合需要.

Bri*_*ord 6

尝试使用其他事件,例如:

Private Sub TextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   If KeyAscii >= 97 And KeyAscii <= 122 Then 'a-z
      KeyAscii = Asc(UCase(Chr(KeyAscii)))
   End If
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的方法.因为你有ascii,`Asc(UCase(Chr(KeyAscii)))`可以替换为`KeyAscii - 32` (2认同)