1

別のセルが変更されたときにセルをリセットするコードを作成しようとしています。ドロップダウンセルは3つあり、各セルはその前のセルに依存しています(B3はB2に依存し、B4はB3とB2に依存しています)。

したがって、誰かがB4を設定してからB2を変更すると、無効な組み合わせになります。したがって、上のセル値が変更されると、下のセルがデフォルト値に強制されます(B1が値2のときにB4が値3にしかできない場合、B1が値1に変更されると、B4は値1に強制されます)

私が現在使用しているコードは次のとおりです。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("B2")) Is Nothing Then
    If Sheet("Talent Sheet").Range("B2") = Human Then
        Sheet("Talent Sheet").Range("B3") = Warrior
        Sheet("Talent Sheet").Range("B4") = "Human Noble"
    Else
        If Sheet("Talent Sheet").Range("B2") = Elf Then
            Sheet("Talent Sheet").Range("B3") = Warrior
            Sheet("Talent Sheet").Range("B4") = "City Elf"
        Else
            If Sheet("Talent Sheet").Range("B2") = Dwarf Then
                Sheet("Talent Sheet").Range("B3") = Warrior
                Sheet("Talent Sheet").Range("B4") = "Dwarf Commoner"
            End If
        End If
    End If

これにより、B2が変更されると、B3とB4がデフォルトに強制されますが、「サブまたは関数が定義されていません」というコンパイルエラーが発生します。

何が原因なのか正直わかりません。M $ヘルプは、サブプロシージャのスペルが間違っているためだと言っていますが、このコードの一部をコピーして、多くのソースと照合しました。

4

2 に答える 2

9

Sheetの代わりに使用していSheetsます。

エディターを使用Sheetすると、呼び出された新しい関数を探していると考えられ、Sheetどこにも定義されていないため (VBA で定義された関数ではないため)、そのエラーが発生します。

さらに、どこかで定義されていない限り、"around human、などを使用する可能性があります。Dwarf

最後に、各モジュールの先頭で を使用することを強くお勧めします。これにより、この種の多くのエラー (テキストが にないOption Explicitなど) を防ぐことができます。Human Dwarf"

于 2012-10-02T15:13:37.797 に答える
2

エンダーランドがカバーしたもの以外の 3 つのこと。

  1. シート名は必要ありません。コードが現在のシートで実行されることが理解されています

  2. Worksheet_Changeイベントを扱っているときはいつでも。セルにデータを書き込む場合は、常にイベントをオフに切り替えます。これは、コードが無限ループに陥らないようにするために必要です。

  3. イベントをオフにするときはいつでもエラー処理を使用してください。そうしないと、エラーが発生した場合にコードが次回実行されなくなります。

ここに例があります

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Application.EnableEvents = False

    '
    '~~> Rest of the code
    '

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2012-10-02T20:47:08.967 に答える