2

現在、テーブルの列の文字が自動的に大文字に変換されるシート変更に基づいたマクロを作成しようとしています。たとえば、セルに「abcde-12345-678」と入力すると、自動的に「ABCDE-12345-678」に修正されます。掘り下げた後、一部の人には有効なコードを見つけましたが、自分のニーズに合わせて微調整するのに苦労しています。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("E:E")) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target = UCase(Target)
    Application.EnableEvents = True
End Sub

申し上げたいことは 2 つあります。1 つ目は、このコードが現在機能していないことです。作成者によると、正しい場所にあります(Sheet1オブジェクトにあります)。なぜこれが機能しないのかについてのアイデアはありますか?

2 つ目は、範囲ではなくテーブルの列を参照するようにコードを変更したいということです。たとえば、上記のコードの 2 行目を次のように変更してみました (テーブルの名前は ReviewTracker で、関心のある列は製品番号です)。

If Intersect(Target, Range(ReviewTracker[[@Headers],[Product Number]])) Is Nothing Then Exit Sub

これにより、コンパイル エラー「Expected: list separator or )」が返されました。したがって、明らかに何か問題がありますが、私が達成しようとしていることを説明するのに役立つことを願っています.

この問題についてご協力いただきありがとうございます。

-ショーン

4

2 に答える 2

5

初め。多くの理由により、イベントを無効にすることができます。イベントが次のように実行できることを確認しましょう。

VBA エディタに移動 >> イミディエイト ウィンドウを開く >> そこに書き込み: Application.EnableEvents = true>> Enter キーを押します

2番。交差点が適切な列に一致するかどうかを確認するにListObject tableは、次のようなものが必要です。

If Intersect(Target, Range("ReviewTracker[Product Number]")) is Nothing Then

ReviewTrackerそれがテーブル名であり、Product Numberテーブル列であると仮定します。#Headersヘッダー行のみを参照するため、必要ありません。

于 2013-10-21T14:38:24.570 に答える
3

UCase指定された文字列のすべての文字を大文字に変換するため、任意の Range.Value に適用できます。Worksheet_Changeセルの値が変更されるたびに呼び出されるため、コードを配置するのに適した場所です。しかし、テーブルを参照するために使用している方法は間違っています。要件に合わせて投稿したコード:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Sheet1.ListObjects("Table1").ListColumns(1).Range) Is Nothing Then Exit Sub
    Target.Value = UCase(Target.Value)
End Sub

in の最初の列に入力された文字列を大文字に変換しTable1ますSheet1。Sheet1 オブジェクト ファイル (VBA プロジェクト エクスプローラー:フォルダー内)Sheet1 (Sheet1)に配置する必要があります。Microsoft Excel Objectそれを実際の条件に適応させるのは簡単です。

于 2013-10-21T14:38:19.990 に答える