[[20110517172901]] 『マクロが動いたりエラーを返したりしているのです』(ところてん) ページの最後に飛ぶ

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

 

『マクロが動いたりエラーを返したりしているのですが・・・原因が解りません』(ところてん)

いつもお世話になっております。

以前検索するためのマクロを意見を参考に作成したのですが、
エラーを起こしたり、リセットをすると治って動いたりを繰り返します。
原因が判らずどうしてよいものか困っております。
教えていただけると幸いです。
現在は、似て非なる検索マクロと交互に動かしながら、リセットさせております。。。

Private Sub Sarch_Click()

 Dim Findans As Range
 Dim FindStr As String
 Dim myCol

'検索列の設定
myCol = "K"

'検索文字列の設定---------------------------
FindStr = TextBox1.Value '探す文字列
'検索文字列が入力されているかの確認
If FindStr = "" Then
'入力されていなければ、処理中止
MsgBox "空欄です。( ̄〜 ̄;)"
Exit Sub
End If

'検索----------------------------------------------------------------
Set Findans = Worksheets("振込表").Columns(myCol).Find(What:=FindStr, After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) '←ここが反転します
'検索結果の確認
If Findans Is Nothing Then
'ヒットしなければ、処理中止
MsgBox FindStr & " は、見つかりません。 Σ( ̄ロ ̄lll) "
Exit Sub
End If
'結果の表示
Findans.Activate

    gyoshaname = Findans.Value
    furikominame = Findans.Offset(0, -1).Value
    kouzaNo = Findans.Offset(0, -3).Value
    bankname = Findans.Offset(0, -9).Value
    brname = Findans.Offset(0, -7).Value
    kubunmei = Findans.Offset(0, -5).Value
    kubuncode = Findans.Offset(0, -4).Value
    TextBoxZ = Findans.Address

Set Findans = Nothing

End Sub

よろしくご指導お願いします


 どこかで見たようなコードですね
 たぶん
 >After:=ActiveCell
 これが原因ではないでしょうか?

 ActiveCellの次のセルから探すように指示していますが
 上のコードですと
 >myCol = "K"
 >Worksheets("振込表").Columns(myCol).Find・・・・
 ですから、K列を検索したいのですよね?
 で、ActivecellがK列に無い場合にActiveCellの次のセルがK列ではないので
 エラーになってしまいます。

 こんな場合、私はいつも

  With Worksheets("振込表").Columns(myCol)
      Set Findans = .Find(What:=FindStr, After:=.Cells(1), LookIn:=xlFormulas, LookAt:=xlPart, _
                          SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
  End With

 のように書きます。

 蛇足ですが
 >LookIn:=xlFormulas
 >LookAt:=xlPart
 は、本当によろしいのですか?
 ヘルプを見て確認してみてください。
 (momo)

早々のコメントありがとうございます。

すいません。色々参照し、組み合わせながら勉強しながら組んでいるのでみた事あるかもしれません(汗)
確かにLookInは要らなさそうですね。。。
LookAtは一部検索なので要ると思っていました。要らなかったですかね?

上記のコードだとそのまま連続で動いてくれないのですが、Nextを弄っていないのですがなぜでしょうか?After:=.Cells(1), だと1つで固定と言う事になりませんか?

例えば、K列に『青山、緑区、赤山、赤座、青海、青梅、黄海・・・』とあり"青"と検索を打ち込んだ場合、"青"で掛る物を検索表示してボタンを押すたびに次候補に移る・・・といった形にしたいのです。

一応検索に掛らないものはMsgで表示する形式になっていると思っていたのですが。。。。
すいません。教えを買うているのに出しゃばって注文までして。。。。

(ところてん)


 要る要らないではなく、必要です。
 Findメソッドは省略すると前回検索時のパラメータを引き継いでしまうので
 必ず指定するようにしてください。

 >LookAtは一部検索なので
 という事であれば、そのままで大丈夫です。

 >After:=.Cells(1), だと1つで固定と言う事になりませんか?
 .Cells(1)ですから、K列の1つめのセル つまりK1からという事になります。
 1行目から検索したいのであれば、最終行から検索すれば良いので
 .Cells(.Cells.Count)のようにします。

 >連続で動いてくれないのですが
 連続で動かすように書いていないからです。

 サンプルを掲示してみるので、新規ブックで以下のコードを試して動作を確認してください。

  Sub test()
  Dim Findans As Range
  Dim FindStr As String
  Dim FirstAddress As String

  Worksheets("Sheet1").Range("K1:K7").Value = _
      Application.Transpose(Array("青山", "緑区", "赤山", "赤座", "青海", "青梅", "黄海"))

  FindStr = "青"

  With Worksheets("Sheet1").Columns("K")
    Set Findans = .Find(What:=FindStr, After:=.Cells(.Cells.Count), _
                        LookIn:=xlFormulas, LookAt:=xlPart, _
                        SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

    If Findans Is Nothing Then
      MsgBox "見つかりません"
    Else
      FirstAddress = Findans.Address
      Do
        MsgBox Findans.Address & " セルが見つかりました"
        Set Findans = .FindNext(Findans)
      Loop Until Findans.Address = FirstAddress
    End If
  End With
  Set Findans = Nothing
  End Sub

 (momo)

コメント返信:

[ 一覧(最新更新順) ]


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