多分 Sheet3
なんていうオブジェクトはないです。
Workbookオブジェクトにぶら下がっているSheetオブジェクトの一覧の中には
オブジェクトに付けた名前(文字列)としてSheet3
というのはあると思います。
それを踏まえて公式リファレンスを見ると、どのサンプルが使えるのかが見えてくると思います。
Workbook オブジェクト (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook
質問に対しては↑だけで解決します。↓こっちはおまけ。使いこなしたい場合に見ると良いかと。
Sheets オブジェクト (Excel)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets
追記分1
コード付きで回答来ちゃったので出しちゃいますが
book1、book2がどちらも開いている状態ならこれでOKです。
vba
1Workbooks("book2のファイル名").Worksheets("book2のシート名").Activate
しかし、もしbook2が開いていない状態ならこうなります。
vba
1Workbooks.Open("book2のファイル名").Worksheets("book2のシート名").Activate
追記分2
※コメントやり取りの整合性を保つため、以前の記載は残しておきます。
失礼しました。要件が頭に入っていませんでした。
その要件ですと、基本的に jinojiさんのやり方に収束していくと思います。
私の回答によりかえって混乱させてしまい申し訳ありませんでした。
ウォッチ式でオブジェクトを確認してみましたが、CodeName
以外に使えそうなプロパティは見つかりませんでした。
Workbooks配下
WorkSheets配下
おまけ: あらかじめシートオブジェクトを確保して、使う時に簡単に呼び出せるようにした場合
予めDictionaryを使って、Key=CodeName、Value=WorkSheetオブジェクトを格納しています。
自分で書いておきながら関数を書くコストがより高くなってしまう上に
シート名が変わった時はマクロのブックを開きなおす必要があったりとかなり微妙orz
標準モジュールのコード
vba
1Attribute VB_Name = "Module1"
2Dim dic As Object
3
4Sub Auto_Open()
5 Set dic = CreateObject("Scripting.Dictionary")
6 For Each ws In Workbooks("book2.xlsx").Worksheets
7 dic.Add ws.CodeName, ws
8 Next
9End Sub
10
11Sub SheetObjectActivate()
12 dic("Sheet1").Activate
13End Sub
Sheet1のコード
vba
1' ボタンのクリックイベントハンドラ
2Private Sub CommandButton1_Click()
3 Call SheetObjectActivate
4End Sub
長文失礼しました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/29 12:28