プロが教える店舗&オフィスのセキュリティ対策術

マクロ処理の中で、「シート名を検索して表示させる」という工程があります。
その部分だけ抜粋すると以下の感じです
------------
For Each myWS In Worksheets
Sheets(myWS.Name).Select
If InStr(myWS.Name, 検索値) > 0 Then
myFlag = True
Exit For
End If
Next
------------
左から順にシート名を取得して、それが検索値と一致したら変数 myFlagをTrueにするという処理ですが、
目的のシートよりも左のシートが非表示になっていると、
2行目の「Sheets(myWS.Name).Select」の所でエラーになってしまいます。
恐らく、非表示シートをSelectできないからでは?と思ってます。
シートが非表示になっていたら無視するにはどうしたら良いでしょうか?
他の方法でも良いのですが、シンプルな方が良いと思ってます。

A 回答 (2件)

こんにちは。



非表示の場合は、処理をしないでしょうか?

For Each myWS In Worksheets
IF myWS.Visible = True Then
If InStr(myWS.Name, 検索値) > 0 Then
myWS.Select
myFlag = True
Exit For
End If
End If
Next
    • good
    • 0

こんにちは



シートの表示/非表示は .Visible プロパティを参照すれば判断できますので、それで分岐すればよいですが・・・

目的ではないシートを順にいちいち表示することには意味がないと思いますので、見つかった時に表示するように処理順を変えた方がよさそうに思います。
また、非表示シートをSelectしようとするとエラーになるので、条件分岐が必要になりますが、Activateメソッドを用いれば、エラーにならないのでそちらの方が面倒が少ないかと思います。
(非表示の場合は、直近のシートがアクティブになります)

・・・ということで、以下ではいかがでしょうか?

For Each myWS In Worksheets
If InStr(myWS.Name, 検索値) > 0 Then
myFlag = True
Worksheets(myWS.Name).Activate
Exit For
End If
Next
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A