VBAでExcelのシート名を参照する際に、CodeNameからシート名を導き出す必要が生じました。

ネットに当ってみたのですが、よい例がなく、自分でプロパティを探して表示させるようにしました。

あまりWebには掲載されていないようなので、メモ替わりに掲載します。

シートの名前を変更
シートの名前を変えておいて、VBEからCodeNameの名前も変えます。
CodeNameを参照

シートの名前であるaaaaaを、Siitoだけを頼りに取得したい場合、ブック内の全シートをループして・・・という方法をすぐに思いつきますが、シート数が多い場合の処理時間が・・・・

そこで下図のようなコードを書くと、aaaaa が取得できます。なぜか、いきなりNameプロパティを呼び出すと Siito を呼び出してしまうのに、Properties(“name”)にすると aaaaa を呼び出せるところが新味です。
コード例

なお、これを導き出したオブジェクトツリーを表示しています。
コード例クリックすると拡大します
ここで赤枠でくくった部分がヒントになると思います。

Excel 2002、2003、2007、2010で動くことを確認しました。

なお、Excel2002以上では、VBProjectプロパティを呼び出す際に設定によっては「実行時エラー ‘1004’:プログラミングによる Visual Basic プロジェクトへのアクセスは信頼性に欠けます」というエラーが出ます。こちらについては、以下のリンクを参考にしてください。
マイクロソフトのサポートページ
上のリンクは今見てみたら切れていました。なので
こちらをご参照下さい。


カテゴリ: Excel.
最終更新日: 3月 25, 2020

4 thoughts on “Excelのシート CodeNameからNameを導き出す

  1. H.Horikoshi

    Webを探しまわってようやくここに辿りつきました。
    この情報は書いてあるところが少ないです。
    参考になりました。
     

    1. 長井祥和 Post author

      Horikoshiさま

      こちらをご覧頂きましてありがとうございます。

      ご参考にして頂けたのであれば幸いです。掲載して以来、弊社の案件では活用例がなく、
      やはりレアケースだったのかな、と思っています。

      これからも他の技術情報に見当たらなさそうな情報がありましたら載せていくように
      しますので、よろしくお願いいたします。

  2. 芝野 健治

    ・.VBComponents(“Sheet1”).・の「Sheet1」は何を表しているのか分からないのですが。画像には「Sheet1」が見つかりません。
    Workbookを作成したときの一番目のWorkSheetだと思うのですが。
    シートのオブジェクト名(?)はCodeNameで参照できたとして「Siito」になるのは分かるのですが「Sheet1」もオブジェクト名で生き残るということですか。CodeNameとNameを変更しても一番最初に作成されたシートのオブジェクト名「Sheet1」は利用できるとして、質問があります。
     マクロファイル以外にExcelファイルを開いて1番目に作成されたシート(CodeNameとNameの変更のあるなしにかかわらず)に処理をしたい場合、「Sheet1」を使って参照する書式を教えていただきたいのですが。vbaが記述されている以外のファイルのシートをオブジェクト名で参照する方法がどうしてもわからず困っています。
    よろしくお願いします。

    1. 長井祥和 Post author

      コメントありがとうございます。

      あとで記事に追記しておきますが、
      ThisWorkbook.VBProject.VBComponents(2).Name
      で取れると思います。

      これでいかがでしょうか。

コメントを残して頂けると嬉しいです