0

次のようなVBAコードを含むExcelシートがあります

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 5 Then
        Dim iRet As Integer
        If Not IsEmpty(Range("AZ1").Value) Then
            iRet = MsgBox("You have already selectd a Size Template", _
                          vbOKOnly, "Select Size Template")
            Exit Sub
        End If

        Dim arr As Variant
        arr = Split(Target, ",")
        Range("R14:AZ14").ClearContents
        Range("R14:AZ14").NumberFormat = "@"
        Range("R14", Cells(14, UBound(arr) + 18)) = WorksheetFunction.Transpose( _
                                        WorksheetFunction.Transpose(arr))
        Range("AZ1").Value2 = Target
    End If
End Sub

Excel ファイルを .xlsm (マクロ有効化された Excel ファイル) として保存し、別のファイルで開きました。このコードは私のマシンでは問題なく動作します。しかし、他のマシンではありません。マルコを有効にして、VBA オブジェクト モデルへの信頼アクセスを許可しました。誰でもここで問題を解決できますか。Excelのバージョンも両方のマシンで同じです ここに画像の説明を入力

4

1 に答える 1

2

正しい提案だった私のコメントを少し詳しく説明したいと思います。

まず、繰り返します。この方法でイベントをオンにする必要があります。

Application.EnableEvents = true

VBA/IDE エディタのイミディエイト ウィンドウで一度実行できます。それだけだったことがわかりました。

第 2 に、他のサブルーチン (または、奇妙ですがイベント) を使用してイベントをオンにすることにした場合は、イベントをオフにする必要がある他のサブルーチン、関数、またはアドインが存在する可能性があることに注意してください。イベントが機能しない理由がわからない限り、マクロがイベントを必要としなくなった直後は、イベントを機能させないでおく必要があります。したがって、ファイルを閉じるたびにイベントをオフにすることをお勧めします。したがって、このイベントを次の場所に追加できますThisWorkbook module:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.EnableEvents = False
End Sub

余分なヒント。最良のオプションは、最初にイベントのステータスを読み取り、ファイルを閉じるまでこの情報を保持することです。次の手順で実行できます。

A)ファイルでパブリック変数を宣言します

Public boEventsStatus as Boolean

B)ファイルを開くときにステータスを読み取る(このコード行をどこに置くかを理解する必要があります)

boEventsStatus = Application.EnableEvents

C)最初に説明したようにイベントをオンにします

D)このBeforeCloseイベントを使用します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.EnableEvents = boEventsStatus
End Sub
于 2013-10-07T10:49:10.807 に答える