【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メソッド
Subからはじまっています。
=そもそも戻り値がないということです。
・Selectメソッド
Activateメソッドと同じくSubからはじまっています。
・Nameプロパティ
戻り値がStringなので、エラーになったことがわかります。
まとめ
最初のころは、やたらとエラーに出くわします。
そんなときに、使用しているプロパティやメソッドの戻り値がなんであるかをオブジェクトブラウザで確認していくことが大切だと思います。
この記事が気に入ったらサポートをしてみませんか?