【问题标题】:How can I get my Macro to run on cell selection?如何让我的宏在单元格选择上运行?
【发布时间】:2014-11-06 17:37:58
【问题描述】:

我对编程并不陌生,但我对在 Excel 中使用宏并不陌生。我正在使用 Excel 2010,尝试运行以下宏:

Sub HideUnhideCells(ByVal Target As Range)
Dim keyCell As Range
Set keyCell = Range("C9")
Dim Cells1 As Range
Dim Cells2 As Range

'Call the function on C9 cell change
If Target.Address = "$C$9" Then

    'Make Data Source available for for DRG and UCR
    If keyCell.Value = "DRG" Or keyCell.Value = "UCR" Then
        Set Cells1 = Range("C33")
        Cells1.EntireRow.Hidden = False
    Else
        Set Cells1 = Range("C33")
        Cells1.EntireRow.Hidden = True
    End If

    'Make MSA special cells available if MSA is selected
    If keyCell.Value = "MSA" Then
        Set Cells1 = Range("B34:C35")
        Cells1.EntireRow.Hidden = False
    Else
        Set Cells1 = Range("B34:C35")
        Cells1.EntireRow.Hidden = True
    End If

    'Make UCR cells available if UCR is selected
    If keyCell.Value = "UCR" Then
        Set Cells1 = Range("B36:C39")
        Cells1.EntireRow.Hidden = False
    Else
        Set Cells1 = Range("B36:C39")
        Cells1.EntireRow.Hidden = True
    End If

    'Remove extra name cells for 1-file  and 2-file values
    If keyCell.Value = "DRG" Or keyCell.Value = "ICD-9" Or keyCell.Value = "NCCI_Edits" Or keyCell.Value = "UB04" Then
        Set Cells1 = Range("B21:C25")
        Set Cells2 = Range("B28:C32")
        Cells1.EntireRow.Hidden = True
        Cells2.EntireRow.Hidden = True
    ElseIf keyCell.Value = "ICD-10" Or keyCell.Value = "NDC" Then
        Set Cells1 = Range("B22:C25")
        Set Cells2 = Range("B29:C32")
        Cells1.EntireRow.Hidden = True
        Cells2.EntireRow.Hidden = True
    Else
        Set Cells1 = Range("B21:C25")
        Set Cells2 = Range("B28:C32")
        Cells1.EntireRow.Hidden = False
        Cells2.EntireRow.Hidden = False
    End If

End If
End Sub

我看过一些帖子和教程讨论这个问题,但我不明白为什么这不起作用。单元格 C9 是一个下拉列表,我希望运行此宏,以便根据列表中选择的内容显示/不显示单元格。但是,如果我给它参数(如上所示)我无法在 UI 中运行它,如果我不给它参数我只能手动运行它,这对我没有多大帮助。

现在,当我从 C9 下拉列表中选择某些内容时,什么也没有发生。谁能帮我弄清楚为什么?

【问题讨论】:

  • Worksheet_Change事件与If not intersect(target,range("C9")) is nothing then一起使用
  • 如前所述,使用Worksheet_Change 事件宏。这些进入工作表的代码表,而不是模块代码表。 (右键单击工作表的名称选项卡并为工作表代码表选择查看代码
  • 感谢 Siddharth Rout 和 Jeeped!不知道工作表的代码表,也不知道 Worksheet_Change 是一个特定事件。把两者放在一起,我们就赢了!你们当中有人可以把它作为答案,我可以将此问题标记为已回答吗?谢谢!

标签: vba excel


【解决方案1】:

对于Select Case 处理,您的代码看起来已经很成熟了,关于Worksheet_Change 事件宏还有几处要添加(评论太多了),所以我继续写了Sub Worksheet_Change 的草稿。我不确定我是否已经解释了所有If ElseIf Else End If,但也许您可以看到我正在尝试对此做什么。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$9" Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False

        On Error GoTo Whoa

        Rows("21:25").EntireRow.Hidden = False
        Rows("28:32").EntireRow.Hidden = False
        Rows("33:39").EntireRow.Hidden = True
        Select Case Target.Value
            Case "DRG"
                Rows("33").EntireRow.Hidden = False
            Case "MSA"
                Rows("34:35").EntireRow.Hidden = False
            Case "UCR"
                Rows("33").EntireRow.Hidden = False
                Rows("36:39").EntireRow.Hidden = False
            Case "DRG", "ICD-9", "NCCI_Edits", "UB04"
                Rows("21:25").EntireRow.Hidden = True
                Rows("28:32").EntireRow.Hidden = True
            Case "ICD-10", "NDC"
                Rows("22:25").EntireRow.Hidden = True
                Rows("29:32").EntireRow.Hidden = True
            Case Else
                'do nothing
        End Select
    End If
FallThrough:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume FallThrough
End Sub

如果您出于自己的目的转录此内容时遇到任何问题,请发回评论,我会尽力提供帮助。

【讨论】:

  • 哦,是的,太棒了!我对宏的功能非常陌生。谢谢!
  • @user2824249:为了您的reading乐趣
  • 已纠正。立即尝试:)
  • 快速提问:为什么你在三个案例中都有DRG
  • 我猜你将不得不重新编写选择案例。
猜你喜欢
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多