2016-06-27 13 views
0

私はこの機能をしばらく働いており、それを動作させるように見えることはできませんし、私の特定の問題を解決するのに役立つ投稿を見つけることもできませんでした。vba検索機能の変数

私が達成しようとしているのは、Sheet4のアクティブセルの左側に1つのセルであるDate値を使用して、Sheet4の列A:Gのいずれかにある可能性のある日付を見つけることです。

以下のコードは、私の検索で(1/1/16)のような静的な値があったときに働いていましたが、今は変数を使用しようとしています。私のwithステートメントの2行目では、静的な検索条件があったときにそれを選択していましたが、変数を追加すると「オブジェクト変数またはブロックが設定されていません」というエラーが表示されるので、それは今、ちょうど私のカーソルがどんなセルに入っていようとそれを選ぶようになります。これに関する助けがあれば、大歓迎です。

Sub test() 

Dim rFoundCell As Range 
Dim vDate As Variant 
Dim Expense As Worksheet 
Dim Data As Worksheet 

Set Expense = Sheet9 
Set Data = Sheet4 
Set rFoundCell = Range("A1") 
Set vDate = ActiveCell.Offset(0, -1) 


     Set rFoundCell = Data.Range("A:G").find(What:=vDate, After:=rFoundCell, _ 
      LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, MatchCase:=False) 

     Sheet4.Activate 

     With rFoundCell 
      ActiveCell.Select 
      ActiveCell.Offset(1, 0).Copy 
      Sheets("Expense Data").Select 
      Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Transpose:=True 
      ActiveCell.Offset(1, 0).Select 
     End With 
+1

「vDate」の種類は何ですか?文字列リテラル入力で動作する場合、 'As Variant 'ではなく' As String'を宣言してみましたか?また、 'rFoundCell'が' Nothing'であるケースを処理する必要があります。 'With'ブロックはランタイムエラー91で爆発します。@cyboashu悪いアドバイスでは、' Set' *値*、 'Set' *オブジェクトリファレンス*。 –

+0

が合意されました。私の最後にはテストしなかった。コメントは削除されました! – cyboashu

答えて

1
Set vDate = ActiveCell.Offset(0, -1) 

あなたがvDate As Variantを宣言しているため、このSet命令はRangeオブジェクトを指し示すオブジェクト参照を割り当てます。

Set文をドロップし、実際のデータ型とそれを宣言し、代わりに値を割り当て

Dim vDate As String 
vDate = ActiveCell.Offset(0, -1).Value 

Set rFoundCell = Data.Range("A:G").Find(...) 
If rFoundCell Is Nothing Then 
    Debug.Print "Not Found!" 
    Exit Sub 
End If 

'rFoundCell cannot be Nothing if we're here 
With rFoundCell 
    .Select 
    '... 
End With 
はので、私はそれの前でのActiveCellを追加し、それは今だけ作りますそれは私のカーソルがどんなセルにあるかを選択します。

まあ、それはActiveCellです。 .Select.Activateを使用せず、少なくとも暗黙のうちにActiveSheetActiveCellを参照することは避けてください。

Set rFoundCell = Range("A1") 

Rangeコールは、暗黙的にアクティブなワークシートを参照していること。

Set Expense = Sheet9 
Set Data = Sheet4 

あなたはExpenseSheet9の名前を変更する必要があり、かつDataの代わりにSheet4は、これらの参考文献のコピーを保持するための新しいオブジェクト参照を考え出します。プロジェクトエクスプローラでシートを選択し、F4キーを押して(name)プロパティを意味のあるものに変更します。