首页 > 解决方案 > VB代码不影响报表,如何解决?

问题描述

Sub ProfitLoss_Refresh()
Dim PLRow As Long
Dim LastTransRow As Long
Dim LastResultsRow As Long
Dim AcctRow As Long
With Sheet1
    .Range("B7:I99999").ClearContents 'Clear Existing Report
    LastTransRow = Sheet2.Range("B99999").End(xlUp).Row 'Last transaction row

    Sheet2.Range("P3:Q3").ClearContents 'clear prev criteria
    Sheet2.Range("w3:aa99999").ClearContents 'clear prev results
    If .Range("e3").Value <> Empty Then Sheet2.Range("p3").Value = ">=" & .Range("E3").Value Else: Sheet2.Range("p3").Value = ">=01/01/2000" 'from date

标签: excelvba

解决方案


假设您是您发布的代码的一部分是不执行的部分,我仔细研究了工作表的管理方式。事实上,我重写了您的代码以使其更易读(但没有引入更改)。

Sub ProfitLoss_Refresh()

    Dim PLRow           As Long
    Dim LastTransRow    As Long
    Dim LastResultsRow  As Long
    Dim AcctRow         As Long
    
    With Sheet2
        LastTransRow = .Range("B99999").End(xlUp).Row       ' Last transaction row
        .Range("P3:Q3").ClearContents                       ' clear prev criteria
        .Range("w3:aa99999").ClearContents                  ' clear prev results
    End With
    
    With Sheet1
        .Range("B7:I99999").ClearContents                   ' Clear Existing Report
        If .Range("e3").Value <> Empty Then
            Sheet2.Range("p3").Value = ">=" & .Range("E3").Value
        Else
            Sheet2.Range("p3").Value = ">=01/01/2000"       ' from date
        End If
End Sub

您使用 CodeNames 来处理工作表。如果它们不存在,您可能会抱怨错误消息,并且由于您不这样做,我必须假定它们确实存在。因此,我可以发现您的代码没有任何问题。

因此,这可能是您的期望。您似乎正在设置高级过滤器。您没有向我们展示过滤器的应用位置,但过滤器标准指向潜在问题。如果 Range("E3").Value 是一个日期,它的格式不太可能与“01/01/2000”等价。检查 E3 是正确的日期(数字)还是确实是像“01/01/2000”这样的字符串。还要检查您要过滤的数据是否具有真实日期(数字)或虚假日期(字符串)。阅读 Excel 如何处理日期以及如何过滤日期。


推荐阅读