追記 後日、このマクロをブラッシュアップしました。あわせてご覧ください。 【コード】選択したファイルだけを左右に並べるWordマクロ
先日のWordマクロセミナー(プログラミング編) にてご質問をいただきまして、作ってみました。
あまり試運転していませんが、ひとまず動くと思います。どうぞご利用ください。
このマクロでできること
開かれているWordファイルを左右に並べます。
マクロの解説
現在開かれている文書の数に従って、横幅を計算して配置するマクロです。
処理していることはわかりやすいと思いますので、ご覧ください。
19行、20行の数値は、パソコン環境にあわせて適宜修正してみてください。
なお、Word 2010は、現在開かれている文書を正確に取得できないことがございます。
このマクロを作成してみて気づきました。怖いですねぇ。
Word 2010だと上記の理由にて、適切な場所に配置されない文書が存在することがあります。
バグについては、こちらの記事をご覧ください。
Word 2010 Documents collection corrupted if work with several documents
Word 2003/2007では動作確認いたしました。
マクロ
Sub ウィンドウを左右に並べるマクロ() Dim ttlHeight As Integer 'Word画面の横幅 Dim ttlWidth As Integer 'Word画面の縦幅 Dim indivWidth As Integer '個別のファイルの横幅 Dim i As Integer Dim nDoc As Integer '開かれているファイルの数 '開かれているファイルの数を取得 nDoc = Documents.Count If nDoc < 1 Then Exit Sub 'ファイルの1つを最大化(Word画面のサイズを計測するため) Documents(1).Activate ActiveWindow.WindowState = wdWindowStateMaximize 'Word画面のサイズの取得 ttlWidth = Application.Width - 10 '調整してください。 ttlHeight = Application.Height - 16 '調整してください。 '個別ファイルの横幅の設定(縦幅はWord画面のサイズを採用) indivWidth = ttlWidth / nDoc For i = 1 To nDoc Documents(i).Activate With ActiveWindow .WindowState = wdWindowStateNormal .Width = indivWidth .Height = ttlHeight .Top = 0 .Left = indivWidth * (i - 1) End With Next i End Sub
-
4. Re:Wordファイルを左右に並べるマクロ別プロセスも意識するのであれば下記のような感じでしょうか?
ウィンドウのタイトル名でWordか否かを判断する方法です。Public Sub Sample2()
Dim n As Long
Dim w As Long, h As Long, ww As Long
Dim t As Word.Task
Dim i As Longn = CountWordApp
Application.ActiveWindow.WindowState = wdWindowStateMaximize
w = Application.ActiveWindow.Width – 10
h = Application.ActiveWindow.Height – 16
ww = w / n
i = 1
For Each t In Application.Tasks
If (t.Visible = True) And (InStr(LCase$(t.Name), “microsoft word”)) Then
t.WindowState = wdWindowStateNormal
t.Width = ww
t.Height = h
t.Top = 0
t.Left = ww * (i – 1)
i = i + 1
End If
Next
End SubPrivate Function CountWordApp() As Long
Dim t As Word.Task
Dim ret As Longret = 0 ‘初期化
For Each t In Application.Tasks
If (t.Visible = True) And (InStr(LCase$(t.Name), “microsoft word”)) Then ret = ret + 1
Next
CountWordApp = ret
End Function -
3. Re:Wordファイルを左右に並べるマクロ
こんにちは。
普通にWindowオブジェクトを使えば良いような気がするのですが、Documentsに拘るのは何か理由があるのでしょうか(?_?)
Option Explicit
Public Sub Sample()
Dim n As Long
Dim w As Long, h As Long, ww As Long
Dim i As Longn = Application.Windows.Count
If n <= 1 Then Exit Sub
Application.ActiveWindow.WindowState = wdWindowStateMaximize
w = Application.ActiveWindow.Width – 10
h = Application.ActiveWindow.Height – 16
ww = w / n
For i = 1 To n
With Application.Windows(i)
.WindowState = wdWindowStateNormal
.Width = ww
.Height = h
.Top = 0
.Left = ww * (i – 1)
End With
Next
End Subちなみに上記コードは全く検証していません。
ただ書き直しただけです(^^; -
1. Office2010で動作しない点と、それ以外の問題点について
ご無沙汰しております。
Office2010で正しく動作しない件、気になったので、自分でも確認してみました。
たしかにバグっぽいですね。ところで、上記のコードなのですが、
・マルチディスプレイ環境や、
・タスクバーの位置を変えている場合
に加え、
・Office2010以外(2003,2007) であっても
正常に動作しない場合があります。
この辺りの話は長くなったので、
詳しくはblogにまとめました。それと、Office2010で動かないというのも面白くないので、
どのVer.でも動くように変えたマクロも作ってみました。
(といっても、主要な部分で、Win32API を使うようになったので(実質C言語で書いたプログラムと大差なく)、
もはやVBAのマクロというには微妙な感じなのですが・・・^^;)参考になれば幸いです。
コメント