- ベストアンサー
マクロでのエラーについて
- エクセルのマクロエラーについて知りたいのですが、特定のコードが実行される時と実行できない時があります。どのような原因が考えられるでしょうか?
- マクロエラー発生時のZoomプロパティの設定に関するエラーが発生しています。Zoomプロパティの設定方法を確認してください。
- マクロエラーの原因の一つとして、PrintAreaの範囲設定不正が考えられます。PrintAreaの設定に問題がないか確認してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 そのコードのエラーは、もともと想定済みなのですが、注意点として、あまりも古い問題なので、今さらということで、曖昧にしていました。もちろん、Microsoft側も、曖昧なままにしています。たぶん、現在のバージョンまで直っていないと思います。 この話は、Microsoft Support に残っているかもしれませんが、趣旨は、Zoomなど、画面全体に影響するものは、印刷の設定自体が狂うことがあるそうです。当然ですが、無理な部分のあるコードです。 k = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))") これは、横方向のページ改行の数を取得しようとしたコードです。 それで、ワザと、マクロ関数を使ったわけです。VBAメソッドでは、かなりのタイムロスが生じるためです。 しかし、それが逆に災いしてしまったようです。 今考えられるのは、2つの方法です。 例えば、 If k = 1 Then Exit Do j = j - 1 .PrintArea = myRng.Address '* .Orientation = xlLandscape '* .PaperSize = xlPaperA4 '* .Zoom = j Loop とフルに入れる方法と、もうひとつは、設定が安定するのを待たせるために、ループのスピードを落とす方法です。 モジュール画面の一番上に Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) と入れておいて、 Do k = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))") If k = 1 Then Exit Do j = j - 1 .Zoom = j DoEvents '* Sleep 500 '*500/1000秒 'スピードの調整。二度目からの安定を図る Loop このどちらかだと思います。Waitでも良いのですが、Sleepという、Win32API関数を使う理由は、メモリ負担を減らす目的です。なお、これで直らない場合は、エラー・トラップ(On Error Goto ~)を設定してください。事前には、なかなか書きにくかったことで、ご面倒をかけましたが、よろしくご了解願います。
その他の回答 (1)
- kkkkkm
- ベストアンサー率66% (1719/2589)
Do~Loopでjが減算されていますがそこがマイナスになるということは無いですか。
お礼
申し訳なく思いつつも、大変感謝しています。 体調は如何でしょうか? 提示して頂いた修正コード2点ですが、 実際に動かしましたところ、最初のフルに入れる方法を活用させて頂きます。 2点目のコードだと、同じく .Zoom = j のところでエラーが発生してしまい、 またOn Error Goto ~を用いてもエラーは回避しても時間が掛かるため 最初のコード(こちらもやや時間はかかりますが)の方が 確実性があるように感じましたので、そちらを使用させて頂きます。 過去に遡り多々ご迷惑をお掛けしました事、申し訳ありませんでした。 しかし、その後素人の悪あがきで、試行錯誤しながら手を変え品を変え コードを書き換えたりしていましたら、ほぼ思い通りの形となりました。 当初、想定していたもの以上のものが出来るようで、本当に感謝しています。 ありがとうございました。