マンガでよめる痔のこと・薬のこと

こんにちは。

Word2007において、
「選択範囲にある、全ての段落の、先頭文字を削除する。」
という処理を行うVBAマクロを作成しようとしています。
このマクロは、選択範囲に対して連続で行いたいので、
マクロ実行後に、範囲選択が解除されていない状態である必要があります。
このマクロを記述しようと、自分なりに考えたVBAコードは以下の通りです。
------------------------------------------------------------
Sub 選択範囲の先頭文字を削除する()
'選択範囲にある、全ての段落の先頭文字を削除する。

Set Selection_Range = Selection.Range
'次のForループで範囲選択がなくなるので、Rangeオブジェクトで処理範囲を固定している。

For x = 1 To Selection_Range.Paragraphs.Count

Dim str As String
str = Selection_Range.Paragraphs(x).Range.Text

Selection_Range.Paragraphs(x).Range.Text = Right(str, Len(str) - 1)

Next

Selection_Range.Range.Select

End Sub
------------------------------------------------------------

このマクロを、例えば
abc
def
ghi
jkl
という範囲を選択して実行すると、
abc
def
ghi
jkl
となり、
abc
def
ghi
だけが選択された状態になります。
しかし、本来期待している動作を考えると、マクロを実行した後に、
abc
def
ghi
jkl
が選択されているようにしたいのです。。

以上の件について、何か良い方法を知っておられる方がいらっしゃれば、是非教えて頂きたいと思います。
では、よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

2010版なので違っていたらすみません。



2010版だと単にコードのミスのようにしか思えないエラーになります。
rangeを取り除けば1文字削除されるだけで元の範囲が選択されます。
1回目だけあらかじめ選択しておけば、その後は繰り返し実行しても次々に1文字が減っていくだけです。
 Selection_Range.Range.Select
End Sub
  ↓
Selection_Range.Select
End Sub
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

御提案された通り、Selection_Range.Range.Selectを、
Selection_Range.Selectに変更すると上手く行きました。

せっかくなので、この際お聞きしたいのですが、
段落の先頭文字を削除する時に、僕はRight関数を使って
str = Selection_Range.Paragraphs(x).Range.Text
Selection_Range.Paragraphs(x).Range.Text = Right(str, Len(str) - 1)
としたのですが、もっと簡単に削除する方法はありますでしょうか?

恐れ入りますが、よろしくお願い致します。

お礼日時:2012/08/18 19:07

>段落の先頭文字を削除する時に、僕はRight関数を使って



Mid(str, 2) です。
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。

Midという関数の存在は知りませんでした。
すごく便利ですね。
おかげでやりたいことができるようになりました。

お礼日時:2012/08/21 00:08

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング