none
シート名をセル参照で指定する RRS feed

  • 質問

  • 初めて質問させていただきます。
    マクロ経験が少ないので、基本的なことかもしれませんが。

    マクロで実行したい動作は以下の通りです。
    [他のBookを開き、そのBookにあるシート名をセル参照で取得し、目的のシートを表示させる]

    マクロを記録するワークシートのA1セルにBook名(文字列)、A2セルにシート名(文字列)が
    入力されています。A1セルを参照してBookを開き、A2セルを参照してシートを表示させたいのですが、
    Bookを開くまではできても、シート名を指定するところでエラーとなります。

    具体的な記述としては、

    Dim sheetName As String
    sheetName = Cells(2, 1)
    Sheets(sheetName).Select ←ここでエラーが発生"インデックスが有効範囲にありません"

    という単純なものです。
    Bookは、パスとFileName(Cells(1, 1)を指定)で開けたので、
    同じようにシート名もセル参照できると思ったのですが、そんな単純ではないのでしょうか?

    知識が足りなくてお恥ずかしいのですが、ご教授願います。

    WindowsXP
    Excel2003

    • 種類を変更済み とんこ 2010年7月7日 10:52
    2010年7月6日 14:12

回答


  • Dim sheetName As String
    sheetName = Cells(2, 1)
    Sheets(sheetName).Select ←ここでエラーが発生"インデックスが有効範囲にありません"

    WoorkbooksのOpen後にはActiveはオープンしたBookになります。ですのでSheetsオブジェクトも開いた先のBookの情報をさします。同様にCellsも開いた先を示すようになります。
    操作のためには、いったん自分自身をどこかに保存して、操作元オブジェクトと操作先オブジェクトがはっきり分かるようにしてください。

    テストした例を以下に記載します

    Sub ボタン2_Click()
    Dim objMySheet As Worksheet
    Dim objBookOpen As Workbook
    Set objMySheet = ActiveSheet '次のオープンでアクティブが変わるため保存
    Set objBookOpen = Workbooks.Open(ActiveSheet.Cells(1, 1))
    Dim sheetName As String
    sheetName = objMySheet.Cells(1, 2)
    objBookOpen.Worksheets(sheetName).Select
    Set objBookOpen = Nothing
    Set objMySheet = Nothing
    End Sub
    

     

    • 回答としてマーク とんこ 2010年7月7日 10:49
    • 回答としてマーク 山本春海 2010年7月8日 4:19
    2010年7月6日 17:11

すべての返信


  • Dim sheetName As String
    sheetName = Cells(2, 1)
    Sheets(sheetName).Select ←ここでエラーが発生"インデックスが有効範囲にありません"

    WoorkbooksのOpen後にはActiveはオープンしたBookになります。ですのでSheetsオブジェクトも開いた先のBookの情報をさします。同様にCellsも開いた先を示すようになります。
    操作のためには、いったん自分自身をどこかに保存して、操作元オブジェクトと操作先オブジェクトがはっきり分かるようにしてください。

    テストした例を以下に記載します

    Sub ボタン2_Click()
    Dim objMySheet As Worksheet
    Dim objBookOpen As Workbook
    Set objMySheet = ActiveSheet '次のオープンでアクティブが変わるため保存
    Set objBookOpen = Workbooks.Open(ActiveSheet.Cells(1, 1))
    Dim sheetName As String
    sheetName = objMySheet.Cells(1, 2)
    objBookOpen.Worksheets(sheetName).Select
    Set objBookOpen = Nothing
    Set objMySheet = Nothing
    End Sub
    

     

    • 回答としてマーク とんこ 2010年7月7日 10:49
    • 回答としてマーク 山本春海 2010年7月8日 4:19
    2010年7月6日 17:11
  • Chukiさん

    お返事が遅くなり、申し訳ありません。
    ご回答ありがとうございました。

    >WoorkbooksのOpen後にはActiveはオープンしたBookになります。
    >ですのでSheetsオブジェクトも開いた先のBookの情報をさします。
    >同様にCellsも開いた先を示すようになります。

    まさにその通りですね!
    Chukiさんの言うとおり、操作元オブジェクトと操作先オブジェクトを明確にして
    設定したところ、目的のシートを開くことができました。

    どうもありがとうございました。
    もっと勉強したいと思います。
    2010年7月7日 10:49