【问题标题】:Excel Hide/unhide textbox based on Slicer selectionExcel根据切片器选择隐藏/取消隐藏文本框
【发布时间】:2021-01-19 14:14:18
【问题描述】:

我正在尝试隐藏/取消隐藏多个文本框,具体取决于在数据透视表切片器上选择的内容;

如果选择 UK,则显示 TextBox 21 但隐藏 TextBox 22 和 TextBox 23 如果选择了 DE,则显示 TextBox 22 但隐藏 TextBox 21 和 TextBox 23 如果选择了 FR,则显示 TextBox 23,但隐藏 TextBox 21 和 TextBox 22

我尝试录制一个宏来获取对象的命名约定,然后编写了下面的 VBA 代码,但它不起作用。谁能告诉我哪里出错了(我使用的是 Excel 2019);

Sub Changetextbox()
    If ActiveWorkbook.SlicerItems("UK").Selected = True Then
            ActiveSheet.Shapes.Range(Array("TextBox 21")).Visible = msoTrue
            ActiveSheet.Shapes.Range(Array("TextBox 22")).Visible = msoFalse
            ActiveSheet.Shapes.Range(Array("TextBox 23")).Visible = msoFalse
    If ActiveWorkbook.SlicerItems("DE").Selected = True Then
            ActiveSheet.Shapes.Range(Array("TextBox 21")).Visible = msoFalse
            ActiveSheet.Shapes.Range(Array("TextBox 22")).Visible = msoTrue
            ActiveSheet.Shapes.Range(Array("TextBox 23")).Visible = msoFalse
    If ActiveWorkbook.SlicerItems("FR").Selected = True Then
            ActiveSheet.Shapes.Range(Array("TextBox 21")).Visible = msoFalse
            ActiveSheet.Shapes.Range(Array("TextBox 22")).Visible = msoFalse
            ActiveSheet.Shapes.Range(Array("TextBox 23")).Visible = msoTrue
    End If
End Sub

任何帮助将不胜感激。 谢谢

【问题讨论】:

标签: excel vba excel-2019


【解决方案1】:

试试这样的:

Sub Changetextbox()
    
    Dim si As SlicerItems, ws As Worksheet
    
    Set ws = ActiveSheet
    Set si = ActiveWorkbook.SlicerCaches("Slicer_ColA").SlicerItems ' edit to your slicer name
    
    ws.Shapes("TextBox 21").Visible = si("UK").Selected
    ws.Shapes("TextBox 22").Visible = si("FR").Selected
    ws.Shapes("TextBox 23").Visible = si("DE").Selected
    
End Sub

编辑:您可能需要检查切片器缓存的名称:

For Each sc In ActiveWorkbook.SlicerCaches
    Debug.Print sc.Name
Next sc

【讨论】:

  • 我尝试按如下方式使用它:但我收到以下错误:与此行相关的“对象不支持此属性或方法”:Set si = ActiveSheet.SlicerCaches("apslicer")。 SlicerItems 对切片器名称的编辑
  • ActiveWorkbook 不是ActiveSheet
  • 感谢您的帮助。我现在有Run-Time Error '5': invalid procedure call or argument 与同一行Set si = ActiveWorkbook.SlicerCaches("apslicer").SlicerItems
  • 我认为您的切片器缓存名称错误 - 请参阅上面的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
相关资源
最近更新 更多