自动大写Excel范围中的前两个字符

时间:2013-09-02 15:17:51

标签: excel vba logic

我正在尝试强制Excel中的特定范围的单元格自动将特定短语大写。

例如:我们通常输入萨博,引文等飞机的类型。我有一个VB脚本来强制正确的案例,但还有其他一些我们缩写,如DA20,CJ3等。

我想要的(如果这是可能的话)是长名称(如果使用的话)保持正确的情况但是如果他们键入特定的短语,我希望它忽略该脚本并允许它输入OR或auto capital前两个字符。

  

Diamond或DA20是可以接受的

     

引用或CJ3是可以接受的

我不想要的是懒惰输入

的人
  

citation或cj3

     

diamond或da20

这可能吗?如果有必要,我愿意创建一个包含所有缩写的白名单。

我希望某种“IF”语句可以在VBA脚本上运行,但我不确定如何写这个。

1 个答案:

答案 0 :(得分:0)

您可以使用Worksheet Change事件触发某些范围的自动更新。这要求用户部分输入所需的输入(他们需要退出单元格才能触发)并自动填充剩余部分。例如:

Public boolChanging As Boolean

Private Sub Worksheet_Change(ByVal rng As Range)
    Dim strAutoFinish As String, iStartPos As Integer

    'Exit unless updates occur when and where you want
    If boolChanging Or rng.Row < 1 Or rng.Column <> 1 Or rng.Columns.Count > 1 Or rng.Rows.Count > 1 Then Exit Sub
    If rng = "" Then Exit Sub 'This needs to be here in case multiple cells are editted

    boolChanging = True
    strAutoFinish = ";DA20;Diamond;CJ3;Citation;..."
    iStartPos = InStr(UCase(strAutoFinish), ";" & UCase(rng))

    If iStartPos > 0 Then
        rng = Mid(strAutoFinish, iStartPos + 1, InStr(iStartPos + 1, strAutoFinish, ";") - iStartPos - 1)
    Else 'Leave this part if you want it to delete invalid entries
        rng = ""
    End If

    boolChanging = False
End Sub