Excel 2010 32 ビット モードの VBA マクロ

Excel 2010 32 ビット モードの VBA マクロ

Excel 2010 64 ビットを使用して保存した Excel シートがあります。コードは次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 17 Then
Dim iRet As Integer
    Dim arr As Variant
    If Not IsEmpty(Range("B2").Value2) Then
        Exit Sub
    End If
    'Clear the values in columns
    Range("S:AZ").ClearContents

    arr = Split(Target, ",")
    Range("S15:AZ15").NumberFormat = "@"
    Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
    Range("AZ1").Value2 = Target

    Worksheets("MasterPage").Range("X3:X1000").ClearContents
    Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
    Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
End If

終了サブ

保存したファイルを Excel 2010 32 ビット モードで実行しようとすると、実行されません。理由を誰か教えてください。ありがとうございます

答え1

あなたのコメントは、この特定のイベントが何らかの理由でトリガーされていないか、コードがまったくトリガーされていないことを示唆しています (Excel はデフォルトでコードの実行を防ぐことがあるので、注意してください)

コードが実行されるかどうかを確認してください。ボタンにマクロを接続してコードを明示的に実行し、それが問題であるかどうかを調べることもできます。

答え2

Excel 2010 32 ビットで試してみましたが、問題なく実行されました。

いくつかの質問:

  1. コードのどこかの時点で Application.EnableEvents をオフにしましたか?
  2. 提供されたコードには End Sub がありません。SU にコピーして貼り付ける際に失われたものと思われますが、もう一度確認してください。
  3. worksheet_change イベントで何か実行されますか?

さらに、コードにいくつか変更を加えることで、より効率的に実行できるようになります。現在、プロシージャが別のセルを変更するたびに、プロシージャが再度実行されます。複数回実行されるのを防ぐために、イベント トリガーをオフにして再度オンにする行をいくつか追加しました。

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Row = 1 And Target.Column = 17 Then
        Dim iRet As Integer
        Dim arr As Variant
        If Not IsEmpty(Range("B2").Value2) Then
            Application.EnableEvents = True
            Exit Sub
        End If
        'Clear the values in columns
        Range("S:AZ").ClearContents

        arr = Split(Target, ",")
        Range("S15:AZ15").NumberFormat = "@"
        Range("S15", Cells(15, UBound(arr) + 19)) = WorksheetFunction.Transpose(WorksheetFunction.Transpose(arr))
        Range("AZ1").Value2 = Target

        Worksheets("MasterPage").Range("X3:X1000").ClearContents
        Worksheets("MasterPage").Range("X3:X1000").NumberFormat = "@"
        Worksheets("MasterPage").Range("X3:X" & UBound(arr) + 3) = WorksheetFunction.Transpose(arr)
    End If
    Application.EnableEvents = True
End Sub

関連情報