[[20040804175011]] 『実行時エラー91:オブジェクト変数が...』(ヤブーヒーヒー) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『実行時エラー91:オブジェクト変数が...』(ヤブーヒーヒー)

[実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。とでてしまう。]

初めて質問するので失礼なくかきこめるかどうか・・・。
以下のような「表の”×”を検索して削除する」というマクロを組んでみましたが,ちゃんと機能したあとエラーがでてしまいます。
ヘルプも,過去ログもみたのですが,どうしたらいいのかわかりません。
教えていただけると助かります。よろしくお願いします。

Sub バツを検索して削除()

    Dim mykekka As Range
    Dim myfirst As String
    With Range("A92:I181")
        Set mykekka = .Find(What:="×")
        If Not mykekka Is Nothing Then
            myfirst = mykekka.Address
            Do
                mykekka.ClearContents
                Set mykekka = .FindNext(after:=mykekka)
            Loop Until mykekka.Address = myfirst
        Else
            MsgBox "×はありません"
        End If
    End With
End Sub


 VBEでローカルウィンドウを表示させれば、すぐに分かります。
  
 mykekka が Nothing になったときに.Address で取得できないからです。
 ループの条件を変更してみて下さい。

  (INA)


なるほど,ローカルウィンドウはそうやって使うんですね。
まだ試していませんが,なんとかやってみます。

INAさん,ありがとうございました。
また,教えてください。(ヤブーヒーヒー)


 処理そのものが問題ではないのでしょうけれども、念のため書かせていただきます。  

 Sub Macro1()
     Selection.Replace What:="*×*", Replacement:=""
 End Sub

 ということで、同様の処理になるように思います。                  (LOOKUP)

なるほど,まだまだ勉強不足でした。参考にしたのがFindとFindNextだったもんで・・・。

ここのサイトは本当に勉強になります。(ヤブーヒーヒー)


 ヤブーヒーヒーさん、おはようございます。
 もう、解決されましたか?私がFindとループについてコメントするのは
 ものすごく抵抗があるのですが、汗^^;一応カキコしておきます。
 三パターン用意してみました。
 で、どうでしょう?
(夏目雅子似)

[[20040628231744]]『Findとループ』(夏目雅子似)

 Sub バツがある間ループ()
    Dim mykekka As Range
    With Range("A92:I181")
        Set mykekka = .Find(what:="×")
        If Not mykekka Is Nothing Then
            Do
                mykekka.ClearContents
                Set mykekka = .FindNext(after:=mykekka)
            Loop While Not mykekka Is Nothing
            MsgBox "×を削除しました。"
        Else
            MsgBox "×はありません"
        End If
    End With
 End Sub

 Sub バツが無くなるまでループ()
    Dim mykekka As Range
    With Range("A92:I181")
        Set mykekka = .Find(what:="×")
        If Not mykekka Is Nothing Then
            Do
                mykekka.ClearContents
                Set mykekka = .FindNext(after:=mykekka)
            Loop Until mykekka Is Nothing
            MsgBox "×を削除しました。"
        Else
            MsgBox "×はありません"
        End If
    End With
 End Sub

 Sub バツが無くなったらループを出る()
    Dim mykekka As Range
    With Range("A92:I181")
        Set mykekka = .Find(what:="×")
        If Not mykekka Is Nothing Then
            Do
                mykekka.ClearContents
                Set mykekka = .FindNext(after:=mykekka)
                If mykekka Is Nothing Then Exit Do
            Loop
            MsgBox "×を削除しました。"
        Else
            MsgBox "×はありません"
        End If
    End With
 End Sub


ありがとうございます,夏目雅子似さん。

すごいですね,同じ処理をするにも何パターンもあるんですね。皆様に教えていただいた5パターン全てが勉強になります。まだ,VBAをかじった程度なのでループは使ったことありませんが,今後の参考にさせていただきます。

(ヤブーヒーヒー)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.