5

VBA で動的な名前範囲を参照するのに苦労しています。
私の範囲は次のように定義されています

    =OFFSET(Sheet!$B$2,0,0,COUNTA(Sheet!$B:$B)-1,1)

私のコードは、ある範囲で別の範囲のすべてのエントリを検索する必要があります。これは、欠落しているエントリが追加されることを意図しています。これまでのところ、

    サブ UpdateSummary()
    薄暗いセル範囲
    Dim rngF As Range
    rngF = なしに設定

    ' データ範囲内の各セルをステップ実行
    For Each Cell In Worksheets("Aspect").Range("A_Date")
        ' 現在のセル値の集計範囲を検索
        Set rngF = Worksheets("Summary").Range("Sum_Date").Find(Cell.Value) // 機能しません
        rngF が何もない場合
            ' サマリーに日付を追加
        終了条件
        rngF = なしに設定
    次のセル
    サブ終了

For ループは正常に動作しているようです。ただし、.Find メソッドを使用すると、エラー メッセージが表示されます。

    アプリケーション定義またはオブジェクト定義のエラー

名前付き範囲を特定の範囲 ($B$2:$B$5000) に置き換えると機能するので、名前付き範囲がどのように渡されるかにかかっているようです。
どんなアイデアでも大歓迎です。

ありがとう。

4

4 に答える 4

5

このエラーは、Excel が Summary という名前のワークシートの範囲を参照する名前付き範囲 Sum_Date を見つけることができないため、ほぼ間違いありません。最も一般的な原因は以下のものです。

  1. Sum_Date は、Summary 以外のシートを参照しています。Sum_Date の RefersTo プロパティをチェックし、スペルミスがないことを確認します。
  2. 名前付き範囲 Sum_Date はありません。つまり、VBA コードでスペルが間違っています。Name Manager で名前付き範囲のスペルを確認します。
  3. Sum_Date の RefersTo 式に誤りがあります。これが事実ではないことをすでに確認しているようです。
于 2012-08-08T17:53:41.660 に答える
0

これは非常に古いスレッドであることは知っていますが、今日同じ問題が発生し、かなり長い間解決策を探していました. だから多分これは誰かを助けるでしょう。

=OFFSET(...) 式で定義された名前付きの「範囲」は、実際には名前付きの FORMULA であるため、VBA では範囲を取得するために最初に評価する必要があります。例えば:

Set rgNamedRange = Worksheets("Summary").Evaluate("Sum_Date")

私を正しい軌道に乗せてくれた mrexcel.com の「shg」という名前の人に感謝します。:)

于 2021-03-18T19:59:28.577 に答える
-2

私はこれを数日間実験しており、最終的に次のことを思いつきました。それは最も効率的ではないかもしれませんが、私にとってはうまくいきました!

The named range of "OhDear" was set up in the normal way

Dim vItem As Variant
Set vItem = Names("OhDear")
Debug.Print vItem.Name

試してみる価値はあると思いませんか! バリアントを使用する代わりに、Dim Nm as Name: Set Nm = Names("OhDear") のようなものを使用する場合、これは機能しません。「Nm」を使用したバリエーションはすべて失敗しました!!!

于 2014-01-25T16:39:51.887 に答える