- 締切済み
選択範囲の座標値の抽出
Word文書で、現在選択している行範囲を、オートシェープで 囲みたいと思っています。しかし、選択範囲の座標値取得の仕方に 検討がつきません。座標以外でも囲める方法などありましたら、 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- taka108
- ベストアンサー率44% (8/18)
回答番号No.3のコードで、 Selection.EndKey Unit:=wdLine, Extend:=wdMove を Selection.MoveRight Unit:=wdCharacter, Count:=1 に 変更したらうまくいきました。 変更前は「END」キー、変更後は「→」キーを押すことに対応します。 「→」キーを押すと選択範囲の終了位置にカーソルが移動します。 「END」キーでは文末にカーソルが移動します。
- xls88
- ベストアンサー率56% (669/1189)
「行間の高さ」とはどういう意味で使われていますか? 上の行の文字と下の行の文字の間隔ですか? よく分かりませんが下記で取得出来る値のことでしょうか? MsgBox Selection.ParagraphFormat.LineSpacing 回答番号:No.3で提示したコードで選択範囲を矩形で囲むことができるようになっていると思います。 それでは駄目なのでしょうか? ただし、いろいろ不具合が発生します。 例えば、複数行を選択している場合、最終行の最終列位置から座標を取っています。 従って、中間行の文字列数が最終行のそれより大きい場合、枠内に文章が収まらない現象が発生します。 それと、選択範囲に最終行が含まれる場合も上手くないです。 まだ手を付けていませんが、改善に着手するつもりです。 Selectを使わずに、Rangeオブジェクトでやれないかな、とも考えているのですが、私のレベルでは難しいです。 Hamstar225さんが書かれたコードを拝見できないでしょうか。
- xls88
- ベストアンサー率56% (669/1189)
進んでいますか? サンプルです。試しに組んでみました。 Sub test1() Dim x As Double Dim y As Double Dim w As Double Dim h As Double 'カーソル位置座標取得 x = Selection.Information(wdHorizontalPositionRelativeToPage) y = Selection.Information(wdVerticalPositionRelativeToPage) Selection.EndKey Unit:=wdLine, Extend:=wdMove w = Selection.Information(wdHorizontalPositionRelativeToPage) Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, Count:=1 h = Selection.Information(wdVerticalPositionRelativeToPage) 'オートシェイプ挿入 ActiveDocument.Shapes.AddShape(msoShapeRectangle, x, y, w - x, h - y).Select Selection.ShapeRange.Fill.Visible = msoFalse Selection.Collapse End Sub
- xls88
- ベストアンサー率56% (669/1189)
取りあえず下記ページを紹介します。 [W_WD98] カーソル位置の情報を取得する方法 http://support.microsoft.com/kb/410949/ja
お礼
ご返信、ありがとうございます。 なんとなくですが、Helpを見てみると、 出来そうな気がします。 ただ、フォントサイズ、フォントのパターンで、 オートシェイプで囲う範囲を 計算しないといけないことに気づきました。 検討後、再挑戦してみます。 貴重なご意見、ありがとうございました。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 私の解釈が間違っていたらごめんなさいね! Wordのオートシェイプの座標値というのは私は考えた事がありません。 質問内容では本文をオートシェイプで囲って色を付けたいような感じに受け取れるので その方法になりますが・・・ オートシェイプを挿入時に図形描画キャンバスが出てくると思います。 Deleteキーを押してキャンバスを消し、オートシェイプを挿入 そして囲みたい文字の上にオートシェイプを移動させ、 右クリック → 順序 → テキストの背面へ移動 細かい移動とか大きさ調整はAltキーを押しながら行えばいいと思います。 余計なお世話かもしれませんが、私はオートシェイプで本分を囲うより テキストボックスを使う方が多いです。 以上、当方使用のWord2003での回答でしたが、 的外れの回答なら読み流してくださいね。m(__)m
お礼
返答、ありがとうございます。 説明不足で申し訳ありません。 Word文書の選択されている文字列範囲の座標を取得し、 マクロによって、オートシェイプで囲みたいと思っています。 tom04さんの操作も私自身、知りませんでしたので、 貴重な意見を頂き、ありがたいです。
お礼
度々のご返信、ありがとうございます。 少しずつ、進み、 x = Selection.Information(wdHorizontalPositionRelativeToPage) y = Selection.Information(wdVerticalPositionRelativeToPage) カーソルの位置にシェイプを追加することができました。 ただ、終了位置の座標がわからなくて、 サイズが設定できないという状態でした。 xls88さんの終了位置取得方法にて、再度、 作成してみたいと思います。 大変、助かりました。ありがとうございます。
補足
申し訳ありません、行間の高さを取得するには どうすれば宜しいのでしょうか? 行間いっぱいに長方形を描きたいので、 フォントサイズから取得したのでは、 対応できず、困っています。 よろしくお願いします。