[[20081027145728]] 『実行時エラー91・オブジェクト変数またはwithブロ』(まき) ページの最後に飛ぶ

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

 

『実行時エラー91・オブジェクト変数またはwithブロック変数の件』(まき)

 いつも本webを参考にさせて頂いております。

 今回上記エラーが発生しており、数日間考えておりますが、私レベルでは解決出来ません
 でしたのでご伝授願います。(本エラーについては色々有るのですが。。。。)

 現在下記VBAで書いております。非常に長いので途中省略しています。

 行いたいのは、指定されたセルに"×"が有るか無いかを検索したいだけです。×が含まれ
 ていた場合には、resultを-1と代入して次の工程に進みたいと考えております。

  
Private Sub 予約セーブ_Click()
 
'−−(途中省略)−−−−
 
Dim MyRange As Integer
 
'−−(途中省略)−−−−
 
    Range(Cells(y, x1), Cells(y2, x1)).Select '予約開始と完了日を選択/ちゃんと選択出来た
    MyRange = Selection.Find(What:="×", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate'※ここでエラーを表示
    Range("A20") = MyRange '確認の為A20にステータスを表示、-1ならば予約が入っている
    If MyRange <> -1 Then
        '予約日程日を○から×に変更する
        Selection.Replace What:="○", Replacement:="×", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    MsgBox "指定されて期間で予約を入れました。", 16, "レンタル管理"
    Else '10/27時点のデバッグの為ここに入れているがこの先の動作がokならば下段に移行
    MsgBox "指定されて期間は既に予約が入っています。", 16, "レンタル管理"
    End If
'−−(途中省略)−−−−
End Sub

Dim MyRange As Integer部をStringに変更すると、エラー表示部のMyRange =""となって

しまいます。Integerだと"0"(×が無い時)となります。

お手数ではございますが、本内容について教えて下さい。

以上よろしくお願い致します。


 MyRangeを Activateってどうゆう事なのでしょう?と疑問に思うのは私の勘違いかな。
 値を入れたいのではないですか? .Valueで。
 (こぎつね)


    MyRange = Selection.Find(What:="×", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate'※ここでエラーを表示
                               ^^^^^^^^
                  ↑
              対象があっても無くても選択するように書いてあります。
              結果は、選択できた場合は、Trueで数値がただと-1
              対象が無い場合、選択できないのでエラーになります。
    だんだん説明するのがしんどくなってきたので簡単に
  Activate 要りません。
   Range型の変数にセットしてセットされたかどうかで結果を判定する。
  ヘルプにも書いてあると思うし、検索すればたくさん例題があると思います。
   BJ

こぎつね様、BJ様

早速のご連絡有り難うございました。両名様が言われる通り)".Activate"を取り除きました。しかし、

上記のエラーメッセージのままでした。。。。そこで考え方を変えて、Activeセル内に"×"が何個有る

かと言うCOUNTIFを使い0個なら次のステップに行く様に見直しました。本VBAは下記の通りです。

一応同VBAにした所、目的通り動く様になりましたので(上記不具合は気になりますが)よしとしました。

    Range(Cells(y, x1), Cells(y2, x1)).Select '予約開始と完了日を選択/ちゃんと選択出来た
'    MyRange = Selection.Find(What:="×", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
    MyRange = Application.CountIf(Selection, "×")
    Range("A20") = MyRange '確認の為A20にステータスを表示、-1ならば予約が入っている

    If Range("A20") = 0 Then
        '予約日程日を○から×に変更する
        Selection.Replace What:="○", Replacement:="×", LookAt:=xlWhole, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    MsgBox "指定されて期間で予約を入れました。", 16, "レンタル管理"
    Else '10/27時点のデバッグの為ここに入れているがこの先の動作がokならば下段に移行
    MsgBox "指定されて期間は既に予約が入っています。", 16, "レンタル管理"
    End If

マクロを始めたばかりなので、色々ご迷惑をお掛けしました。また、両名様の敏速なご連絡に感謝します。

また何か有りましたら、よろしくお願い申し上げます。

PS: BJ様、先日はおまけのご連絡有り難うございました。ご指摘通り記述し直しました。


コメント返信:

[ 一覧(最新更新順) ]


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