7

我是脚本新手,我正在尝试改进现有的宏。我录制了一个宏以删除重复项并将其添加到调用其他一些函数的 Main 函数中,但是当我添加我录制的宏时出现此错误:

Run-time error '1004': Unable to set the hidden property of the range class

代码看起来像

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim changed As Range
    Set changed = Intersect(Target, Range("J15"))
    If Not changed Is Nothing Then
        Range("A48:A136").EntireRow.Hidden = True
        Select Case Target.Value
            Case "Agriculture"
                Range("A48:A96").EntireRow.Hidden = False
            Case "Commercial"
                Range("A97:A136").EntireRow.Hidden = False
            Case "MDP"
                Range("A48:A61").EntireRow.Hidden = False
        End Select
        Range("J15").Select
    End If
End Sub
4

3 回答 3

8

一些可能的答案:

  • 您在所选单元格之一中有评论
  • 您有一些不使用文本调整大小的绘制对象
  • 您的工作表受到保护

当您在事件处理程序的第一行设置断点,然后按 F8 单步执行宏时,我假设它在该行崩溃:

Range("A48:A136").EntireRow.Hidden = True
于 2012-12-20T08:16:02.617 回答
1

这打破了事情

当人们说“您在一个选定的单元格中有评论”时,请记住评论可以在不同的列中。

如果评论框位于您要隐藏的列上方(例如,如果您将每一列隐藏在右侧,并且您在完全不同的列中有评论),这就是您将得到的错误。

如果您尝试手动隐藏该列,您将得到一个不同的令人困惑的错误,类似于“隐藏此列会将对象推离工作表”。

几列上方的注释框是对象。

^ 这可以为我节省大约 40 分钟的调试时间。

于 2021-06-02T22:40:21.450 回答
0

尝试这个 :)

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveWorkbook.Unprotect "password_here"
    Dim changed As Range
    Set changed = Intersect(Target, Range("J15"))
    If Not changed Is Nothing Then
        Range("A48:A136").EntireRow.Hidden = True
        Select Case Target.Value
            Case "Agriculture"
                Range("A48:A96").EntireRow.Hidden = False
            Case "Commercial"
                Range("A97:A136").EntireRow.Hidden = False
            Case "MDP"
                Range("A48:A61").EntireRow.Hidden = False
        End Select
        Range("J15").Select
    End If
ActiveWorkbook.Protect "password_here"
End Sub

这应该适合你:)

于 2015-11-13T11:42:19.273 回答