質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1021閲覧

ステップインのみうまくいく(ワードの用紙サイズ設定)

ice930

総合スコア99

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/12/19 03:31

エクセルからワードファイルを作成し、以下の様なモジュールを起動させました。

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の動きが遅い事が原因でしょうか?

問題点、解決策をご存じでしたらよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cx20

2021/12/19 04:16

> ステップインではなく通常の起動で作成することは不可能でしょうか? Office 2019 の環境で VBA を動かしてみましたが Word 文書に設定は反映されているようでした。 原因は分からないですが、参考情報まで。 用紙サイズ設定の使い方自体は間違って無さそうに思いました。 ■ 【ワードマクロ】余白を調整する方法 https://kirinote.com/wordvba-margin/
cx20

2021/12/19 04:50

もしかしたら「通常使うプリンタ」(印刷時に使用されるプリンタ)の認識に時間がかかっているのかもしれません。 原因の切り分けとして PageSetup を使う前に待機処理(数秒程度)を入れて改善するか試してもらえますか? 待機処理を入れる方法としては、Sleep 関数や Wait 関数を用いる方法があります。 ■ VBA Sleep関数について、同じような機能を持つ他の関数やメソッドについても紹介 https://it-kyujin.jp/article/detail/1843/
FKD

2021/12/19 08:28

> エクセルからワードファイルを作成し、以下の様なモジュールを起動させました。 この文書では実行環境や実行内容がイマイチ読み取れないのですが、 ExcelVBAで提示マクロを実行しているという事でしょうか?
cx20

2021/12/19 08:45

> ExcelVBAで提示マクロを実行しているという事でしょうか? 質問文に記載されているサンプルコードに Cells() が使われていたので、Excel のシートの情報を元に Word の文書を作成する VBA なんだろうなと思いました。
FKD

2021/12/19 08:50

私もそう思ったのですが、だとすると、 With ActiveDocument.PageSetup はどこのつもりなのかと思ったので。 #全体的にActiveDocument使用しているのがまずそうかな?
cx20

2021/12/19 09:53

> 全体的に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
guest

回答1

0

ベストアンサー

PageSetupの前後でApplication.PrintCommunicationを設定してみてください。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.printcommunication

投稿2021/12/19 04:33

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cx20

2021/12/19 06:06

Application.PrintCommunication は Excel 専用のプロパティのようですね。 否定的な意見になってしまい申し訳ないですが、対象の PageSetup プロパティが Word のプロパティなので、想定通りの動作をするかは少し疑問です。 試してみて改善するようであれば、効果があったということなのでしょうから、試してみるのはありかもしれません。
ice930

2021/12/19 08:31

Application.PrintCommunicationで囲んだら問題なく通過しました! 同様のコードで不明な点(別件)が有ったので再質問します! ありがとうございます!
cx20

2021/12/19 08:48

おお。効果があったようですね。ちょっと驚きました。 ちなみに、元のコードに戻したら、元の事象再現するのでしょうか?(プロパティが関係なくて、単にタイミングの問題だった、ということが無いかなと思い。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問