トップ回答者
シート名をセル参照で指定する

質問
-
初めて質問させていただきます。
マクロ経験が少ないので、基本的なことかもしれませんが。
マクロで実行したい動作は以下の通りです。
[他の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
回答
-
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
すべての返信
-
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