アプリ版:「スタンプのみでお礼する」機能のリリースについて

画像のように特定のファイル(Book1)のみ、開いたときにリボンの非表示、
ウィンドウサイズの固定をしたい場合、どのようにすればよいでしょうか。

Book1のVBAでThisWorkbookに以下のコードを入れると、別のファイルを開いたときに
開いたファイルも同じ設定が有効になってしまうので、回避できる方法があれば
教示頂きたい思います。

Private Sub Workbook_Open()

Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"

With Application
.WindowState = xlNormal '標準
.Width = XXX
.Height = XXX
End With

End Sub

「特定のファイルのみリボンの非表示、ウィン」の質問画像

A 回答 (3件)

こんにちは、


>特定のファイル(Book1)のみ、開いたときにリボンの非表示、
>ウィンドウサイズの固定をしたい場合、どのようにすればよいでしょうか。

Application.~で設定するとApplicationの設定を変える事になるのですべてのExcelに影響してしまいます。

なので、リボンに関しては、customUIのxmlファイルでブックのインスタンス時に設定します。
Office Ribbon Editor などのソフトをお持ちであれば、比較的容易ですが、zipを介して行うなどの場合、少し面倒です。

CustomUIの導入方法など少し古いですが、下記を参考にしてください。
https://thom.hateblo.jp/entry/2018/06/13/043244

ちなみに、サイト内のCustomUI.xml は、 Excel2010以降であれば、customUI14.xml としてください。

簡単な設定内容は、
.rels の内容

<Relationship Type="h ttp://schemas.microsoft.com/office/2007/relationships/ui/extensibility" Target="/customUI/customUI14.xml"/>
</Relationships> ’現存します
を追加してください。

customUI14.xmlの内容

<customUI xmlns="h ttp://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="true">
<tabs>
<tab idMso="TabHome" visible="false"></tab>
</tabs>
</ribbon>
</customUI>

注意:実際には h ttp: のスペースを消してください。

設定すると、このブックでユーザーはリボンの設定を含め使えません。
(VBAでカスタマイズする事は出来ます)

新規ブックなどでテストしてください。

次にウィンドウサイズの固定ですが やはりApplication.~ではダメなので
WindowsAPIを使います。
この辺りは、OSバージョンやofficeバージョンが不明なのでご自身で調べる必要があります。

一応サンプルを書きますが、(使用目的など不明の為)期待する結果かどうかは、分かりません。

先ず、ThisWorkbook モジュールに

Private Sub Workbook_Open()
  flag = True
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  If flag = True Then
    Call Module1.Test_Sample(Wn) ’モジュール名は適時変更
    flag = False
  Else
  End If
End Sub

Private Sub Workbook_WindowResize(ByVal Wn As Window)での制御も可能か?


標準モジュールModule1へ
'Win32API
Private Declare Function _
    MoveWindow Lib "user32" ( _
          ByVal hWnd As Long, _
          ByVal X As Long, _
          ByVal Y As Long, _
          ByVal nWidth As Long, _
          ByVal nHeight As Long, _
          ByVal bRepaint As Long) As Long

Private Declare Function _
    SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" ( _
               ByVal uAction As Long, _
               ByVal uParam As Long, _
               ByRef lpvParam As Any, _
               ByVal fuWinIni As Long) As Long

Public Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Sub Test_Sample(myWn As Window)
Dim Ret As Long
Dim hWnd As Long
Dim typRect As RECT
  Call SystemParametersInfo(48, 0, typRect, 0)
  Ret = MoveWindow(myWn.hWnd, typRect.Right - 600, 50, 500, 500, 1)
End Sub

幅500高さ500のwindowが画面上から50の、画面の右側から600に
サイズ(境界線での)変更、移動が共に出来ないWindowが表示されます。
ボタンの表示変更で解けます。

MoveWindowでない方が色々設定できると思いますが、何かと分かり難くなると思いますので
とりあえず。。
    • good
    • 0
この回答へのお礼

返事が遅れて申し訳ありません。
頂きました回答で、いろいろ試した結果、なんとか出来ました。
ありがとうございました。

お礼日時:2020/08/29 05:37

リボンの方だけ。



「開く時」のイベントではなく
アクティブ時、非アクティブ時のイベントで制御すればよろしいかと。

Private Sub Workbook_Activate()
  Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
End Sub

Private Sub Workbook_Deactivate()
  Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",TRUE)"
End Sub
    • good
    • 4

#1です


入力忘れ
Option Explicit
Dim flag As Boolean ’忘れました
Private Sub Workbook_Open()
    • good
    • 0

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

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


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