Word VBA質問箱 IV

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

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


299 / 308 ツリー ←次へ | 前へ→

【41】Wordのウィンドウを整列させる WhiteRabbit 03/5/19(月) 12:06 質問[未読]
【44】Re:Wordのウィンドウを整列させる H. C. Shinopy 03/5/20(火) 9:29 回答[未読]
【46】Re:Wordのウィンドウを整列させる WhiteRabbit 03/5/20(火) 14:00 質問[未読]
【47】Re:Wordのウィンドウを整列させる H. C. Shinopy 03/5/20(火) 16:47 回答[未読]
【52】Re:Wordのウィンドウを整列させる WhiteRabbit 03/5/21(水) 12:38 質問[未読]
【53】Re:Wordのウィンドウを整列させる H. C. Shinopy 03/5/22(木) 8:56 回答[未読]
【54】Re:Wordのウィンドウを整列させる 追加情報 H. C. Shinopy 03/5/23(金) 21:18 回答[未読]
【56】Re:Wordのウィンドウを整列させる 追加情報 WhiteRabbit 03/5/24(土) 19:21 お礼[未読]

【41】Wordのウィンドウを整列させる
質問  WhiteRabbit  - 03/5/19(月) 12:06 -

引用なし
パスワード
   お世話になっています。

Word文書のウインドウを整列させる方法を教えてください。
タスクバーのショートカットメニューに「重ねて表示」「上下に並べて表示」「左右に並べて表示」がありますが、Word以外のウィンドウがあった場合これも含まれてしまいますので、除外したいのです。
Word以外のウィンドウを最小化してから、タスクバーのショートカットメニューの実行をすればいいのですが、VBAで操作する方法がわかりません。
よろしくお願いします。

【44】Re:Wordのウィンドウを整列させる
回答  H. C. Shinopy  - 03/5/20(火) 9:29 -

引用なし
パスワード
   Wordだけで「上下に並べて表示」ということであれば、
次のマクロで整列できます。
(メニューバーの[ウィンドウ]-[並べて表示]に該当します。)

Sub WinWordArrange()
 Window.Arrange
End Sub


Wordでは、なぜかそのままでは「左右に並べて表示」ができないようです。
一旦、すべてのウィンドウを閉じた上で、
Wordのウィンドウをアクティブにして、
「左右に並べて表示」処理をしたらどうでしょうか。

Sub WinWordArrange()
 ' 参照設定 Microsoft Shell Controls And Automation
 Dim myShell As Shell32.Shell
 Dim windowLoop As Window
 '
 Set myShell = CreateObject("Shell.Application")
 myShell.MinimizeAll
 '
 For Each windowLoop In Windows
  With windowLoop
   .Activate
   .WindowState = wdWindowStateNormal
  End With
 Next windowLoop
 '
 myShell.TileVertically ' 左右に並べて表示
 '
 Set myShell = Nothing
End Sub

【46】Re:Wordのウィンドウを整列させる
質問  WhiteRabbit  - 03/5/20(火) 14:00 -

引用なし
パスワード
   こんにちは。返信ありがとうございます。
サンプルコードを試してみましたが、タスクバー内に最小化されたままとなってしまいます。
こちらで試したのは「文書1」「文書2」「文書3」といった文書をファイルを開いた状態で実行してみました。この場合上に書いたようになります。

これが「文書1」から「新しいウィンドウ」で派生した複数のウィンドウだけがある場合は、整列動作らしい動きをしているのですが、結果的には完全な整列でなく中途半端になっています。(ウィンドウが4つあっても2つしか整列しない等)

どこを直せばいいでしょうか?

▼H. C. Shinopy さん:

>Wordだけで「上下に並べて表示」ということであれば、
>次のマクロで整列できます。
>(メニューバーの[ウィンドウ]-[並べて表示]に該当します。)
>
>Sub WinWordArrange()
> Window.Arrange
>End Sub
>
>
>Wordでは、なぜかそのままでは「左右に並べて表示」ができないようです。
>一旦、すべてのウィンドウを閉じた上で、
>Wordのウィンドウをアクティブにして、
>「左右に並べて表示」処理をしたらどうでしょうか。
>
>Sub WinWordArrange()
> ' 参照設定 Microsoft Shell Controls And Automation
> Dim myShell As Shell32.Shell
> Dim windowLoop As Window
> '
> Set myShell = CreateObject("Shell.Application")
> myShell.MinimizeAll
> '
> For Each windowLoop In Windows
>  With windowLoop
>   .Activate
>   .WindowState = wdWindowStateNormal
>  End With
> Next windowLoop
> '
> myShell.TileVertically ' 左右に並べて表示
> '
> Set myShell = Nothing
>End Sub

【47】Re:Wordのウィンドウを整列させる
回答  H. C. Shinopy  - 03/5/20(火) 16:47 -

引用なし
パスワード
   Word文書ウィンドウの全部を整列しない件
すみません。当方の試行不足です。

こちらの環境はWinXP・Word2002ですが、
3つの文書で、その内、1つを先に最小化した状態で当マクロを実行すると、
2つだけ整列して、残り1つは最小化のままという
お尋ねの現象が起きるのを確認しました。

「wdWindowStateNormal」(元の大きさに戻る)を
「wdWindowStateMaximize」(最大化する)に変更して下さい。
ここが問題であったと思います。

それから「Windows.Arrange」(上下に並べて表示)は、削除して下さい。
いろいろやってるなかで、入れてしまいました。
左右に表示する場合は、必要ありません。
従って、以下の通り。

Sub WinWordArrange()
 ' 参照設定 Microsoft Shell Controls And Automation
 Dim myShell As Shell32.Shell
 Dim windowLoop As Window
 '
 Set myShell = CreateObject("Shell.Application")
 myShell.MinimizeAll
 '
 For Each windowLoop In Windows
  With windowLoop
   .Activate
   .WindowState = wdWindowStateMaximize
  End With
 Next windowLoop
 '
 myShell.TileVertically ' 左右に並べて表示
 '
 Set myShell = Nothing
End Sub

【52】Re:Wordのウィンドウを整列させる
質問  WhiteRabbit  - 03/5/21(水) 12:38 -

引用なし
パスワード
   こんにちは、返信ありがとうございます。

修正していただいたコードを試してみているのですが、どうも私のPC環境のせいなのか、うまく整列できないようです。(Windwos2000&Word2000)
ウィンドウサイズが変わる間の動作が影響しているかと思い、間に時間待ちをしてみるといいようです。
ウィンドウの画面を止める方法があればまた様子が違うかもしれません。こうなってくるとVBAでは難しいものでしょうか?
Word内でしたらScreenupdattingプロパティを使えるのですが。

Sub WinWordArrange()
 ' 参照設定 Microsoft Shell Controls And Automation
 Dim myShell As Shell32.Shell
 Dim windowLoop As Window
 Dim waitTimer As Single
 '
 Set myShell = CreateObject("Shell.Application")
 myShell.MinimizeAll
 '
 waitTimer = Timer
 Do: DoEvents: Loop While Timer - waitTimer < 0.2
 
 For Each windowLoop In Windows
  With windowLoop
   .Activate
   .WindowState = wdWindowStateMaximize
  End With
 Next windowLoop
 '
 waitTimer = Timer
 Do: DoEvents: Loop While Timer - waitTimer < 0.2
 'myShell.TileVertically ' 左右に並べて表示
 myShell.TileVertically ' 上下に並べて表示
 'myShell.CascadeWindows ' 重ねて表示
 '
 Set myShell = Nothing
End Sub

【53】Re:Wordのウィンドウを整列させる
回答  H. C. Shinopy  - 03/5/22(木) 8:56 -

引用なし
パスワード
   当方の環境では、不具合は再現されず、お役に立てそうにありません。
取り敢えず、下記の通り現在の結論を掲示しておきます。

1.時間待ちについて
「純正Word VBA」とShellアプリケーションの連携で
時間待ちが必要とすれば…
(画面が落ち着きなく動いているのを見ると、確かに言えます。)
WhiteRabbitさんのマクロは的を得ていると思います。

2.恐縮ながら「Windows.Arrange」を再登場させました。
これはショック療法のようなもので
「純正Word VBA」で一旦は上下に並べて表示しておき、
それをShellアプリケーションで左右に表示すればどうかと再考しました。

3.「Application.ScreenUpdating」は、
全く効き目がないようです。
(「途中経過」が画面上に表示されます。)
結果だけをパッと表示するということは、
ウィンドウ操作を伴う処理では全く働かないということのようです。

当件については、私の脳味噌は力尽きております。
ここで言えることは、私の理屈よりもWhiteRabbitさんの経験のほうが
勝るということです。
修羅場を潜り抜けていらっしゃるようですが、
そういう方こそ良き作譜者です。

Sub WinWordArrangeA()
 ' 参照設定 Microsoft Shell Controls And Automation
 '
 Dim myShell As Shell32.Shell
 Dim windowLoop As Window
 Dim myTimer As Single
 '
 Set myShell = CreateObject("Shell.Application")
 myShell.MinimizeAll
 '
 myTimer = Timer + 5
 Do Until myTimer < Timer
  DoEvents
 Loop
 Application.ScreenUpdating = False ' 効果なし
 For Each windowLoop In Windows
  With windowLoop
   .Activate
   .WindowState = wdWindowStateMaximize
  End With
 Next windowLoop
 Windows.Arrange ' (?!)
 Application.ScreenUpdating = True ' 効果なし
 '
 myTimer = Timer + 5
 Do Until myTimer < Timer
  DoEvents
 Loop
 myShell.TileVertically ' 左右に並べて表示
 '
 Set myShell = Nothing
End Sub

【54】Re:Wordのウィンドウを整列させる 追加情報
回答  H. C. Shinopy  - 03/5/23(金) 21:18 -

引用なし
パスワード
   マイクロソフトのサイトを見ていたら、
何と! そのものズバリの記事が載っていました。
文書ウインドウのサイズを気難しく計算して、
左右に整列していました。

『開いている文書ウィンドウを左右に整列させる方法』
http://www.microsoft.com/japan/support/kb/articles/413/8/63.asp

記事によれば、使用条件は次の通り。
誠にお疲れ様でした。(辛い! 涙・涙…)
以下、サイトから一部を引用。

マイクロソフト サポート技術情報 - 413863
開いている文書ウィンドウを左右に整列させる方法
この資料は以下の製品について記述したものです。
Microsoft Word 2000 for Windows

現象
Wordでは、開いている文書ウィンドウを上下に
整列する機能は用意していますが、
左右に整列する機能は用意されていません。…
左右にウィンドウを整列させるマクロを紹介します。

注意
開いている文書ウィンドウの数や
アプリケーションウィンドウのサイズにより、
右端に表示される文書ウィンドウが文書ウィンドウを
表示する範囲より多少ずれてしまう場合があります。
[終わり]

【56】Re:Wordのウィンドウを整列させる 追加情報
お礼  WhiteRabbit  - 03/5/24(土) 19:21 -

引用なし
パスワード
   こんばんは、H. C. Shinopyさん、情報をありがとうございます。
MSサイトにも使えそうなVBAのサンプルがあるんですね。
早く検索してみるべきでした。
これだと画面がばたばたせずに並び替えできそうです。WINDOWオブジェクトの操作を勉強してみます。

しかし今回は他にShellアプリケーションを使う方法を教えていただいて勉強になりました。
いろいろ使えそうですから、収穫は大きかったですよ。(^^)

今後もよろしくお願いします。

▼H. C. Shinopy さん:
>マイクロソフトのサイトを見ていたら、
>何と! そのものズバリの記事が載っていました。
>文書ウインドウのサイズを気難しく計算して、
>左右に整列していました。
>
>『開いている文書ウィンドウを左右に整列させる方法』
>http://www.microsoft.com/japan/support/kb/articles/413/8/63.asp
>
>記事によれば、使用条件は次の通り。
>誠にお疲れ様でした。(辛い! 涙・涙…)

299 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207138
(SS)C-BOARD v3.8 is Free