【发布时间】:2017-11-13 21:29:30
【问题描述】:
我刚刚完成了我的第一个宏,但它似乎运行得非常慢,并且在几个循环之后它就死机了。在此之前我遇到了数据表示的问题,但我通过在第一行放置真实值来解决它。
宏的要点是每30秒在仪表板上显示不同的数据。
请在下面找到我的代码:
Public Sub Switch()
Do
With ActiveWorkbook.SlicerCaches("Slicer_country1")
.SlicerItems("NL").Selected = True
.SlicerItems("SP").Selected = False
.SlicerItems("GB").Selected = False
End With
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("XX").Selected = True
.SlicerItems("YY").Selected = False
.SlicerItems("ZZ").Selected = False
Application.Wait Now + TimeValue("00:00:30")
End With
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("XX").Selected = True
.SlicerItems("YY").Selected = False
.SlicerItems("ZZ").Selected = False
Application.Wait Now + TimeValue("00:00:30")
End With
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("XX").Selected = True
.SlicerItems("YY").Selected = False
.SlicerItems("ZZ").Selected = False
Application.Wait Now + TimeValue("00:00:30")
End With
Loop
End Sub
最近按时应用的解决方案,但它仅在最后一次调用时才能正常工作(我只得到想要的字段,在前 2 个其他按钮不会关闭),是否有任何解决方案可以在每次调用时只显示想要的值?
Dim CallNumber As Integer
Sub ScheduleChange()
Change
Application.OnTime Now + TimeValue("00:00:05"), "ScheduleChange"
End Sub
Sub Change()
CallNumber = CallNumber + 1
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("XX").Selected = (CallNumber = 1)
.SlicerItems("YY").Selected = False
.SlicerItems("ZZ").Selected = False
End With
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("YY").Selected = (CallNumber = 2)
.SlicerItems("XX").Selected = False
.SlicerItems("ZZ").Selected = False
End With
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("ZZ").Selected = (CallNumber = 3)
.SlicerItems("XX").Selected = False
.SlicerItems("YY").Selected = False
End With
If CallNumber = 3 Then
CallNumber = 0
End If
End Sub
再次嗨,我使用下面的代码,但宏仍然不会一次显示一个按钮,它会从第一个按钮转到第二个按钮而不取消选择前一个按钮,是否有任何命令强制它一次只显示一个值?调试显示未设置对象变量或 With 块变量。
Dim CallNumber As Integer
Sub ScheduleChange()
Change
Application.OnTime Now + TimeValue("00:00:05"), "ScheduleChange"
End Sub
Sub Change()
CallNumber = CallNumber + 1
With ActiveWorkbook.SlicerCaches("Slicer_Project1")
.SlicerItems("XX").Selected = (CallNumber = 1)
.SlicerItems("YY").Selected = (CallNumber = 2)
.SlicerItems("ZZ").Selected = (CallNumber = 3)
End With
If CallNumber = 3 Then
CallNumber = 0
End If
End Sub
【问题讨论】:
标签: vba performance excel