|
訳のわからない投稿申し訳ありませんでした
この辺の処理、トラウマで、いつも、コードが動くように
訳もわからず改変していって??になってしまいます
基本に戻って、最初から動きを追いかけて下記わかりました
・シートモジュール等のクラスモジュールと標準モジュールでは、name等戻り値が違う
・色々試してみた結果、yoshiさんのコードのように、ウインドウ操作はWorkbook_Activate のみで行う
・複数ブック使用時で、新しいウインドウを開く場合は、ブックの保護(ウィンドウをチェック)をする
が、基本事項のように思いました
取りあえず、トグルボタンで動作、マウスAPI抜き(組み込んでも動作しました)
コードは、下記で希望の操作かないました
ただ、もっとすっきり書けないものかと思っています
何かアドバイスありましたらよろしくお願いいたします
Sheet1
Option Explicit
Private Sub ToggleButton1_Click()
On Error Resume Next
'Unprotect
ThisWorkbook.Protect Structure:=False, Windows:=True
On Error GoTo 0
If ToggleButton1.Value = True Then '2画面表示させる
ToggleButton1.Caption = "戻 る"
'If Windows.Count = 1 Then ActiveWindow.NewWindow
'Windows(ThisWorkbook.Name & ":1").Activate
'↑1ブック時OK、複数ブック時NG 実行時エラー '9':インデックスが有効範囲にありません。
If Mid(ActiveWindow.Caption, Len(ActiveWindow.Caption) - 1, 1) = ":" Then '単独ブック起動時
Windows(ThisWorkbook.Name & ":1").Activate
Call ThisWorkbook.Workbook_Activate
Else '複数ブック起動時
ActiveWorkbook.Unprotect
ActiveWindow.NewWindow
'Windows(ActiveWindow.Caption).Activate
Windows(ThisWorkbook.Name & ":1").Activate
Call ThisWorkbook.Workbook_Activate
End If
Else '1画面表示させる(ウィンドウを1つ閉じる)
ToggleButton1.Caption = "DTセット(2画面表示)"
If Mid(ActiveWindow.Caption, Len(ActiveWindow.Caption) - 1, 1) = ":" Then '単独ブック起動時
Windows(ThisWorkbook.Name & ":2").Activate
'ActiveWorkbook.Unprotect
'ActiveWindow.Close
'ActiveWindow.WindowState = xlMaximized
Call ThisWorkbook.Workbook_Deactivate
Else '複数ブック起動時
'Windows(ActiveWindow.Caption).Activate
'ActiveWorkbook.Unprotect
'ActiveWindow.Close
'ActiveWindow.WindowState = xlMaximized
'On Error Resume Next
Call ThisWorkbook.Workbook_Deactivate
'On Error GoTo 0
End If
End If
End Sub
ThisWorkbook
Option Explicit
Public max_h As Double
Public max_w As Double
'Private Sub Workbook_Activate()
Public Sub Workbook_Activate()
If Mid(ActiveWindow.Caption, Len(ActiveWindow.Caption) - 1, 1) = ":" Then '単独ブック起動時
Unprotect
'Windows.Arrange ArrangeStyle:=xlVertical
'ActiveWindow.Width = ActiveWindow.Width + 2
ActiveWindow.WindowState = xlMaximized
max_h = ActiveWindow.Height - 20.25 'なぜか-20.25 必要
max_w = ActiveWindow.Width
Windows(ActiveWorkbook.Name & ":1").Activate
With ActiveWindow
.WindowState = xlNormal '←元に戻す と 同等
.Top = 0
.Left = 0
.Height = max_h
.Width = 240
End With
'Windows(Name & ":2").Activate
Windows(ActiveWorkbook.Name & ":2").Activate
With ActiveWindow
.WindowState = xlNormal
.Top = 0
.Left = 240
.Height = max_h
.Width = max_w - 240
End With
ActiveWorkbook.Protect Structure:=False, Windows:=True
Sheets(2).Select
End If
'Protect Structure:=False, Windows:=True
End Sub
'Private Sub Workbook_Deactivate()
Public Sub Workbook_Deactivate()
Unprotect
On Error Resume Next
Windows(Me.Name & ":2").Close
On Error GoTo 0
On Error Resume Next
ActiveWindow.WindowState = xlMaximized
On Error GoTo 0
End Sub
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
'MsgBox Application.Caption & ActiveWindow.Caption
'ウインドウ切替時、単独ブックだったら最大化表示
If Mid(ActiveWindow.Caption, Len(ActiveWindow.Caption) - 1, 1) <> ":" Then '単独ブック起動時
Unprotect
ActiveWindow.WindowState = xlMaximized
End If
End Sub
|
|