コラム

Mac用ワードでVBAが動かない場合の対処法

Windows用ワードで開発し、本サイトで公開している「VA公用文」について、Mac用ワードでは動かないという情報を得たので、Macノートを3日間だけレンタルして、バグを修正しました。

確認したところ、次の2つの問題が生じていました。

  1. ページ設定の途中でマクロが停止する。(メッセージおよびエラー表示なし)
  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

もっと他に良い方法があるような気もしますが、とりあえず問題が解決できているので、良しとしています。

コメント

  1. 管理人 より:

    ショートカットキーなどに関する記述を追加しました。

タイトルとURLをコピーしました