2

这是我第一次使用宏。我在 B2 中创建了一个带有“是”和“否”选项的下拉菜单。

  • 如果用户选择“是”,第 10 行显示/第 11 行隐藏
  • 如果用户选择“否”,第 11 行显示/第 10 行隐藏

我使用了这段代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
If Range("B2") = Yes Then
    ActiveSheet.Rows("10:10").EntireRow.Hidden = False
    ActiveSheet.Rows("11:11").EntireRow.Hidden = True
ElseIf Range("B2") = No Then
    ActiveSheet.Rows("10:10").EntireRow.Hidden = True
    ActiveSheet.Rows("11:11").EntireRow.Hidden = False
End If
End If
End Sub

我在Sheet1 中创建了一个新模块,并将其放在那里。我将 excel 保存为Macro Enabled Tamplate,但是当我更改下拉列表时没有任何反应。

谢谢你的帮助!

4

2 回答 2

4

帮自己一个大忙,养成Option Explicit在你编写的每个 VBA 代码模块的顶部编写的习惯。

我还添加了评论,并解释了您需要的修订。

'this requires you to dimension all variables
'when you used '= yes' VBA thought you were saying
'the same as, = aVariable
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$2" Then
        If Range("B2").Value = "Yes" Then
            'You can reference the row directly on the same sheet
            'and do not need ActiveSheet
            Rows("10:10").EntireRow.Hidden = False
            Rows("11:11").EntireRow.Hidden = True
        ElseIf Range("B2").Value = "No" Then
            Rows("10:10").EntireRow.Hidden = True
            Rows("11:11").EntireRow.Hidden = False
        End If
    End If
End Sub

另请注意,这仅使用“是” - 使用“是”或“是”会导致问题。UCase如果以后想避免这些情况,可以使用如下方法:

        If UCase(Range("B2").Value) = "YES" Then
于 2013-06-05T16:20:54.343 回答
2
If Range("B2") = "Yes" Then

同样使用“否”选项

于 2013-06-05T15:32:27.263 回答