検索値が複数ある場合FINDNEXTを利用する時にエラー。。。。。

解決


菜菜  2005-05-31 23:43:35  No: 122085

検索値が複数ある場合にはFINDの関数を使いました。loopとFINDNEXTを利用する時に、2回目検索すると、検索結果がNOTHINGとなってるので、エラーメッセージは「オブジェクト変数またWITHブロック変数が設定されてません」でした。原因わからないですので、助けてください。
            With Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2))
            Dim 品名KeyWord     As Range
            Dim firstAddress    As String
                Set 品名KeyWord = .Find(what:="フランジ", LookIn:=xlValues)
                If Not 品名KeyWord Is Nothing Then
'                    Nrow = Application.WorksheetFunction.Match(品名KeyWord, Worksheets("明細_配管材料").Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)), 0)
                    firstAddress = 品名KeyWord.Address
                    
                    Do
                        Nrow = Application.WorksheetFunction.Match(品名KeyWord, Worksheets("明細_配管材料").Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)), 0)

                        '品名
                        Cells(prow, 2) = "ボルト・ナット"
                        '材質
                        For i = 1 To 4
                            SheetName = "IN-" & i
                            Set 材質KeyWord = Sheets(SheetName).Range("AQ27:AQ46").Find(what:=NOValue, LookIn:=xlValues)
                            If Not 材質KeyWord Is Nothing Then
                                Zrow = Application.WorksheetFunction.Match(材質KeyWord, Sheets(SheetName).Columns("AQ:AQ"), 0)
                                Cells(prow, 3) = Sheets(SheetName).Cells(Zrow, 29)
                                Exit For
                            End If
                        Next
                        '数量&口径の該当行列数
                        kValue = Cells(Nrow + 明細配管のクラスNO行数 - 1, 5) '口径サイズ
                        If kValue <> "" Then
                            Set 材質KeyWord = Sheets("ボルトナット形状").Columns("A:A").Find(what:=kValue, LookIn:=xlValues, lookat:=xlPart)
                            If Not 材質KeyWord Is Nothing Then
                                Krow = Application.WorksheetFunction.Match(材質KeyWord, Sheets("ボルトナット形状").Columns("A:A"), 0)
                            End If
                        End If
                        RValue = Cells(Nrow + 明細配管のクラスNO行数 - 1, 6)   'レーティング,Sch
                        If RValue <> "" Then
                            Set レーティンクKeyWord = Sheets("ボルトナット形状").Rows("1:1").Find(what:=RValue, LookIn:=xlValues)
                            If Not レーティンクKeyWord Is Nothing Then
                                Rcol = Application.WorksheetFunction.Match(レーティンクKeyWord, Sheets("ボルトナット形状").Rows("1:1"), 0)
                            End If
                        End If
                        '数量
                        Cells(prow, 9) = Sheets("ボルトナット形状").Cells(Krow, Rcol + 1)
                        '単位
                        If Cells(prow, 9) <> "" Then
                            Cells(prow, 10) = "本"
                        End If
                        '口径
                        Cells(prow, 5) = Sheets("ボルトナット形状").Cells(Krow, Rcol)
                        '仕様
                        If RValue = "JPI#150" Or RValue = "JPI#300" Then
                            Cells(prow, 4) = "ユニファイネジ 六角ボルト"
                        Else
                            Cells(prow, 4) = "メートルネジ 六角ボルト"
                        End If
                        prow = prow + 1
                        Set 品名KeyWord = Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)).FindNext(品名KeyWord)
                        
                    Loop While Not 品名KeyWord Is Nothing And 品名KeyWord.Address <> firstAddress

                End If
            End With


菜菜  2005-05-31 23:45:56  No: 122086

Set 品名KeyWord = Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)).FindNext(品名KeyWord)
この文で品名KeyWord がNOTHINGになって、 Loop While Not 品名KeyWord Is Nothing And 品名KeyWord.Address <> firstAddressへいくと、「オブジェクト変数またWITHブロック変数が設定されてません」が出てきました。

実は同じデータ4つあるのに。。。。。


菜菜  2005-06-01 18:58:19  No: 122087

with....endwith  の間にRangeのオブジェトをchangeすると、WITHブロック変数を破壊することをわかりました。
勝手にソースを掲示板に載せるのは失礼しました。しかし、原因を探す向きがわからない初心者にとっては、どうすればいいのか。


さるべーじ  2005-06-01 23:36:46  No: 122088

> 勝手にソースを掲示板に載せるのは失礼しました。
> しかし、原因を探す向きがわからない初心者にとっては、どうすればいいのか。

それは相談に乗る側にとっても、いつも悩みどころだったりします。

質問者自身が依存心からではなく、「それしか問題点を明確にする方法がない」と判断して
提示していることが文面から理解できる場合には、私はそれを否定しません。

しかし、「長いソースの提示即ち依存心の表れ」と判断しそれを好まない、
という方もいらっしゃいます。

どんな方にどう言われていくかは、ある意味運でしかないのかもしれません。

見知らぬ同士の文章によるコミュニケーションである以上、
やはりお互いに完全に理解できることは非常に難しく、
ある程度誤解や的外れな非難なども往々にしてあり得ます。

本当は、質問や相談を投げかける掲示板を絞り込み、
繰り返し会話していくことで自分自身をも理解してもらい、
交友関係を育てていくのがベストです。

「あの人のスキルならソース提示しか手がないよなー」
「あの人が質問してるんなら何とかしてあげたいなー」
と思ってもらえるようになればいいんですけどね。

質問に不慣れな方は、こういぅ掲示板を
「質問すれば誰かが回答をつけてくれる便利どころ」と認識しがちですが、
実は「自分よりもスキルの高い人間とコミュニケーションのチャンスが持てるところ」
だったりもします。

そのへんも頭の片隅に留めながら文章を書いていくと、
単なるQ&Aを超えていろいろ楽しくなったりするかもしれません。


菜菜  2005-06-02 00:18:06  No: 122089

さるべーじ  様
  ありがとうございました。質問者の気持ちを理解頂いて深謝です。
これから、問題点を明確できるまで、もっともっと質問します。


GOD  2005-06-02 00:35:23  No: 122090

> 勝手にソースを掲示板に載せるのは失礼しました。
> しかし、原因を探す向きがわからない初心者にとっては、どうすればいいのか。
>
ソースの提示は原因解明の有効手段だと思います。(但し、変わりにデバッグして
くれは勘弁^^;)
今回の場合、一行が長すぎる&コメントがない(前提条件でもどのようなものを作
成してるのかという説明がない)などで感情移入できないです。
他人のソースを読むときに感情移入できないとなんか書いてあるレベルになります
のでソースを提示して戴いてもそれで終わってしまいます。(単純なもの(数行)な
らそれでもいいのでしょうが・・・)
私も始めの方は見たのですが途中で諦めました。
あと質問自体も良く分からなかったです。(T.T)
Range、Cellsとか使ってるとこを見るとExcel?

If A And B then
↑はA、B共に式を必ず実行します。なので「品名KeyWord=Nothing」 でも
「品名KeyWord.Address」は実行されるので実行時エラーが出ます。
という回答を希望していたのではないですよね。(解決時のコメントを見ると)

>「あの人のスキルならソース提示しか手がないよなー」
>「あの人が質問してるんなら何とかしてあげたいなー」
> と思ってもらえるようになればいいんですけどね。
>
確かにそういうのはある時はありますね。^^
逆にあの人の質問はスルーしようとか。


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




  


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