【问题标题】:VBA "Select Case" not working on the other worksheetVBA“选择案例”不适用于其他工作表
【发布时间】:2017-11-30 12:33:36
【问题描述】:

所以我的问题是:我在一个工作表(Sheet1)上使用了特定代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Range("B24")

    Case "Standard"
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = False

    Case "Medium"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case "High"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case Else
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = True

    End Select

End Sub

一旦 Sheet2 变得可见(基于上述),我将这段代码专门添加到 Sheet2 中:

Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Range("B14")

    Case "Medium"
        Rows("6:12").EntireRow.Hidden = True

    Case Else
        Rows("6:12").EntireRow.Hidden = False

    End Select

End Sub

问题在于由 =Sheet1!B24 组成的单元格 (Sheet2) B14 不与 Sheet2 上的代码交互,因此不会隐藏/取消隐藏行。我需要物理选择 =Sheet1!B24 并在其中单击 Enter,然后这些行被隐藏/取消隐藏。请告知为什么它不会自动发生。

PS。计算操作设置为自动

谢谢

【问题讨论】:

  • 我很难理解。因此,您更改了 sheet1 中的某些内容,然后根据单元格 B24 中的值执行一些操作,然后您期望发生什么?
  • 一切尽在代码中。基本上,如果 Sheet2 上单元格 B14 中的值发生更改,它应该执行某些操作(如上所述)。不幸的是它没有。相反,我需要手动激活单元格 B14 并单击 Enter 启动操作。

标签: vba


【解决方案1】:

公式不会触发“更改”事件。请改用Worksheet_Calculate 事件:

Private Sub Worksheet_Calculate()

    Application.EnableEvents = False

    Select Case Range("B24")

    Case "Standard"
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = False

    Case "Medium", "High"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case Else
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = True

    End Select

    Application.EnableEvents = True

End Sub

重要提示:注意在代码之前禁用事件 - 这是为了防止无限循环。

【讨论】:

  • 您好宏,我确实将 Sheet2 代码更改为 Worksheet_Calculate,现在我收到此错误:“编译错误:过程声明与具有相同名称的事件或过程的描述不匹配”
  • 删除 ByVal Target As Range 部分 - 计算事件不传递任何参数
  • 完美。有效。谢谢。 PS。您能推荐任何可以提高我的 VBA 技能的资源(书籍/网站)吗?
  • 我已经更新了我的答案——“中”和“高”也会产生相同的代码,因此您可以在案例语句中组合它们。 WRT 资源:在这里,cpearson.com、ozgrid.com 都是不错的网站——尽管有数百个论坛,所以看看什么对你有用。哦,这里还有一个 VBA 聊天室chat.stackoverflow.com/rooms/111528/vba-lounge
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2021-10-09
  • 2015-03-21
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
相关资源
最近更新 更多