こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

互換モードで描画キャンバスにフリーフォーム

Word2010を使っています。
次のような、あらかじめ選択されている描画キャンバス上にフリーフォームを描くプログラムをWord VBAで作り、互換モード文書(.doc)で実行すると、.ConvertToShapeのところで「プロシージャの呼び出し、または、引数が不正です」というエラーが出ます。

Set shpCanvas = Selection.ShapeRange(1)
Set CanItms = shpCanvas.CanvasItems
With CanItms.BuildFreeform(msoEditingCorner, 30, 20)
.AddNodes msoSegmentLine, msoEditingAuto, 50, 20
.AddNodes msoSegmentLine, msoEditingAuto, 50, 30
.ConvertToShape
End With

.docx文書では正常に実行されます。
互換モード文書では、なぜうまくいかないのでしょうか。
互換モード文書でこれを正常に実行させるにはどうすればよいでしょうか。
.docx文書では正常に実行できても、互換モードよりも描画に時間がかかるので、互換モードで実行したいのですが。よろしくお願いします。

投稿日時 - 2014-11-12 20:29:32

QNo.8822902

暇なときに回答ください

質問者が選んだベストアンサー

調べてみたところおよそ5行というのは余白の高さに相当する値ですね。
2013版では描画キャンバスの左上を原点として描画され、描画キャンバスからはみだす位置への描画でもエラーにならず描画されますが
互換モードだと計算方法がまったく違っていて、、
用紙の左上角を原点として描画され、
描画位置が描画キャンバス内に入っていないとエラーになりました。
(上・左余白の値+描画キャンバスの左上のtop,left値+キャンバス左上を起点としたときのフリーフォームのtop,left位置を指定しなければならない)
というわけで、互換モードだとページ設定を変えてもキャンバス内に描画されるようにコードを書かなくてはいけないので面倒です。 

投稿日時 - 2014-11-14 16:36:08

お礼

ありがとうございます。
互換モードでは、キャンバスをページ先頭部に置いて、かつ、ページ間を開いた状態で実行した時だけは、目的位置に描画されるようなので、当面はそのやり方で行くことにします。キャンバスをどの位置に置いても目的位置に描画されるようにするのは面倒そうなので。

投稿日時 - 2014-11-14 20:55:53

このQ&Aは役に立ちましたか?

13人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

キャンバスを選択してから実行すればどちらの形式でも実行できますし
選択していなければどちらの形式でもエラーになりますが
何か操作ミスしていませんか。
手動操作しないでということなら、キャンバスを選択するコートを追加しておけばいいのかもしれません。

投稿日時 - 2014-11-13 05:47:25

お礼

回答ありがとうございます。
こちらでは、互換モードの場合、きちんとキャンバスを選択してもエラーになります。
そちらでは互換モードでも出来たとのことですが、ひょっとすると、キャンバスを文書の先頭部に置いて実行されたのではありませんか。キャンバスを文書の先頭部や先頭部から5行以内の位置に置いて実行した場合は、こちらでも、エラーは出ず、一応、フリーフォームはキャンバスに乗りますが、コードで指定した位置からずれた位置に描画されます。キャンバスを文書先頭部から6行以上あけた位置に置いて実行した場合はエラーが出るようです。

投稿日時 - 2014-11-13 09:42:07

あなたにオススメの質問