【问题标题】:Excel VBA How to delete rows based on the value of a cell in a different worksheetExcel VBA如何根据不同工作表中单元格的值删除行
【发布时间】:2012-12-10 15:29:32
【问题描述】:

我正在尝试创建一个宏,该宏将根据多个条件自动从原始数据文件中删除行。我已经能够创建一个宏,该宏将删除某些列具有空白值的行,但我还需要删除日期等于或大于另一个工作表中特定单元格中包含的日期的行。我一直在互联网上,但没有找到一个解释来解决这个特殊情况或一个足够相似的解释让我弄清楚。我正在致力于自动化一些其他报告,这是我需要能够完成其中几个报告的最后一部分。这是我尝试使用的代码。

 Sub Deletedatesbeyondreportmonth()

 Application.ScreenUpdating = False

 With ActiveSheet

    .AutoFilterMode = False

    .Columns("E").AutoFilter Field:=1, Criteria1:=">= sheets("Sheet2").Range("C1")"

    .AutoFilter.Range.Offset(1, 0).EntireRow.Delete

    .AutoFilterMode = False

End With

End Sub

如果我将条件 sheets("Sheet2").Range("C1") 替换为指定单元格中包含的实际值,则宏可以工作,但是我需要它能够根据该单元格中包含的值运行。我玩过一些语法变化并收到不同的错误消息,但无法弄清楚。如果我按原样运行它,它会突出显示标准行上的 Sheet2 一词并说:

预期编译错误:语句结束

【问题讨论】:

    标签: excel criteria delete-row vba


    【解决方案1】:

    当您用引号封装 VBA 逻辑时,您实际上是对字符串进行硬编码,因此它将在过滤器中使用文本 Sheets("Sheet2").Range("C1"),而不是评估 Range 值。您需要使用以下内容:

    .Columns("E").AutoFilter Field:=1, Criteria1:=">=" & Sheets("Sheet2").Range("C1")
    

    【讨论】:

    • 非常感谢 Rob 和 Phillip!我已经能够让它工作,我确实有一个小的后续问题......如果我要使用的单元格值位于不同的工作簿中,那么正确的语法是什么?使用上面的示例,我尝试使用 Workbooks("Executive Summary 2012.xslm").Sheets("Summary By Mode").Range("Q2").Value 但它给了我一个错误
    • Workbooks("Executive Summary 2012").Sheets("Summary By Mode").Range("Q2").Value
    • @user1925693:确保为有用的答案投票,并通过单击复选标记接受实际答案。
    【解决方案2】:

    这可能是嵌套的双引号。尝试使用双双引号,例如:

    .Columns("E").AutoFilter Field:=1, Criteria1:=">= sheets(""Sheet2"").Range(""C1"")"
    

    例如here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 2013-11-19
      • 1970-01-01
      相关资源
      最近更新 更多