1

現在、データを自動フィルタリングするマクロがあります。セルが変更されたときに自動的に実行することができません。セルの値が変わるたびにマクロを実行したい。どんな種類の助けにも感謝するでしょう。コードを配置するワークシートに問題があるのではないかと思います。

私のコードは次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed. In this case, 
    ' Cell B2 will be changed when a value is selected on
    ' another worksheet.
    Set KeyCells = Range("B1:B2")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
       Is Nothing Then

    ' Perform advanced filter on data
    ' Place your code here.
     Range("B4:H976").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("SalesByLocation!Criteria"), Unique:=False

End If
End Sub
4

3 に答える 3

0

SOへようこそ!

変更を適用するワークシートモジュールにコードを配置する必要があります。つまり、どのモジュールにも配置しませんが、プロジェクトのSheetXをダブルクリックします(Xはシートの番号です)。

コードを見ると、おそらく挿入する必要があります

Application.EnableEvents = False

節の後、IFそして

Application.EnableEvents = True

End If。そうしないと、イベントコードがイベントを再度トリガーし、実際のスタックオーバーフローが発生する可能性があります。

于 2013-03-11T19:44:37.217 に答える
0

私にとってはうまくいきます。

イミディエイトウィンドウを開いて(Ctrl + G)、次のように入力して、Enterキーを押します。

 Application.EnableEvents = True

コードが機能するかどうかを確認しますか?
これにより、アプリケーションが発生するイベントを確実にリッスンします。

テストとして、私は以下を使用しましたが、メッセージボックスは正常に表示されます。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim KeyCells As Range
    Set KeyCells = Range("B1:B2")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then

            ' Perform advanced filter on data
            ' Place your code here.
            MsgBox "Hello Event"

    End If

End Sub

B1:B2の値はどのように変更されますか?-セル内にある数式を介して?または、ユーザーはセルに移動して値を変更し、Enterキーを押しますか?... 2番目のオプションは、実装されているものです。


編集

worksheet_calculateイベントを探索する必要があると思います

他のSO記事への参照


さらに編集

の値をフィードしているコンボボックスの変更イベントのイベントプロシージャを作成する方がよい場合がありますB1:B2。この閉じた質問は、他の質問へのリンクがかなりあるため、実際には良い出発点です。

コンボボックスイベントに関する他の記事への参照

于 2013-03-11T21:57:02.227 に答える
0

問題を解決しました!結局、コードをさまざまな形式に分割してから、高度なフィルターマクロを呼び出すことになりました。前のコードに少し問題があったと思います。このようなものに変更しました。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("C4")) Is Nothing Then
        Exit Sub
    Else
        Call Sheet4.AFilter
    End If
End Sub
于 2013-03-13T11:25:55.157 に答える