Excel VBA - 仅使用 1 个按钮但多次单击即可循环浏览表过滤条件(切换按钮/多个条件)

问题描述 投票:0回答:1

VBA 初学者爱好者在这里寻求帮助 -

我有一个包含多列的表,其中一列(业务单位)有 4 个可能的条件(KB-L、KB-P、KB-C 和 KB-T)。我想在 Excel 中添加一个按钮,允许用户单击并循环浏览业务单位列中每个值的过滤器。

示例:

  • 第一次单击仅显示“业务单位”列中具有 KB-L 值的行。
  • 第二次单击仅显示“业务单位”列中具有 KB-P 值的行。
  • 第三次单击仅显示“业务单位”列中具有 KB-C 值的行。
  • 第四次单击仅显示“业务单位”列中具有 KB-T 值的行。
  • 第五次单击将完全删除过滤器并显示所有行,包括“业务单位”列中带有空白的行。

第 5 次单击后,整个/完整循环应在下一次单击时重复,从仅显示 KB-L 值开始。

非常感谢论坛可以提供的任何帮助!这是我未来会大量使用的东西,因为我假设这可能是一个适应性非常强的 VBA,将来可以用于许多事情。

我知道如何通过使用一段非常简单的代码来根据特定列中的条件隐藏行,但是我不确定如何循环它,以便在单击每个按钮时它会循环显示 5 种不同的可能性。我希望能够根据我的需要进行调整,但如果有更雄辩的方式来做到这一点,我洗耳恭听。

Sub Cycle_Business_Unit()

For Each cell In Range("I11:I99999")
 If cell.Value = "KB-L" Then cell.EntireRow.Hidden = True
Next cell

End Sub

谢谢大家, 德里克

excel vba
1个回答
0
投票

使用 Case 方法扩展您的代码

Dim click_count as Long

Sub Cycle_Business_Unit()

click_count = click_count + 1
If click_count = 6 Then click_count = 1
Range("I11:I99999").EntireRow.Hidden = False
  Select Case click_count
    Case 1
    For Each cell In Range("I11:I99999")
      If cell.Value = "KB-L" Then cell.EntireRow.Hidden = True
    Next cell
    Case 2
    For Each cell In Range("I11:I99999")
      If cell.Value = "KB-P" Then cell.EntireRow.Hidden = True
    Next cell
    Case 3
    For Each cell In Range("I11:I99999")
      If cell.Value = "KB-C" Then cell.EntireRow.Hidden = True
    Next cell
    Case 4
    For Each cell In Range("I11:I99999")
      If cell.Value = "KB-T" Then cell.EntireRow.Hidden = True
    Next cell
    Case 5
      'show all or something else
  End Select
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.