Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


20429 / 76732 ←次へ | 前へ→

【61723】Re:新しいウインドを開くのウインドウを閉じるときイベント
お礼  ON  - 09/5/29(金) 21:15 -

引用なし
パスワード
   訳のわからない投稿申し訳ありませんでした

この辺の処理、トラウマで、いつも、コードが動くように
訳もわからず改変していって??になってしまいます

基本に戻って、最初から動きを追いかけて下記わかりました
・シートモジュール等のクラスモジュールと標準モジュールでは、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

1 hits

【61498】新しいウインドを開くのウインドウを閉じるときイベント ON 09/5/13(水) 17:57 質問
【61504】Re:新しいウインドを開くのウインドウを閉... n 09/5/13(水) 22:40 発言
【61507】Re:新しいウインドを開くのウインドウを閉... yoshi 09/5/14(木) 2:26 お礼
【61515】Re:新しいウインドを開くのウインドウを閉... neptune 09/5/14(木) 10:19 発言
【61604】Re:新しいウインドを開くのウインドウを閉... ON 09/5/21(木) 16:18 お礼
【61615】Re:新しいウインドを開くのウインドウを閉... neptune 09/5/21(木) 22:31 回答
【61619】Re:新しいウインドを開くのウインドウを閉... n 09/5/22(金) 1:37 発言
【61624】Re:新しいウインドを開くのウインドウを閉... yoshi 09/5/22(金) 11:59 回答
【61690】Re:新しいウインドを開くのウインドウを閉... ON 09/5/27(水) 18:44 お礼
【61723】Re:新しいウインドを開くのウインドウを閉... ON 09/5/29(金) 21:15 お礼
【61737】Re:新しいウインドを開くのウインドウを閉... yoshi 09/5/30(土) 16:19 回答
【61804】Re:新しいウインドを開くのウインドウを閉... ON 09/6/5(金) 16:17 質問
【61808】Re:新しいウインドを開くのウインドウを閉... yoshi 09/6/5(金) 18:17 回答
【61809】Re:新しいウインドを開くのウインドウを閉... ON 09/6/5(金) 19:10 質問
【61817】Re:新しいウインドを開くのウインドウを閉... yoshi 09/6/6(土) 16:54 回答
【61930】Re:新しいウインドを開くのウインドウを閉... ON 09/6/12(金) 16:36 お礼
【61931】Re:新しいウインドを開くのウインドウを閉... ON 09/6/12(金) 16:37 発言
【61932】Re:新しいウインドを開くのウインドウを閉... ON 09/6/12(金) 16:39 発言

20429 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free