Word VBA質問箱 IV

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

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


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

【509】選択範囲の文字を検索したい ぱんくろうママ 06/10/31(火) 23:56 質問[未読]
【510】Re:選択範囲の文字を検索したい H. C. Shinopy 06/11/1(水) 21:05 回答[未読]
【513】Re:選択範囲の文字を検索したい H. C. Shinopy 06/11/3(金) 23:32 回答[未読]
【515】ありがとうございました ぱんくろうママ 06/11/6(月) 1:03 お礼[未読]

【509】選択範囲の文字を検索したい
質問  ぱんくろうママ  - 06/10/31(火) 23:56 -

引用なし
パスワード
   初めまして。
Wordのマクロの自動記録を行ないました。
操作については、題名にあるような事をするためです。

1.ある文字列をドラッグする
2.その文字列をコピー
3.検索のダイアログボックスを表示し、検索する文字列のところにコピーした文字を貼り付ける
4.検索を開始(上に向って)
5.出てきたら終了

という手順で、先に文字列をドラッグしておいて、2〜5までを自動記録しました。

しかし、違う文字列をドラッグしてこのマクロを実行すると、

・マクロの自動記録をしたときに選択していた文字列で検索してしまう
・選択範囲の検索が終了しました。検索項目は見つかりませんでした。、と出て自動記録した時に選択していた文字列すら見つからない。

という状況になります。

記録したマクロは以下の通りです

Sub Macro15()
'
' Macro15 Macro
' 記録日 2006/10/31 記録者
  
  Selection.Copy
  Selection.Find.ClearFormatting
  With Selection.Find
    .Text = "aaa"
    .Replacement.Text = ""
    .Forward = False
    .Wrap = wdFindAsk
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
  End With
  Selection.Find.Execute
End Sub

.Textのところに、記録をしたときに最初に選んだ文字列"aaa"が入ってしまいます。

選んでは検索し、出てきたらそこで作業、選んでは検索し…を繰り返したいのですが。

よろしくお願いします。

【510】Re:選択範囲の文字を検索したい
回答  H. C. Shinopy  - 06/11/1(水) 21:05 -

引用なし
パスワード
   「myText = Selection.Range.Text」でマクロ処理上の問題は解決します。
しかし、実際に使う上で問題になるのが起動方法です。

メニューバーの[ツール]から[マクロ]を選んで…というのは、
手間が掛かかって面倒です。

こうした作業が頻発するのでしたら、
マクロ起動用のボタンをツールバーに追加すると便利です。

1.メニューバーの[ツール]をクリックし、[ユーザー設定…]を選ぶ。
2.[ユーザー設定]ダイアログボックスの[コマンド]タブを選ぶ。
3.[コマンド]タブの中の左側 [分類]の「マクロ」をクリックする。
4.右側の[コマンド]の中から[MySearch]あるいは[Macro15]を探す。
5.[MySearch]あるいは[Macro15]をクリックして選び、
これをツールバー上(の御自分の好きな位置)にドラッグする。
  (ドラッグ&ドロップする)
→マクロ起動用のボタンがツールバー上にできる。
6.[閉じる]ボタンを押す。

これで、文字列を選択後、ツールバーのボタンを押すだけで、
マクロを実行することができます。

Sub MySearch()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 選択文字列一回検索処理
 Rem 記録者:
 Rem 言語:Word VBA
 Rem 機能:選択した文字列を検索する。
 Rem 注記...
 Rem  MySearchを起動して使用。
 Rem  Officeアシスタント(モードレス表示)による検索実行。
 Rem 第1版:2006/11/01:作成。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Assistant.Visible = True
 '
 With Assistant.NewBalloon
  .Animation = msoAnimationIdle
  .BalloonType = msoBalloonTypeButtons
  .Icon = msoIconAlertQuery
  .Button = msoButtonSetSearchClose
  .Heading = "選択 文字列" & vbCr & "検索 処理"
  .Text = "選択して下さい。"
  ' .Labels(1).Text = "あああ"
  .Mode = msoModeModeless
  .Callback = "MySearchBttn"
  .Show
 End With
End Sub ' MySearch *----*----*  *----*----*  *----*----*  *----*----*

Sub MySearchBttn(blln As Balloon, bttn As Long, bllnID As Long)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 各ボタン処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 If bttn = msoBalloonButtonClose Then ' [閉じる]ボタン時
  blln.Close
  Assistant.Visible = False
  Exit Sub
 End If
 '
 If Selection.Range.Text = "" Then
  MsgBox "文字列が選択されていません。"
  If Tasks.Exists(Name:="Microsoft Word") = True Then
   Tasks("Microsoft Word").Activate
  End If
  Exit Sub
 End If
 '
 'Assistant.Visible = True
 Select Case bttn
  Case msoBalloonButtonSearch
   Call Macro15
 End Select

 '
' If Tasks.Exists(Name:="Microsoft Word") = True Then
'  Tasks("Microsoft Word").Activate
' End If
  ' Assistant.Visible = True
End Sub ' MySearchBttn *----*----*  *----*----*  *----*----*  *----*----*

Sub Macro15()
 ' Macro15 Macro
 ' 記録日 2006/10/31 記録者
 ' 「myText」・Officeアシスタントに係る部分を追加しました。
 ' *----*----*  *----*----*  *----*----*  *----*----*
 Dim myText As String
 '
 myText = Selection.Range.Text
 '
 ' *----*----* Selection.Copy
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = myText ' *----*----* "aaa"
  .Replacement.Text = ""
  .Forward = False ' 文書の末尾から先頭へ検索
  .Wrap = wdFindAsk
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
 End With
 '
 If Tasks.Exists(Name:="Microsoft Word") = True Then
  Tasks("Microsoft Word").Activate
 End If
 '
 Selection.Find.Execute
End Sub

【513】Re:選択範囲の文字を検索したい
回答  H. C. Shinopy  - 06/11/3(金) 23:32 -

引用なし
パスワード
   実際の作業のことを考えてみたら、
もう一捻り必要でした。

選択範囲を指定して、[検索]ボタンを押すと、
指定した文字列を検索。
選択していない状態で、[検索]ボタンを押すと、
先に検索した文字列を再検索。
以下、修正版。

Sub MyFindOne()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 選択文字列単発検索処理
 Rem 記録者:
 Rem 言語:Word VBA
 Rem 機能:選択した文字列を検索する。
 Rem 注記...
 Rem  MyFindOneを起動して使用。
 Rem  Officeアシスタント(モードレス表示)による検索実行。
 Rem 第1版:2006/11/01:作成。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim blln As Balloon
 Dim bttn As Long
 Dim bllnID As Long
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Rem 初期処理を実行させる。
 bttn = -888
 Call MyFindOneBttn(blln, bttn, bllnID)
End Sub ' MyFindOne *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneBlln(myCbox As Variant)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem バルーン表示処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Assistant.Visible = True
 '
 With Assistant.NewBalloon
  .Animation = msoAnimationIdle
  .BalloonType = msoBalloonTypeButtons
  .Icon = msoIconAlertQuery
  .Button = msoButtonSetSearchClose
  .Heading = "MyFindOne" & vbCr & "選択 文字列" & vbCr & "単発 検索 処理"
  .Text = "文字列を選択して、[検索]して下さい。"
  .Checkboxes(1).Checked = myCbox
  .Checkboxes(1).Text = "検索方向:文書の先頭へ"
  .Mode = msoModeModeless
  .Callback = "MyFindOneBttn"
  .Show
 End With
End Sub ' MyFindOneBlln *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneBttn(blln As Balloon, bttn As Long, bllnID As Long)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 各ボタン処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Static myCbox As Variant
 '
 Select Case bttn
  Case -888
   Call MyFindOneInit(myCbox)
   Call MyFindOneBlln(myCbox)
   Exit Sub
  Case msoBalloonButtonClose ' [閉じる]ボタン時
   myCbox = blln.Checkboxes.Item(1).Checked
   blln.Close
   Assistant.Visible = False
   Exit Sub
 End Select
 '
 If Tasks.Exists(Name:="Microsoft Word") = True Then
  Tasks("Microsoft Word").Activate
 End If
 '
 Select Case bttn
  Case msoBalloonButtonSearch
   myCbox = blln.Checkboxes.Item(1).Checked
   Call MyFindOneExec(myCbox)
 End Select
End Sub ' MyFindOneBttn *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneExec(myCbox As Variant)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 検索処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myText As String
 '
 If Selection.Range.Text = "" Then
  With Selection.Find
   If myCbox = True Then
    .Forward = False ' 文書の先頭へ検索
   Else
    .Forward = True ' 文書の末尾へ検索
   End If
   .Execute ' 検索実行
  End With
  Exit Sub
 End If
 '
 myText = Selection.Range.Text
 '
 With Selection.Find
  .ClearFormatting
  .Text = myText
  .Replacement.Text = ""
  If myCbox = True Then
   .Forward = False ' 文書の先頭へ検索
  Else
   .Forward = True ' 文書の末尾へ検索
  End If
  .Wrap = wdFindAsk
  .Format = False
  .MatchCase = False
  .MatchWholeWord = False
  .MatchByte = False
  .MatchAllWordForms = False
  .MatchSoundsLike = False
  .MatchWildcards = False
  .MatchFuzzy = True
  .Execute ' 検索実行
 End With
End Sub ' MyFindOneExec *----*----*  *----*----*  *----*----*  *----*----*

Sub MyFindOneInit(myCbox As Variant)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 初期処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 If TypeName(myCbox) <> "Notihng" Then Exit Sub
 '
 myCbox = False ' 既定値
End Sub ' MyFindOneInit *----*----*  *----*----*  *----*----*  *----*----*

【515】ありがとうございました
お礼  ぱんくろうママ  - 06/11/6(月) 1:03 -

引用なし
パスワード
   ご回答の内容を、実際に参考にさせて頂いた結果、無事に動かすことができました。
また、仕事の効率も上がり、大変嬉しく思っています。

マクロの記述だけでは色々と限界があるのですね…
もっと勉強しなくてはと思いました。

またよろしくお願いします。

今回は本当にありがとうございました。

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