エクセルからワードファイルを作成し、以下の様なモジュールを起動させました。
Sub 裏紙作成(i As Long) Dim wdApp As Word.Application Dim wdDoc As Word.Document Dim cla As String Dim name As String Dim pro As String Dim ADR As String cla = Cells(i, 8) name = Cells(i, 3) ADR = Cells(i, 2) & Cells(i, 4) Set wdApp = CreateObject("Word.Application") Set wdDoc = wdApp.Documents.Add wdDoc.Activate wdApp.Visible = True With ActiveDocument.PageSetup .PageWidth = MillimetersToPoints(148) .PageHeight = MillimetersToPoints(210) .TopMargin = MillimetersToPoints(12.7) .BottomMargin = MillimetersToPoints(12.7) .LeftMargin = MillimetersToPoints(12.7) .RightMargin = MillimetersToPoints(12.7) End With With wdApp .Selection.Font.name = "HGP行書体" 'フォント Call .Selection.Goto(What:=wdGoToPage, Which:=wdGoToFirst, Count:=pageNo) 'カーソルを置く .Selection.Font.Size = 11 For g = 1 To 13 .Selection.TypeParagraph '改行 Next .ActiveDocument.Range(Start:=.ActiveDocument.Paragraphs(1).Range.Start, End:=.ActiveDocument.Paragraphs(1).Range.End).Font.Size = 28 .ActiveDocument.Range(Start:=.ActiveDocument.Paragraphs(4).Range.Start, End:=.ActiveDocument.Paragraphs(4).Range.End).Font.Size = 44 .ActiveDocument.Range(Start:=.ActiveDocument.Paragraphs(5).Range.Start, End:=.ActiveDocument.Paragraphs(5).Range.End).Font.Size = 26 .ActiveDocument.Range(Start:=.ActiveDocument.Paragraphs(6).Range.Start, End:=.ActiveDocument.Paragraphs(6).Range.End).Font.Size = 38 .ActiveDocument.Range(Start:=.ActiveDocument.Paragraphs(7).Range.Start, End:=.ActiveDocument.Paragraphs(9).Range.End).Font.Size = 20 .ActiveDocument.Goto(What:=wdGoToLine, Count:=1).Text = cla .ActiveDocument.Goto(What:=wdGoToLine, Count:=4).Text = name .ActiveDocument.Goto(What:=wdGoToLine, Count:=13).Text = ADR .ActiveDocument.Range(Start:=.ActiveDocument.Paragraphs(1).Range.Start, End:=.ActiveDocument.Paragraphs(10).Range.End).ParagraphFormat.Alignment = wdAlignParagraphCenter End With End Sub
問題なく動くのですが、以下の部分(用紙サイズ設定)が通らず作成されてしまいます。
With ActiveDocument.PageSetup .PageWidth = MillimetersToPoints(148) .PageHeight = MillimetersToPoints(210) .TopMargin = MillimetersToPoints(12.7) .BottomMargin = MillimetersToPoints(12.7) .LeftMargin = MillimetersToPoints(12.7) .RightMargin = MillimetersToPoints(12.7) End With
しかし問題点を改善しようとステップインで確認すると問題なく作成されます。
ステップインではなく通常の起動で作成することは不可能でしょうか?
VBAではなくPCの動きが遅い事が原因でしょうか?
問題点、解決策をご存じでしたらよろしくお願いします。
> ステップインではなく通常の起動で作成することは不可能でしょうか?
Office 2019 の環境で VBA を動かしてみましたが Word 文書に設定は反映されているようでした。
原因は分からないですが、参考情報まで。
用紙サイズ設定の使い方自体は間違って無さそうに思いました。
■ 【ワードマクロ】余白を調整する方法
https://kirinote.com/wordvba-margin/
もしかしたら「通常使うプリンタ」(印刷時に使用されるプリンタ)の認識に時間がかかっているのかもしれません。
原因の切り分けとして PageSetup を使う前に待機処理(数秒程度)を入れて改善するか試してもらえますか?
待機処理を入れる方法としては、Sleep 関数や Wait 関数を用いる方法があります。
■ VBA Sleep関数について、同じような機能を持つ他の関数やメソッドについても紹介
https://it-kyujin.jp/article/detail/1843/
> エクセルからワードファイルを作成し、以下の様なモジュールを起動させました。
この文書では実行環境や実行内容がイマイチ読み取れないのですが、
ExcelVBAで提示マクロを実行しているという事でしょうか?
> ExcelVBAで提示マクロを実行しているという事でしょうか?
質問文に記載されているサンプルコードに Cells() が使われていたので、Excel のシートの情報を元に Word の文書を作成する VBA なんだろうなと思いました。
私もそう思ったのですが、だとすると、
With ActiveDocument.PageSetup はどこのつもりなのかと思ったので。
#全体的にActiveDocument使用しているのがまずそうかな?
> 全体的にActiveDocument使用しているのがまずそうかな?
一応、Excel VBA の参照設定で Word のコンポーネント「Microsoft Word xx.x Object Library」を設定すれば、ActiveDocument を使うことは出来るようです。
ActiveDocument は、フォーカスされている Word 文書を返すプロパティになります。
ただ、連続して Documents.Add を行った場合、想定通りの結果にならないようなので、やはり、ActiveDocument を使うのはまずそうです。
試した所、Documents.Add が2回目に呼ばれた際「文書2」が作成されますが、ActiveDocument は最初の「文書1」を参照している為、「文書2」へのページ設定が反映されない、という問題があるようです。
<参考>
https://teratail.com/questions/374571#reply-506802
回答1件
あなたの回答
tips
プレビュー