質問です。
「すべての対象の置換をする」 というボタンをつくろうとしているのですが
まず、1つを置換するコード
Private Sub cmdReplace_Click(Index As Integer)
Dim InputStr As String
Dim SearchStr As String
Dim ReplaceStr As String
Dim SearchStart As Long
Dim FindStrStart As Long
SearchStr = txtSearch.Text
ReplaceStr = txtReplace.Text
'置換の処理
If frmMDI.ActiveForm.txtEdit.SelText = SearchStr Then
frmMDI.ActiveForm.txtEdit.SelText = ReplaceStr
SearchStart = frmMDI.ActiveForm.txtEdit.SelStart + Len(ReplaceStr) + 1
Else
SearchStart = frmMDI.ActiveForm.txtEdit.SelStart + 1
End If
'検索の開始
InputStr = frmMDI.ActiveForm.txtEdit.Text
FindStrStart = InStr(SearchStart, InputStr, SearchStr)
'検索結果の処理
If FindStrStart > 0 Then
frmMDI.ActiveForm.txtEdit.SelStart = FindStrStart - 1
frmMDI.ActiveForm.txtEdit.SelLength = Len(SearchStr)
ReplaceAllFlag = True
Else
MsgBox "文章の検索と置換が終りました。", vbInformation
ReplaceAllFlag = False
End If
frmMDI.ActiveForm.SetFocus
End Sub
で、こっちが全ての対象を置換するコード
Private Sub cmdReplaceAll_Click(Index As Integer)
'カーソル位置の初期化
frmMDI.ActiveForm.txtEdit.SelStart = 0
'置換の開始
ReplaceAllFlag = True
Do Until ReplaceAllFlag = False
cmdReplace_Click 'ここにエラーが出ます
Loop
End Sub
cmdReplace_Click 'ここにエラーが出ます
に対して「引数は省略できません」とでます。
自分的には、エラーが出るところのイベント名が「cmdReplaceAll_Click」
の為、「cmdReplace_Click」が「All」を省略しているとみなされ
このようなエラーが出ると思うのですが、参考書ではこれでできているので
疑問に思い質問しました。
コードの書き写しはないと思います。
低レベルな質問ですが、よろしかったら教えてください!
> cmdReplace_Click 'ここにエラーが出ます
cmdReplace_Clickは
> Private Sub cmdReplace_Click(Index As Integer)
なので引数が必要です。
>引数を省略なんてしていないんですが…。
思いっきり省略しまいますが。
なるほど!!!
たしかにしてますね…おはずかしい><
即効レスありがとうございました!
感謝ですm(_)m
>先のレスでBlueさんが回答していますが、
おそらく、
cmdReplaceAll_Clickがコントロール配列になっているので、
コピーして名前を変更したんでしょうなぁ〜
コントロール配列を意識できていないということは、
余りお勧めできないやり方ですが、
Call cmdReplace_Click(0)
で動くはずです。が、私ならば絶対にやら無いやり方です。
cmdReplace_Click(0)
で動きました!
Integerだから数字を入れようって安易な発想ですが…。
やっぱりよくなさそうですねorz
コントロール配列についてダッシュで調べてきました!
コントロール配列にするためには…一度コマンドボタン消してから作らないといけなさそうですね…。
コードはコピーでとっておけるし、作り直してみます!
助言ありがとうございました^^
作り直さなくても、プロパティウィンドウのIndexに0から順番に値を入れていけばOKのはず。
>一度コマンドボタン消してから作らないといけなさそうですね…。
コマンドボタンではなく、コマンドボタンのIndexプロパティの値を削除して
後は、
Private Sub cmdReplace_Click(Index As Integer)
を
Private Sub cmdReplace_Click
に変更すれば良かったと思う。
解決しました!
逆にコントロール配列になっていると、引数が省略できず、参考書のようなコードじゃエラーがでてしまうみたいです。
Indexと、引数の関係がわかっておらず・・上司に熱弁されましたorz
Cponさんの方法で、INDEXはいれることができました!
本当にいろいろ勉強になりました、ありがとうございますm(_)m
ああ・・いまになって上の
>自分的には、エラーが出るところのイベント名が「cmdReplaceAll_Click」
の為、「cmdReplace_Click」が「All」を省略しているとみなされ
このようなエラーが出ると思うのですが、参考書ではこれでできているので
疑問に思い質問しました。
が恥ずかしくてしかたないorz
ツイート | ![]() |