Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
シート非表示
投稿日時: 20/01/02 20:45:07
投稿者: アベッチ

Sheet1シート以外を完全非表示にしたいのですが、True/FalseはうまくいくもののxlVeryHiddenが上手く動作しません。
標準モジュールに下記の記述を行っていますが、Call AllSheets(True)またはCall AllSheets(False)
とした場合はTorFにTrueとFalseを渡せていますが、Call AllSheets(xlVeryHidden)
とした場合はTorFはTrueとして引数を取得してしまっています。
どなたかアドバイスを頂けませんでしょうか。
 
Sub aa()
    Call AllSheets(xlVeryHidden)
End Sub
--------------------------------------
Sub AllSheets(TorF As Boolean)
 
For Each sh In Worksheets
    If sh.Name = "Sheet1" Then
    Else
        sh.Visible = TorF
    End If
Next
End Sub

回答
投稿日時: 20/01/02 22:29:33
投稿者: 半平太

>Call AllSheets(xlVeryHidden) とした場合は
>TorFはTrueとして引数を取得してしまっています。
 
xlVeryHiddenは2なんですから、Trueと混同されます。(※)
 
Sub AllSheets(TorF As Long)
         ~~~~↑~~~
         としてTrueとは区別させるべきじゃないですか?
 
※Boolean型だと、0はFalse。0じゃなければTrueに型変換されてしまう。

回答
投稿日時: 20/01/02 22:30:06
投稿者: WinArrow
投稿者のウェブサイトに移動

xlVeryHidden
の値は、「2」だから
 
>TorF As Boolean
ではなく
TorF As Integer
の方がよいのでは?

回答
投稿日時: 20/01/02 22:55:47
投稿者: simple

すでに回答をいただいています。
 
察しのとおり、.Visibleプロパティの値は2種類ではなく、3種類です。
WorksheetのVisibleプロパティのヘルプを確認してください。
 
すでに回答がありました型宣言が実務的だと思いますが、

Sub AllSheets(TorF As XlSheetVisibility)
と書くのが本来かもしれません。TorFという変数も誤解を招くけれども。
 
# MsgBox関数の返り値を受ける変数として、VbMsgBoxResult型を使うじゃないですか、
# それと同じ感じです。
# まあ、XlSheetVisibilityといったEnum型クラスがあると知っていても、覚えられないから、
# 結局は、LongないしIntegerとすることになるのだけれど。

投稿日時: 20/01/03 00:50:25
投稿者: アベッチ

皆様早速の回答ありがとうとうございます!
無事に解決しました!