【问题标题】:Changing view to relevant cells after event change in dropdown list下拉列表中的事件更改后将视图更改为相关单元格
【发布时间】:2018-04-24 21:06:16
【问题描述】:

我对 VBA 非常陌生,我发现答案和教程信息量不大。

所以我要做的是检测下拉列表中选择的值是否发生变化,然后从那里将excel表的视图更改为相关单元格。

我的问题是很多示例 VBA 代码并没有真正附带解释。我现在拥有的是

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$A$1" Then
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With

    'SWITCH CASE CODE HERE

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End If

End Sub

但是我真的不知道EnableEventsScreenUpdatingCalculation 做了什么。

我想知道

  1. 如何准确检测下拉框中的事件变化并获取下拉框的值(我这里还在想Java)
  2. 如何将视图切换到选定的单元格

提前致谢!

编辑:更新的代码仍然无法正常工作...

Private Sub Worksheet_Change(ByVal Target As Range)

'Prints nothing
Debug.Print Target.Address

If Target.Address = "$A$1" Then

    'Prints nothing
    Debug.Print Target.Value

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With

    If Target.Value = "Goto B1" Then
        ActiveWindow.ScrollColumn = B
        ActiveWindow.ScrollRow = 1
    End If

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End If
End Sub

【问题讨论】:

  • 您需要Worksheet_Change 而不是Worksheet_SelectionChange。如果 dv 列表在 a1 中,那么目标将是 a1。

标签: vba excel


【解决方案1】:

您可以在电子表格中使用两种组合框;一个是表单元素,另一个您可以使用 Data Validation / List 选项创建。

如果组合是由 数据验证 形成的,那么即使我目前没有机会尝试,您的代码也可以工作。

如果您的组合是表单元素,那么您可以参考这个答案:Combobox Change Event

我并没有完全通过“切换视图”得到你需要的东西,但是如果你想从代码中定位到另一个单元格,你可以使用 Range("A1").Select 类型代码。

您也可以使用 Excel 的录制宏功能;玩转并查看 Excel 为您在 Excel 中的操作创建了哪些代码。然后你可以在你的实际代码中使用这些代码部分作为一种参考。

【讨论】:

  • 通过“更改视图”,我的意思是将当前可查看的单元格范围切换到我想要的单元格范围。一个普通的 Excel 文件从 A1 开始。切换视图基本上意味着自动滚动到我想看到的单元格。
  • 这基本上是在选择一个单元格,因此Range("A1").Select 代码将用于此目的。
  • 我已将上述 if-then 子句中的代码替换为 Range("A1").Select。单元格被选中,但视图没有改变。我仍然需要滚动。
  • A1 更改为您要激活的实际单元格引用,这只是一个示例。
  • 是的,那没用。正如我所提到的,单元格已被选中,但如果我现在正在查看 A400,屏幕不会向上滚动到所选单元格。它必须手动完成。不过我找到了解决方案。
【解决方案2】:

好的,我找到了问题的解决方案。

假设下拉选择框在单元格A1,

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With

    If Target.Value = "Goto B1" Then
        ActiveWindow.ScrollColumn = 2 'Column B
        ActiveWindow.ScrollRow = 1
    End If

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多