2017-10-20 7 views
0

Excelシートを見直すためのユーザーフォームの作成に取り組んでいます。特定の列を検索して、ユーザーが既に行を見直したかどうかを確認する必要があります。持っていれば、セルは「レビュー済み」で満たされますが、まだレビューされていない場合は「レビューされていません」と表示されます。VBAの列に特定のセルエントリを見つける

各部門には、行がレビューされたかどうかにかかわらず、独自の列ロギングがあります。私。 Dept1が行を見直した可能性がありますが、Dept2はまだ確認していません。

私は

With Sheets("ECR") 
     UnReviewedRow = .Range(DepartmentReviewColumn:DepartmentReviewColumn).Find(what:="Not Reviewed", after:=.Cells(DepartmentReviewColumn, 3)).Row 
    End With 

のようなものを試してみた。しかし、それはしかしから来るのWHERE私は、かなり確実ではないエラーを取得しています。ハードコードされた「3」は、すべてのエントリが3行目から始まり、上記のすべてがヘッダであることがわかっているからです。

似たような質問がいくつか見つかりましたが、検索対象の列が毎回同じであるとみなしています。私の問題は、私は各部門のためにこれをコード化したくないということです、私はそれより少しエレガントになりたいと思います。このような

+0

セルは行、列ではない列、行 – QHarr

+1

'.Range(DepartmentReviewColumn:DepartmentReviewColumn)'は問題のようです。 'DepartmentReviewColumn'の価値は何ですか? –

+1

またDepartmentReviewColumnを文字列と仮定し、正しく連結する必要がありますか? DepartmentReviewColumn& ":"&DepartmentReviewColumn – QHarr

答えて

1

何か:

With Sheets("ECR") 
    UnReviewedRow = .Range(DepartmentReviewColumn & ":" & DepartmentReviewColumn).Find(What:="Not Reviewed", After:=.Cells(3, DepartmentReviewColumn)).Row 
End With 

修正がなさ:

  • 範囲は()正しく構築された文字列引数を取ります。
  • Cells()は最初の引数として行番号を持ち、2番目の引数として文字列として表される列を持つようになりました。

検索文字列が見つからない場合、このコードはObject variable or With block variable not setで失敗することに注意してください。 UnReviewedRowを初期化することで、この状況を処理できます。 0(ゼロ)にして、Find呼び出しの上にOn Error Resume Nextを置き、Find呼び出しの下にOn Error Resume <either 0 or your original error handler's label>を入れます。次に、UnReviewedRow = 0であるかどうかを確認し、適切に処理します。

常にOption Explicitをモジュールとクラスの先頭に置き、コードをコンパイルします(Debug/Compile VBAProject)。投稿時に、発生したすべてのエラーのテキストを含めます。

関連する問題