プロが教えるわが家の防犯対策術!

タイトルの件、個別のマクロはわかりました。
これを1つにまとめる、コードわかる方
いましたら、教えて下さい。


【やりたいこと】
1つ目→1つのマクロ【sub~end】で、リボン、行列、数式・ステータスバを非表示にする、
⇒出来れば、エクセルのSheet1だけ
⇒1つやるとマクロも入っていない他のエクセルファイルも非表示になる時とならない時があります


2つ目→1つのマクロ【sub~end】で、リボン、行列、数式・ステータスバを非表示にする


【コード】

●リボン非表示・再表示

Private Sub CommandButton1_Click()

' リボンを非表示にする
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", False)"

End Sub
Private Sub CommandButton2_Click()

'リボンを表示する
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"

End Sub


●行と列、非表示・再表示

Private Sub CommandButton1_Click()

' リボンを非表示にする
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", False)"

End Sub
Private Sub CommandButton2_Click()

'リボンを表示する
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"

End Sub

●数式バー非表示・再表示

Sub 数式バ()
Application.DisplayFormulaBar = False


End Sub


Sub 数式バー()
Application.DisplayFormulaBar = True

End Sub


●ステータスバーの非表示・再表示について

Sub ステータスバー()

Application.DisplayStatusBar = False


End Sub


Sub statusbar()

Application.DisplayStatusBar = True


End Sub

A 回答 (4件)

>1.非表示にはなりますが、開いているシートがならずに別のシートが新しく作られ、それは非常時になります。


NewWindowをご存知でないようなので
ActiveWindow.NewWindow を消して下さい

>やりたいことは、既に開いているシートをアクティブシートを非表示にしたいです。
ご質問の
>出来れば、エクセルのSheet1だけ
気が変わったと言う事ですか?

>2.各モジュールに入れるのは下記のとおりですか?
ボタンから実行したいのですよね?
#3のコードはボタン用のコードです 
ボタンによって変わりますが・・
>図形描画にて作成したボタンに
でしたら、

標準モジュールに#3 のコードを記し登録すれば良いです

#1の回答のコート

Sheet1シートモジュールに
Private Sub Worksheet_Deactivate()
display_control (True)
End Sub

ThisWorkbookブックモジュールに
Private Sub Workbook_Deactivate()
display_control (True)
End Sub
    • good
    • 0

>図形の右クリック、マクロの登録のとこりに上記、マクロが出来ていません。


使い方が分からなかったのでイベントにしたのだけれど
ボタンから実行したいのですね

Subをボタン、マクロダイアログに登録表示する場合
引数を付けると表示できませんので呼び出し元を登録してください
#1#2を忘れて

Sub display_ON()
display_control (True)
End Sub

Sub display_OFF()
Call display_control(False)
End Sub

'下記は表示・登録できない
Sub display_control(flag As Boolean)
Worksheets("Sheet1").Activate
Dim i As Integer, wd As Integer
ActiveWindow.NewWindow
wd = Workbooks(ThisWorkbook.Name).Windows.Count
'ActiveSheet.Cells.Rows.EntireColumn.Hidden = Not flag
With ActiveWindow
If flag = False Then
Windows.Arrange ArrangeStyle:=xlVertical
Else
If wd > 1 Then
For i = wd To 2 Step -1
Workbooks(ThisWorkbook.Name).Windows(i).Close
Next
'.WindowState = xlNormal 'xlMaximized
End If
End If
.DisplayGridlines = flag
.DisplayHeadings = flag
.DisplayHorizontalScrollBar = flag
.DisplayVerticalScrollBar = flag
.DisplayWorkbookTabs = flag
End With
With Application
.DisplayFormulaBar = flag
.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", " & CStr(flag) & ")"
End With
End Sub

NewWindowが良いかなと思い追加しましたが要らなければ消して下さい
    • good
    • 0
この回答へのお礼

ご指導ありがとうございます。

2つご質問です。ご指導よろしくお願いいたします。
1.非表示にはなりますが、開いているシートがならずに
別のシートが新しく作られ、それは非常時になります。

やりたいことは、既に開いているシートを
アクティブシートを非表示にしたいです。

2.各モジュールに入れるのは下記のとおりですか?


標準ジュールに

'下記は表示・登録できない
Sub display_control(flag As Boolean)
Worksheets("Sheet1").Activate
Dim i As Integer, wd As Integer
以下省略文字数制限のため


Sheet1シートモジュール

Sub display_ON()
display_control (True)
End Sub

Sub display_OFF()
Call display_control(False)
End Sub


ThisWorkbookブックモジュール

Sub display_ON()
display_control (True)
End Sub

Sub display_OFF()
Call display_control(False)
End Sub

お礼日時:2022/12/18 21:00

こんにちは、返信について


1,はい 2,はい 3、ActiveWindow.DisplayHeadings = False
>いずれかのモジュールに1つだけ入れてでは、実行ができませんでした。

#1のVBAの説明
表示を表示、非表示とかイベントなどをON/OFFとかする時 
同じメソッドやプロパティに対して命令を変えて事項する事で
重複するコードをまとめられますね(特に戻す必要がある場合は有効)

例 個々に分けた場合
Sub ステータスバーOFF()
Application.DisplayStatusBar = False
End Sub
Sub ステータスバーON()
Application.DisplayStatusBar = True
End Sub
Sub example()
call ステータスバーOFF
Msgbox "ステータスバーを非表示にしています"
call ステータスバーON
End Sub

まとめた場合(引数を付ける)
Sub ステータスバーswitch(flag As Boolean)
Application.DisplayStatusBar = flag
End Sub
Sub example()
call ステータスバーswitch(Flase)
Msgbox "ステータスバーを非表示にしています"
call ステータスバーswitch(True)
End Sub
多くの処理をする場合は特にまとめた方が良いと思います

各表示についてですがExcel ファイル オプション 詳細設定の表示を見てください
各表示が反映される対象はブックに対してとシートに対して反映されるものがあります これは、通常VBAで行う場合も同様です

ブックに影響が出てしまう表示もあるのでシート1のみと言うわけにはいきませんが 表示と言うのは見えていないシートに行っても見えないのだから意味が無いですよね
なのでシート1が見える時にOFFを実行、見えなくなる時にONを実行すれば良い事になります

シート1に対しての表示なので シート1のシートイベントをトリガーに実行する例を書きました

ブックにおいてアクティブシートは1つですからシート1の使い方で上手くいかないケースは考えられます
そのような時はブックのシート1ではなく 新しいブックを作りそのシート1を操作して表示し他の処理を行うようにすれば解決できるかもしれません

#1の Sub display_control(flag As Boolean) を下記のように変えると
行列番号の操作が出来ると思います

'ActiveSheet.Cells.Rows.EntireColumn.Hidden = Not flag
実行コードにするとセル領域が非表示になります
'.DisplayWorkbookTabs = flag
実行コードにするとシートタグが非表示になります
実行トリガーが無くなるので実施したい場合はショートカットキーで実行できるプロシージャやマクロダイアログから実行できるプロシージャをあらかじめ作成しておくようにしてください

Sub display_control(flag As Boolean)
With Application
.DisplayFormulaBar = flag
.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", " & CStr(flag) & ")"
End With
'ActiveSheet.Cells.Rows.EntireColumn.Hidden = Not flag
With ActiveWindow
.DisplayGridlines = flag
.DisplayHeadings = flag
.DisplayHorizontalScrollBar = flag
.DisplayVerticalScrollBar = flag
'.DisplayWorkbookTabs = flag
End With
End Sub
    • good
    • 1
この回答へのお礼

Qchan1962様
いつもご指導ありがとうございます。
上記、コードを試し実行できました。

次に、図形描画にて作成したボタンに、上記マクロを割当ようと
思いましたら、図形の右クリック、マクロの登録のとこりに
上記、マクロが出来ていません。

●上記マクロは、ボタンに登録するにはどうすれば良いでしょうか?
他、マクロはSubにて定義した名前が表示されます。

宜しくお願い致します。

お礼日時:2022/12/18 09:22

こんにちは


なさりたい事は良く分かりませんが
>出来れば、エクセルのSheet1だけ
Sheet1が常にFalseで良いなら

標準ジュールに
Sub display_control(flag As Boolean)
With Application
' リボン
.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", " & CStr(flag) & ")"
'●数式バー
.DisplayFormulaBar = flag
'●ステータスバー
.DisplayStatusBar = flag
End With
End Sub

Sheet1シートモジュールに
Private Sub Worksheet_Activate()
display_control (False)
End Sub
Private Sub Worksheet_Deactivate()
display_control (True)
End Sub

ThisWorkbookブックモジュールに
Private Sub Workbook_Deactivate()
display_control (True)
End Sub

でどうでしょう
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
3つ問合せなのですが

1.標準ジュール、Sheet1シートモジュー
  ThisWorkbookブックモジュールの3つにコードを
 入れて成り立つマクロですか?

いずれかのモジュールに1つだけ入れてでは、実行ができませんでした。

2.この場合、Sheet1だけがこの設定になり、他のブックやシートは
この設定にはならないということですか?
⇒希望はこのシートだけ、同設定になってほしいと考えています

3.最後に、行列の非表示も実施したいのですが
標準モジュールに、下記の .DisplayHeadings = flag
を入れましたが、動きませんでした。

お手すきな時に御指南頂けると助かります。
宜しくお願いいたします。

【行列に表示、非表示を出来るコード】
Sub Sample()
With ActiveWindow
.DisplayHeadings = Not .DisplayHeadings
End With
End Sub

お礼日時:2022/12/13 02:13

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