2016-03-22 17 views
0

実行時エラー91が発生します。オブジェクト変数またはブロック変数が設定されていません。他のブックのCells.Findメソッドから行番号を返します

私は別のブックで探している文字列の行番号を返す必要がありますと私は見ている名前から6列離れて配置します。名前は文字列に少しばらつきがあります。なぜなら、私は012lookupとは対照的にCells.Findを使用することを好みました。

私は公共の範囲として無駄に探している範囲を設定しようとしました。両方のワークブックは開いていますが、Cells.Findメソッドは、検索している範囲のブックがアクティブな場合にのみ機能します。

FYI、listrangeは、アクティブブックの名前の範囲です。 clientlistは、検索中の他のワークブックの名前付き範囲です(開いているがアクティブではありません)。clientlist2は、その名前付き範囲の宣言されたバージョンです。

は、ここでは、コードスニペットです:

Public clientlist2 As Range 

Sub sortout() 

    Dim wkb As Workbook 
    Dim clientwks As Worksheet 
    Dim listrange As Range 

    Set wkb = Workbooks("workbook.xlsm") 
    Set clientwks = wkb.Sheets("Sheet1") 
    Set clientlist2 = clientwks.Range("clientlist") 
    Set listrange = Range("A6", Range("A6").End(xlDown)) 

    For Each a In listrange 

     a.Offset(0, 6).value = clientlist2.Cells.Find(a).Row 

    Next a 

End Sub 
+0

'設定しlistrange =レンジ( "A6"、レンジ( "A6")。終了(xlDown))を有効に'それから何シートをすべきですか?あなたは 'clientwks'と' clientlist2'について明確にしましたが、これは明確ではありません。 'Range()'の両方の使用の前にワークシートを置いてください。また、どの行がエラーを投げますか? – BruceWayne

+0

リスト範囲は、別のプログラムから生成された一時ブックのsheet1で開きます。エラーは、この行のForループにスローされます:a.Offset(0、6).value = clientlist2.Cells.Find(a).Row 私はそれを今すぐ試してみます。 – AssemblyRequired

+0

Bruceに感謝しますが、私はまだ同じ行でエラーを受けています。 – AssemblyRequired

答えて

0

私はエラーを回避するために、そしてそれが簡単にトラブルシューティングするために作るために二段階でのため、文の中の動作を行うためにあなたをお勧めします。

私はセルを見つけてそこから何か(または何らかの性質)をコピーしようとすると、最初にそれを変数に設定しようとしていました。それ以上のもの

あなたの場合、

Dim foundValue As Range 
For Each a In listrange 
    Set foundValue = clientlist2.Cells.Find(a) 
    If Not foundValue Is Nothing Then 
    a.Offset(0, 6).Value = foundValue.Row 
    End If 
Next a 

これにより、トラブルシューティングがより簡単になります。これにより、各段階で異なる変数の値を調べることができます。 Debug.Printまたはメッセージボックス。

また、モジュールの上部にOption Explicitを追加することをお勧めします。これにより、すべての変数を定義(暗く)する必要があり、コードの途中で間違ったスペルミスを防ぐことができます。

+0

ありがとうeirik、エラーを停止するのを助けたが、それは正確に一致する1つの名前にのみ働いた。他の名前には、clientlist2文字列に文字がありません。私は "*"&a "&"を使って回避しようとしましたが、うまくいきません。 – AssemblyRequired

+0

[Find'](https://msdn.microsoft.com/en-us/library/office/ff839746.aspx?f=255&MSPPError=-2147217396)にもっと多くの引数を提供するのに役立ちますか?例えば。'Lookat:= xlPart'を設定しますか?ファインドをどのような文字列に変換するかを知らなくても、ファインドの原因を知るのは少し難しいです。多分あなたはあなたの質問にいくつかの例を加えることができますか? @ user6100466 – eirikdaude

+0

私は検索がより簡単に行える書式設定規則を追加することができました。ここではうまくいかない例があります: "Something Finance LTD"と他のワークブックには、 "Something"としてリストされています。このように、データを取得していない多くの名前があります。 – AssemblyRequired

-2

ブックを非アクティブにしているときに問題が発生すると思いますので、方法を見つける前にアクティブにしてください。

ワークブック( "BOOK4.XLS")。

関連する問題