引数を省略なんてしていないんですが…。

解決


肌水  2005-09-01 20:04:52  No: 124659

質問です。
「すべての対象の置換をする」  というボタンをつくろうとしているのですが

まず、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」を省略しているとみなされ
このようなエラーが出ると思うのですが、参考書ではこれでできているので
疑問に思い質問しました。
コードの書き写しはないと思います。
低レベルな質問ですが、よろしかったら教えてください!


Blue  2005-09-01 20:09:35  No: 124660

>    cmdReplace_Click  'ここにエラーが出ます   
cmdReplace_Clickは
> Private Sub cmdReplace_Click(Index As Integer)
なので引数が必要です。

>引数を省略なんてしていないんですが…。
思いっきり省略しまいますが。


肌水  2005-09-01 20:15:31  No: 124661

なるほど!!!
たしかにしてますね…おはずかしい><

即効レスありがとうございました!
感謝ですm(_)m


いな  2005-09-01 20:24:36  No: 124662

>先のレスでBlueさんが回答していますが、

おそらく、
cmdReplaceAll_Clickがコントロール配列になっているので、
コピーして名前を変更したんでしょうなぁ〜

コントロール配列を意識できていないということは、
余りお勧めできないやり方ですが、
Call cmdReplace_Click(0)

で動くはずです。が、私ならば絶対にやら無いやり方です。


肌水  2005-09-01 21:59:17  No: 124663

cmdReplace_Click(0)
で動きました!

Integerだから数字を入れようって安易な発想ですが…。
やっぱりよくなさそうですねorz

コントロール配列についてダッシュで調べてきました!
コントロール配列にするためには…一度コマンドボタン消してから作らないといけなさそうですね…。
コードはコピーでとっておけるし、作り直してみます!
助言ありがとうございました^^


Cpon  2005-09-01 23:05:28  No: 124664

作り直さなくても、プロパティウィンドウのIndexに0から順番に値を入れていけばOKのはず。


いな  2005-09-01 23:37:36  No: 124665

>一度コマンドボタン消してから作らないといけなさそうですね…。
コマンドボタンではなく、コマンドボタンのIndexプロパティの値を削除して
後は、
Private Sub cmdReplace_Click(Index As Integer)

Private Sub cmdReplace_Click
に変更すれば良かったと思う。


肌水  2005-09-01 23:48:54  No: 124666

解決しました!
逆にコントロール配列になっていると、引数が省略できず、参考書のようなコードじゃエラーがでてしまうみたいです。
Indexと、引数の関係がわかっておらず・・上司に熱弁されましたorz

Cponさんの方法で、INDEXはいれることができました!
本当にいろいろ勉強になりました、ありがとうございますm(_)m

ああ・・いまになって上の
>自分的には、エラーが出るところのイベント名が「cmdReplaceAll_Click」
の為、「cmdReplace_Click」が「All」を省略しているとみなされ
このようなエラーが出ると思うのですが、参考書ではこれでできているので
疑問に思い質問しました。
が恥ずかしくてしかたないorz


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加