見出し画像

【VBA】 シートをオブジェクト変数へ格納する方法

worksheetをオブジェクト変数へ格納するコードを紹介します。

もちろん正しいコードを掲載しますが、誤ったコードも掲載することでどこが間違っているのかを解説していきます。


正解コード(4パターンを掲載)

Sub 正解コード1()

Dim wb As Workbook

Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")

End Sub




Sub 正解コード2()

Dim ws As Worksheet
Set ws = ThisWorkbook.WorkSheets("Sheet1")

End Sub



Sub 正解コード3()

Dim ws As Worksheet
'別のブックを開いてワークシートを格納
Set ws = Workbooks.Open(ThisWorkbook.Path & "\" & "取り込み.xlsx").Worksheets("Sheet1") '

End Sub



Sub 正解コード4()

Dim wb As Workbook
Dim ws As Worksheet

Set wb= Workbooks.Open (ThisWorkbook.Path & "\" & "取り込み.xlsx")
'Addメソッドでシートを新規追加'
Set ws = wb.Worksheets.Add
'追加シートの名前を指定'
ws.Name = "追加"

End Sub

フォントの色に統一感がなくすいません。
シンタックスハイライトがうまく機能してくれない。。。

それはさておき。
4パターン掲載しました。


つづいて、間違っているコードです。

間違いコード(3パターンを掲載)

Sub 間違いコード1()

Dim ws As Worksheet
'NG部分'
Set ws = ThisWorkbook.WorkSheets("シート1").Activate

End Sub




Sub 間違いコード2()

Dim ws As Worksheet
'NG部分'
Set ws = ThisWorkbook.WorkSheets("シート1").Name

End Sub



Sub 間違いコード3()

Dim ws As Worksheet
'NG部分'
Set ws = ThisWorkbook.WorkSheets("シート1").Select

End Sub


オブジェクト変数とはなにかが理解できていれば、間違ったコードを書いてしまうことは減るはずです。

間違ったコードのNG部分では、ActivateメソッドやNameプロパティ、Selectメソッドが書かれていることで戻り値がWorksheet型になっていないことが原因です。

オブジェクトブラウザでそれぞれを検索してみると、

・Activateメソッド

スクリーンショット 2021-02-13 152906

Subからはじまっています。
=そもそも戻り値がないということです。


・Selectメソッド

スクリーンショット 2021-02-13 153104

Activateメソッドと同じくSubからはじまっています。


・Nameプロパティ

スクリーンショット 2021-02-13 153143

戻り値がStringなので、エラーになったことがわかります。


まとめ

最初のころは、やたらとエラーに出くわします。
そんなときに、使用しているプロパティやメソッドの戻り値がなんであるかをオブジェクトブラウザで確認していくことが大切だと思います。

この記事が気に入ったらサポートをしてみませんか?