【VBA】アクティブでないシートに対する処理でエラー

盲点でしたw

メモとして残します。


状況

For Eachでワークシートを検索して、特定のワークシートに対してセル書式変換を行う。

Dim k As Integer: k = 1

For Each sh In WorkSheets
If sh.Name = "XXXXX" Then
sh.Range(Columns(1), Columns(1)).NumberFormat = "@"
End If
Next


発生した事象

sh.Range(Columns(1), Columns(1)).NumberFormat = "@"

の箇所でエラー。

image.png


解決方法

処理対象のシートをアクティブにする。

アクティブでないシートに対しての処理はエラーとなってしまうため。

Dim k As Integer: k = 1

For Each sh In WorkSheets
If sh.Name = "XXXXX" Then
sh.Activate '追加
sh.Range(Columns(1), Columns(1)).NumberFormat = "@"
End If
Next