假设我的EXCEL VBA用户表单中包含以下代码:
Private Sub TextBox_Change()
TextBox.Value = UCase(TextBox.Value)
OtherText.Value = "FOO " & TextBox.value & " BAR"
End Sub
它强制文本框始终为大写,并且当用户从头开始键入时,效果很好。
但是我输入"HELLO WORLD"
并想在两者之间(用户手动输入)插入 "CRUEL "
, }},光标将跳到C
之后,最终结果将变成D
(如果我盲目键入)。
如果我锁定了大写,光标的位置不会改变,但是这违背了代码的目的...并且使用小写字符,它总是将光标踢到末尾。
是否可以为这些强制更改的情况保持光标位置?
我曾经考虑使用"HELLO CWORLDRUEL "
方法,但是我确实希望每次更改时都将_Exit()
和OtherText
的值都保持大写。否则,TextBox
将全部为大写,而在执行OtherText
之前,TextBox
仍为小写,这看起来...是不可取的。
答案 0 :(得分: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
答案 1 :(得分:3)
您可以使用SelStart
捕获光标位置,然后在处理完文本后重设光标。
Option Explicit
Private Sub TextBox1_Change()
Dim cursorPos As Long
cursorPos = Me.TextBox1.SelStart
Me.TextBox1.Text = UCase(Me.TextBox1.Text)
Me.TextBox1.SelStart = cursorPos
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = True
Me.Hide
End Sub