【问题标题】:Excel 2016 VBA backward compatibility issue to 2013Excel 2016 VBA 向后兼容问题到 2013
【发布时间】:2018-12-13 16:41:50
【问题描述】:

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

错误信息是:

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

调试亮点位于以If nmdrange 开头的第 9 行。
有没有办法让它向后兼容?

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

有两个命名范围不是指范围而是指单个单元格/值,例如:

【问题讨论】:

  • '它不运行' 既不是有效的错误代码也不是有用的错误描述。
  • 我在那里看不到任何明显的东西。当您说“它不运行”时,它会做什么?
  • “很遗憾,它不能在 Excel 2013 中运行” - 你能扩展一下吗?它会出错吗?有什么错误?它停在哪里?我看不出任何明显不适用于 2016 年的东西,但也许您可以为我们缩小范围。
  • 是的,我很抱歉 - 稍后会更新。
  • 抱歉,我花了一段时间才添加错误。 Application.EnableEvents = False可以解决这个问题吗?

标签: excel vba backwards-compatibility


【解决方案1】:

您是否有任何不引用工作表的命名范围?
命名范围也可以引用常量或公式 - 因此它可以称为 VAT 并具有 20% 的平面值

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

【讨论】:

  • 是的,有两个命名范围引用单个单元格/值。您是说这对 Excel 2016 和 2013 有影响吗?我会用截图更新问题。
  • 不,我问的是命名范围之一 Refers to 是否类似于 =20% 而不是 =Sheet1$A$1。不过,屏幕截图会回答这个问题(尽管我现在所在的地方屏幕截图被屏蔽了)。
  • 在这种情况下,没有。所有命名范围都引用一个工作表。
  • 啊,好的。那就是我的理论。也许我应该将答案添加为评论。回家后我得看看这张照片。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多