-2

Excel の特定の範囲のセルに、特定の語句を自動的に大文字にするように強制しようとしています。

例: 通常、Saab、Citation などの航空機のタイプを入力します。Proper Case を強制する VB スクリプトがありますが、DA20、CJ3 などの省略形を使用する場合もあります。

私が望むのは(これが可能であれば)長い名前(使用されている場合)が適切なケースのままであることですが、特定のフレーズを入力する場合は、スクリプトを無視して、入力されたものとして許可するか、最初の2つを自動大文字にすることです文字。

ダイヤモンドまたは DA20 が許容されます

引用または CJ3 は許容されます

私が望んでいないのは、タイプするのが面倒な人です

引用またはcj3

ダイヤモンドまたはda20

これは可能ですか?必要に応じて、許可されるすべての略語の種類のホワイトリストを喜んで作成します。

ある種の「IF」ステートメントが VBA スクリプトで機能することを期待していましたが、これを記述する方法がわかりません。

4

1 に答える 1

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
于 2013-09-03T11:58:40.383 に答える