2017-11-27 14 views
0

ブック2の.Find関数を使用してブック2のワークシートの数値を検索し、 "found"という範囲オブジェクトに設定します。VBA .Find()関数がExcelセルを見つけられない

実行時エラー '91':オブジェクト変数またはWithブロック変数が設定されていません。私はその数がその2番目のワークブックにあるという事実を知っていますが、私は見つけたくないと思います。面白いバグは、これを初めて実行するとうまくいくということです。しかし、ブック1を閉じてもう一度開くと、.Find関数はその番号をもう見つけられなくなります。

誰も私のコードで明らかな問題を次のように見ることができますか?

Dim found As Range 
Dim ecrNum As String 

Set wb = ThisWorkbook 
ecrNum = ThisWorkbook.ActiveSheet.Range("H5") 

'Opens ECR Log workbook 
Set ECRlog = Workbooks.Open("filepath") 
ECRlog.ActiveSheet.Unprotect ("x") 

'Resets Filters in the ECR Log 
If ECRlog.ActiveSheet.FilterMode Then 
ECRlog.ActiveSheet.AutoFilter.ShowAllData 
End If 

'Searches the ECR log for the specified ECR # 
Set found = ECRlog.ActiveSheet.Range("C:C").Find(What:=ecrNum, _ 
      LookIn:=xlValues, LookAt:=xlWhole) 

'Pushes info from ECR form to ECR Log 
ECRlog.ActiveSheet.Cells(found.Row, 5) = proj 
ECRlog.ActiveSheet.Cells(found.Row, 6) = model 
ECRlog.ActiveSheet.Cells(found.Row, 7) = ecn 
ECRlog.ActiveSheet.Cells(found.Row, 9) = dueDate 
+3

あなたはActiveSheetをあまりにも頼りにしています。関係するワークシートの名前は分かりませんか? – Jeeped

+1

'Workbooks.Open(" filepath ")'これは正しく表示されません。ファイルは実際に "ファイルパス"と呼ばれているのですか、それとも変数ですか?リテラル引数として使用しています。 – MoondogsMaDawg

+0

'ECRlog.ActiveSheet.Cells(found.Row、5)= proj'行でエラーが発生していると仮定していますが、あなたの質問が、 *持っていると思います。 – YowE3K

答えて

0

私はこの問題を無限にトラブルシューティングしてテストしており、原因を特定したと考えています。解決策は(私にとっては)識別するのが難しいですが、簡単な回避策があります。

ブック1がプログラムを実行しているのにブック2が既に開いている場合は、エラーが発生します。ワークブック2を閉じてプログラムを再実行すると、エラーは発生せず、すべて正常に動作します。だから、.find()コマンドが探している番号を見つけられないようにする読み書きの問題がなければなりません。

0

Worksheet.Rangeは、セルまたはセルの範囲を表すRangeオブジェクトを返します。私はあなたのコードの5行目の代わりにecrNum = ThisWorkbook.ActiveSheet.Range("H5").Valueを試してくださいと信じています。 Worksheet.Rangeプロパティの詳細here

関連する問題