Windows用ワードで開発し、本サイトで公開している「VA公用文」について、Mac用ワードでは動かないという情報を得たので、Macノートを3日間だけレンタルして、バグを修正しました。
確認したところ、次の2つの問題が生じていました。
- ページ設定の途中でマクロが停止する。(メッセージおよびエラー表示なし)
- プロシージャから他のプロシージャを呼び出した時にマクロが停止する。(Breakキーを押した時と同じメッセージが表示される。)
注:これ以外にも、ショートカットキーやクイックアクセスツールバーの設定がうまく変換されませんが、これはマクロの問題ではなく、Mac側でワードを再設定すれば修復可能ですので、ここでは省略します。
1.の問題については、次のコードの赤字の部分で停止することが分かりました。袋とじ印刷に関する設定のようですが、不要なのでコメントアウトすることで解決しました。
'〇アクティブドキュメントのページを設定する
With ActiveDocument.PageSetup
With .LineNumbering
.Active = blnLineNumber '表示の有無
.StartingNumber = 1 '開始番号
.CountBy = 5 '行番号の増分
.RestartMode = wdRestartPage 'ページごとに振り直し
.DistanceFromText = wdAutoPosition '文字列との間隔
End With
.Orientation = wdOrientPortrait
.TopMargin = MillimetersToPoints(SettingArrays.varMargines(1)) '余白(上)
.BottomMargin = MillimetersToPoints(SettingArrays.varMargines(2)) '余白(下)
.LeftMargin = MillimetersToPoints(SettingArrays.varMargines(3)) '余白(左)
.RightMargin = MillimetersToPoints(sngCorrRightMargine) '余白(右)(修正値)
.Gutter = MillimetersToPoints(0)
.HeaderDistance = MillimetersToPoints(20) '用紙の端からの距離(ヘッダー)
.FooterDistance = MillimetersToPoints(15) '用紙の端からの距離(フッター)
.PageWidth = MillimetersToPoints(sngPageWidth) '用紙サイズの幅
.PageHeight = MillimetersToPoints(297)
.FirstPageTray = wdPrinterDefaultBin
.OtherPagesTray = wdPrinterDefaultBin
.SectionStart = wdSectionNewPage
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = wdAlignVerticalTop
.SuppressEndnotes = False
.MirrorMargins = False
'.TwoPagesOnOne = False Mac用WordではVBAが停止する
'.BookFoldPrinting = False Mac用WordではVBAが停止する
'.BookFoldRevPrinting = False Mac用WordではVBAが停止する
.BookFoldPrintingSheets = 1
.GutterPos = wdGutterPosLeft
.CharsLine = SettingArrays.varCharsAndLines(1) '文字数
.LinesPage = SettingArrays.varCharsAndLines(2) '行数
.LayoutMode = wdLayoutModeGrid '文字数と行数の指定
End With
2.の問題については、他のプロシージャを呼び出す前にEnableCancelKeyを wdCancelDisabledに設定して、Breakできないように設定することで解決しました。
Public Const blnCancelDisable = True 'VBA停止を不能にする(デフォルト:False)(Mac用WordではTrueに設定してください。)
'VBA停止不能がTrueの場合は、停止不能に設定する
'Mac用Wordでは停止不能にしないと処理が停止します。
If blnCancelDisable = True Then Application.EnableCancelKey = wdCancelDisabled
<他のプロシージャを呼び出すコード>
'VBAを停止可能に設定する
Application.EnableCancelKey = wdCancelInterrupt
もっと他に良い方法があるような気もしますが、とりあえず問題が解決できているので、良しとしています。
コメント
ショートカットキーなどに関する記述を追加しました。