Excel 2016 VBA到2013年的向后兼容性问题

时间:2018-12-13 16:41:51

标签: excel vba backwards-compatibility

我有一个在Excel 2016中创建的简单VBA代码,它根据用户是否输入“是/否”来隐藏其他工作表中的某些行。不幸的是,它不能在Excel 2013中运行。

错误消息是:

  

运行时错误'1004'应用程序定义的错误或对象定义的错误。

第9行中的调试突出显示以If nmdrange开头。
有什么办法可以使其向后兼容?

Sub Worksheet_Change(ByVal Target As Range)
    Dim nmdrange As Name
    Dim Row As Range

    If Not Intersect(Target, Range("screener1")) Is Nothing Then
        'Input data sheet
        With Sheet4
            For Each nmdrange In ThisWorkbook.Names
                If nmdrange.RefersToRange.Parent.Name = .Name Then '***ERROR HERE***
                'Loop over benefits
                .Range(nmdrange.RefersTo).Rows.EntireRow.Hidden = (.Range(nmdrange.RefersTo).Cells(1, 1).Value = "No")
                End If
            Next nmdrange
        End With

        With Sheet5
            For Each nmdrange In ThisWorkbook.Names
                If nmdrange.RefersToRange.Parent.Name = .Name Then 
                'Loop over benefits
                .Range(nmdrange.RefersTo).Rows.EntireRow.Hidden = (.Range(nmdrange.RefersTo).Cells(1, 1).Value = "No")
                End If
            Next nmdrange
            'Hide in summary table
            For Each Row In .Range("sum_b1").Rows
                Row.Rows.EntireRow.Hidden = (Row.Rows.Cells(1, 1).Value = "No")
            Next Row
        End With

    End If
End Sub

有两个命名范围,它们不引用范围而是单个单元格/值,例如: enter image description here

1 个答案:

答案 0 :(得分:0)

您是否有不引用工作表的命名范围?
命名范围也可以引用常量或公式-因此可以称为VAT,并且具有固定值20%

当循环到达此命名范围时,将找不到父工作表,因为它没有工作表。