0

私は自分のプロジェクトを完成させようとしていますが、現在、押されたときに数値の値が追加され、別のボタンがその値を減算するフォーム コントロールがあります。

別の値には、同じものに対して 2 つの異なるボタンがありますが、値は最初の値にも依存し、ボタンだけでその値を変更するものではありません。検証のためにこのコードを実装してみました

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("F19")) Is Nothing Then
 If Range("E19") = 2 And Range("F19") < 12 Then
  Range("E20") = 1
 End If
End If
End Sub

しかし、変更がボタンによって引き起こされた場合、セル F19 が変更されたことを Excel は明らかに認識せず、ユーザー入力によってのみ変更されました。つまり、F19 が更新され、19 が 2 で F19 が 12 未満の場合 (E12 が 2 であるという前提条件は、F19 が 12 以上であることです)、E20 を 1 に設定します (E20 は E19 の修飾子であり、それに入る他の修飾子)。このメソッドは、ボタンで制御されていない他の値で機能しますが、フォームコントロールボタンが値を変更したとき (または少なくともフォームコントロールが押されたときを監視する) をどのように認識できますか?

編集:セルが数式によって変更された場合、マクロは実際には機能しません。特定のセルの変化を監視するために Worksheet_Calculate を使用できるとは思いません。

4

2 に答える 2

1

とにかくコードでこれを行うのはなぜですか?セル E20 に次のような式を持たせることができます。=IF(AND(E19=2,F19<12),1,"")これは、条件が満たされない限り、セルを空白にします。

本当にコードで実行したい場合は、これを考慮する必要があります: Worksheet_Change イベントは、「ワークシートのセルがユーザーまたは外部リンクによって変更されたときに発生します。」

代わりに私はお勧めします

If Range("E19") = 2 And Range("F19") < 12 Then
    Range("E20") = 1
End If

Worksheet_Change イベントで、Worksheet_Change から呼び出す別のサブとして追加します。ボタンのアクションを実行した後、ボタンのコードからサブルーチンを呼び出すこともできます。そうすれば、チェックが実行されることが保証され、イベントに依存しようとしなくなります。

于 2012-10-05T23:09:20.683 に答える
0

ダニエルは部分的に正しい、Worksheet_Change「ワークシートのセルがユーザーまたは外部リンクによって変更されたときに発生します。」ただし、これにはVBA による変更が含まれ、数式による変更は含まれません。

あなたの問題は、範囲の部分的な修飾のみによって引き起こされる(または少なくとも悪化する)可能性があります。

Range("E19")アクティブなシートの「E19」を参照します。これは、シートがオンである場合とそうでない場合がありますTarget。あなたはそれを正しく理解しましたTarget.Worksheet.Range("F19")

.試してください ( 'sに注意してください)

With Target.Worksheet
    If Not Intersect(Target, .Range("F19")) Is Nothing Then
        If .Range("E19") = 2 And .Range("F19") < 12 Then
            .Range("E20") = 1
        End If
    End If
End With

ところで。あなたのソリューション全体が少しずれているように見えるという点で、私はダニエルと一緒ですが、全体像を把握していない可能性があります...

于 2012-10-06T03:59:24.880 に答える