437969 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

かぶもーちゃん

かぶもーちゃん

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

PR

カレンダー

コメント新着

かぶもーちゃん@ Re[1]:vbaで構造体を関数の引数と戻値で使う(10/20) すみませんさっきコメントに気付きました…
柳沢由香里@ Re:vbaで構造体を関数の引数と戻値で使う(10/20) あなたさまのおかげで、データ構造体が理…
individual.investor@ Re:採用しなかったほうはどうなった? (2/26) (02/27) もーちゃん、こんにちは(^^) ぷちお久しぶ…

バックナンバー

2024年11月
2024年10月
2024年09月
2024年08月
2024年07月

カテゴリ

2023年01月24日
XML
カテゴリ:Excel.vba
前提条件は次のとおり
Excel2010用,シートは上下に2ウィンドウ整列済み。
Excel2010はmdiだが2013からsdiで開くようだ。
別のPCのExcel2019はsdiで開くので実に面倒くさい。
ことの発端はonTimeなどでループ処理している際に他のシート名をクリックすると
たまに名前変更モードになってしまいループがストップしてしまって困った。
そこでユーザーフォームから上下2ウィンドウの下段側のみシートをボタンで選択したい。
そのための処理でハマってしまいちゃんと動作するまで半日費やしてしまった。
キモはWindowNumber=1とWindows(1)とは異なる、ということ。


やりたい事はボタンをクリックすればシートが移動する、ということだけ。
ただしアクティブシートが移動しないようにするには意外にハードルが高かった。
'+---------------------------------
'Sheet1
'+---------------------------------
Private Sub CommandButton1_Click()
Dim ws As Window, wsName As Variant, ii As Integer
    Application.ScreenUpdating = False  '+--- 画面を更新させない -----------+
    ReDim wsName(2)
    For ii = 1 To Windows.Count
        If Windows(ii).WindowNumber = 1 Then 'ウィンドウナンバー1
            wsName(1) = Windows(ii).Caption 'ウィンドウキャプションを取得する
        End If
        If Windows(ii).WindowNumber = 2 Then 'ok ウィンドウナンバー2
            wsName(2) = Windows(ii).Caption 'ウィンドウキャプションを取得する
        End If
    Next ii
    Windows(wsName(2)).Activate     'Window2をアクティブにする
    Worksheets("Sheet1").Activate   '●"Sheet1"をアクティブにする
    Windows(wsName(1)).Activate     'Window1に戻す
    Application.ScreenUpdating = True   '+--- 画面を更新させる -------------+
End Sub
'+---------------------------------
'Sheet2
'+---------------------------------
Private Sub CommandButton2_Click()
Dim ws As Window, wsName As Variant, ii As Integer
    Application.ScreenUpdating = False 
    ReDim wsName(2)
    For ii = 1 To Windows.Count
        If Windows(ii).WindowNumber = 1 Then 
            wsName(1) = Windows(ii).Caption
        End If
        If Windows(ii).WindowNumber = 2 Then
            wsName(2) = Windows(ii).Caption
        End If
    Next ii
    Windows(wsName(2)).Activate
    Worksheets("Sheet2").Activate '●
    Windows(wsName(1)).Activate
    Application.ScreenUpdating = True 
End Sub
'+---------------------------------
'Sheet3
'+---------------------------------
Private Sub CommandButton3_Click()
Dim ws As Window, wsName As Variant, ii As Integer
    Application.ScreenUpdating = False  
    ReDim wsName(2)
    For ii = 1 To Windows.Count
        If Windows(ii).WindowNumber = 1 Then
            wsName(1) = Windows(ii).Caption 
        End If
        If Windows(ii).WindowNumber = 2 Then 
            wsName(2) = Windows(ii).Caption 
        End If
    Next ii
    Windows(wsName(2)).Activate
    Worksheets("Sheet3").Activate '●
    Windows(wsName(1)).Activate
    Application.ScreenUpdating = True
End Sub
'+---------------------------------
'Sheet8
'+---------------------------------
Private Sub CommandButton4_Click()
Dim ws As Window, wsName As Variant, ii As Integer
    Application.ScreenUpdating = False  
    ReDim wsName(2)
    For ii = 1 To Windows.Count
       'Debug.Print ActiveWorkbook.Windows(ii).WindowNumber
        If Windows(ii).WindowNumber = 1 Then 
            wsName(1) = Windows(ii).Caption 
        End If
        If Windows(ii).WindowNumber = 2 Then 
            wsName(2) = Windows(ii).Caption 
        End If
    Next ii
    Windows(wsName(2)).Activate
    Worksheets("Sheet8").Activate '●
    Windows(wsName(1)).Activate
    Application.ScreenUpdating = True
End Sub
'+---------------------------------
'●印の箇所が異なるだけ。
ユーザーフォームに貼り付けます。
If文なしでWindows(ii)とやるとインデックスがコロコロ変わってだめです。
使えるかどうかについて責任は持てませんのであしからず!!





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2023年01月24日 16時54分39秒
コメント(0) | コメントを書く



© Rakuten Group, Inc.
X