詳細を述べると、ワークブックに2つの名前付き範囲があるとします。両方の名前付き範囲は同じ名前(「myName」と言う)がありますが、1つはSheet1にスコープされ、もう1つはブックにスコープされます。名前が重複しているときにExcelワークブックで名前付き範囲を文字列で取得
名前付き範囲の名前(文字列)を指定すると、ブックレベルの名前付き範囲を取得したいと考えています。
ネイティブコール:wb.Names.Item("myName")
を使用すると、名前付き範囲のシートスコープが返されます。
代わりに私が:wb.Names.Item("Sheet1!myName")
を実行すると、明らかにシートスコープの名前範囲が返されます。私はこれを使用してシート固有のものを指定できますが、ワークブックは指定できないことがわかりました。
とにかく私はワークブックスコープ1を指定できますか?
現在、すべての名前のリストに対して反復処理を行い、.Nameプロパティを比較してブックのスコープ名前付き範囲を取得しています。これは、.Nameプロパティが "Sheet1!"シートスコープの名前付き範囲に追加します。しかしこれは非常にコストがかかり、私はそれを避けたい。
私はどのように使用していますか?範囲。範囲オブジェクトを名前文字列に設定しようとすると、 'set rng1 = Range(" myName ")'は* sheet1がアクティブな場合にローカルシート名から範囲を返します*そうでなければブック名から範囲を返します。私はこれが一番きれいな回避策だと思います。つまり、アクティブシートが、ブック名をワークブックスコープとして使用する前にローカル名をホストしているシートと異なることをテストします。理にかなっている? :) – brettdj
でも、parent.nameとブック名を比較できますが、名前をループしてそのコレクションを抽出する必要があります。 – nutsch
re:@ brettdjさんのコメント。あなたが達成しようとしていることに応じて、最も簡単なのは、コードの最後に削除されるマクロの先頭に一時シートを追加するだけです。 – nutsch