Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


81 / 308 ツリー ←次へ | 前へ→

【651】文の最後はどのようにして見つけるの? やっちゃん 09/10/2(金) 14:49 質問[未読]
【652】Re:文の最後はどのようにして見つけるの? りる 09/10/11(日) 16:16 発言[未読]
【653】Re:文の最後はどのようにして見つけるの? りる 09/10/11(日) 17:51 発言[未読]
【656】Re:文の最後はどのようにして見つけるの? やっちゃん 09/10/18(日) 5:33 お礼[未読]

【651】文の最後はどのようにして見つけるの?
質問  やっちゃん E-MAIL  - 09/10/2(金) 14:49 -

引用なし
パスワード
   一塊の文(中には空白行{改行だけの行}も含む)があって、其の先頭行に
カーソルを合わせておき、マクロでカーソルを下げてきて、空白行が5つ続けば、
そこで其のデータの文の最後であると判断し、カーソルを元の位置まで戻させる、
させるマクロで作ろうとしました。以下のように作りましたら、空白行が5つある
ときはうまくいくのですが、一塊の文によっては5つも空白がなく、それ以降になんら文も改行もない場合、うまく作動しません。どのようにしたら良いのかお教えください。
ワードのマクロは経験があまりなく、エクセル感覚で作成していますのでわかりにくいかもしれませんが。

 Selection.HomeKey ' Cursorを行頭へ
 Br = 0 ' ブランクの数
 Cr = 0 ' 先頭よりの行数
1 A = Selection.Text
 If Asc(A) = 13 Then ' 空白行か?
  Br = Br + 1
  If Br >= 5 Then ' 改行の数が5ならDataの最終とみなす
   GoTo 2
  End If
 Else
  Br = 0
  Dr = Cr ' 最終の文字のある行の先頭からの行数
 End If
 Selection.MoveDown Unit:=wdLine, Count:=1
 Selection.HomeKey ' Cursorを行頭へ
 Cr = Cr + 1
 GoTo 1
2 Selection.MoveUp Unit:=wdLine, Count:=Cr 'cursorをCr分上に移動
                     (元の位置にカーソルを戻す)

データ例
sdfkjf;d;kじゃs
dkkdkdkdk
(CR)
dskふぁdskf
dkだs       ------ここまでが必要なデータ
(CR) 
(CR)
(CR)
(CR)
(CR)         ------(CR)が5つあれば処理は出来るが3なら
               うまくいかない

【652】Re:文の最後はどのようにして見つけるの?
発言  りる  - 09/10/11(日) 16:16 -

引用なし
パスワード
   やっちゃん さん、こんにちわ。

>ワードのマクロは経験があまりなく、エクセル感覚で作成していますのでわかりにくいかもしれませんが。
文の最後はDocumentのEndで取得できますが、エクセル感覚で行くならLinesを使用したほうが感覚的につかみやすいかと思い、印刷ビュー(と単ページ限定)ですが、試してみました。

Sub Test()
  Dim tp, objR As Rectangle, LL As Long, Lmax As Long
  '表示→印刷レイアウト
  With Application.ActiveWindow
   tp = .View.Type '元のビュー
   If tp <> wdPrintView Then .View.Type = wdPrintView
   Set objR = .Panes(1).Pages(1).Rectangles.Item(1)
  End With
  '
  Lmax = objR.Lines.Count
  '下からループして、改行コードではないところを探す
  For LL = Lmax To 1 Step -1
   With objR.Lines.Item(LL).Range
     If Len(.Text) > 1 Then '改行のみの行以外を探す
      .Select '行選択
      Selection.Collapse Direction:=wdCollapseStart '選択解除
      Exit For
     End If
   End With
  Next
  '戻す
  With Application.ActiveWindow
   If tp <> .View.Type Then .View.Type = tp '元のビュー
  End With
End Sub

【653】Re:文の最後はどのようにして見つけるの?
発言  りる  - 09/10/11(日) 17:51 -

引用なし
パスワード
   追加。

>単ページ限定

>   Set objR = .Panes(1).Pages(1).Rectangles.Item(1)
Pagesの引数(ページ番号)を最終ページにしたら複数ページにも対応できるはずです。

【656】Re:文の最後はどのようにして見つけるの?
お礼  やっちゃん E-MAIL  - 09/10/18(日) 5:33 -

引用なし
パスワード
   りる様 返事が遅れまして申し訳ありません。
回答がなかなかつかなかったので、少しあきらめて何か別の方法を検討していました。本来ワードのVBAには能力が無いので良い方法は見つからないのですが。
 さて、提案いただいた方法でプログラムを改善したいと思っています。
でも残念ながら、提案いただいたプログラムの解析・意味を理解することが先決のような状態です。わからないことがありましたら、再度質問させてください。
 先ずはお礼まで。本当にありがとうございました。

81 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207135
(SS)C-BOARD v3.8 is Free