在VBA中的列中查找特定单元格条目

时间:2017-10-20 20:20:20

标签: excel vba excel-vba

我正在创建用于审阅Excel工作表的用户表单。我需要搜索特定列以查看用户是否已查看该行。如果有,则单元格将填充“已审核”,如果尚未进行审核,则其中将包含“未审核”。

每个部门都有自己的列记录,无论Row是否已经过审核。即Dept1可能已经审查过这一行,而Dept2还没有。

我尝试过像

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

但是我收到了一个错误,不太确定它来自哪里。硬编码的“3”是因为我知道所有条目都从第三行开始,上面的所有内容都是标题。

我发现了一些不同的类似问题,但他们都假设每次搜索的列都是相同的。我的问题是我不想为每个部门编写代码,我希望比这更优雅。

1 个答案:

答案 0 :(得分:1)

这样的事情:

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

修改:

  • Range()现在采用正确构建的字符串参数;
  • Cells()现在有一个行号作为它的第一个参数,一个列表示为一个字符串作为它的第二个参数。

请注意,如果找不到搜索字符串,此代码将失败Object variable or With block variable not set。您可以通过将UnReviewedRow初始化为例如来处理这种情况。 0(零)并将On Error Resume Next置于查找呼叫上方,并将On Error Resume <either 0 or your original error handler's label>置于查找呼叫下方。然后,检查UnReviewedRow = 0并采取适当的行动。

始终将Option Explicit放在模块和类的顶部,并编译代码(Debug / Compile VBAProject)。发布时,请包含遇到的所有错误的文本。