1

この問題を解決するためにいくつかのVBAコードを作成しました:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   If Target.Value <> Empty Then
      Target.Value = UCase(Target.Value)
   End If
End Sub

しかし、フィールドにデータを入力しようとすると、Excelはエラーメッセージを1つも表示せずに動作を停止します。

この問題がどこから来るのか誰かが知っていますか?

4

2 に答える 2

1

おそらく、Application.EnableEvents=Falseを設定しています。VBAエディタでイミディエイトウィンドウを開き、入力してapplication.EnableEvents = TrueからEnterキーを押してオンに戻します。

また、シートの変更とイベントの再トリガーのサイクルを引き起こしたくない場合は、イベントを無効にする必要があります。ISEMPTY関数はVBAでわずかに異なり、コードを次のように更新できます。これにより、1つ以上のセルの変更も処理されます。

Option Explicit

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim cell As Variant

        Application.EnableEvents = False
            For Each cell In Target
                If Not IsEmpty(cell.Value) Then
                   cell.Value = UCase(cell.Value)
                End If
           Next cell
        Application.EnableEvents = True
    End Sub

または、この実行を1セルの変更のみに制限する場合は、foreachループを次のように置き換えます。If Target.rows.count = 1 AND Target.columns.count = 1....

于 2012-10-04T09:31:34.897 に答える
0

適切な場所にコールバック関数がない可能性があります。

VBAのイベントとイベント手順から

シート(ワークシートとチャートシートの両方)レベルのイベントの場合、イベントプロシージャコードは、そのシートに関連付けられたシートモジュールに配置する必要があります。ワークブックレベルのイベントは、ThisWorkbookコードモジュールに配置する必要があります。イベントプロシージャが適切なモジュールにない場合、VBAはそれを見つけることができず、イベントコードは実行されません。

于 2012-10-04T09:10:00.230 に答える