需要VBA代码来在Excel单元格中显示多个切片器select

这是我第一次使用VBA。 我需要在excel电子表格中显示切片器select。 每张纸上有15-20个切片,最多有50个可能的select,所以我不想使用立方体代码在每个单元中显示一个select。 如果可能的话,我希望它们在一个单元格中用逗号分隔(或返回“全部”或“无”)。

以下是我通过对本网站和其他网站进行研究而拼凑出来的内容,并试图自己对其进行编辑(所以很可能是一团糟)。

我放弃寻找和寻求帮助! 如果你能指点我一个简单的“速成课程”的VBA基础网站,我也会很感激。 谢谢。

Public Function GetSlicerItems() Dim cache As Excel.SlicerCaches Set cache = ThisWorkbook.SlicerCaches("Slicer_YR_MNTH_CD1") Dim sItm As Excel.SlicerItem Dim ICt As Long For Each sItm In cache.SlicerItems If sItm.Selected = True Then GetSlicerItems = GetSlicerItems & sItm.Name & ", " ICt = ICt + 1 If sItm.HasData = False Then ICt = ICt + 1 End If Next If Len(GetSlicerItems) > 0 Then If ICt = cache.SlicerItems.Count Then GetSlicerItems = "All Items" Else GetSlicerItems = Left(GetSlicerItems, Len(GetSlicerItems) - 2) End If Else GetSlicerItems = "No items selected" End If End Function 

第一个一般性build议,
使用F8和SUB来逐行testing您的代码,并观察窗口以查看可变内容
谷歌的“VBAdebugging”
使用option explicit模式来检查你的variablestypes

用它,你可以很容易地发现什么是错的。
例如我发现, cache有错误的types。
您只需通过ThisWorkbook.SlicerCaches("Slicer_YR_MNTH_CD1")select一个ThisWorkbook.SlicerCaches集合的ThisWorkbook.SlicerCaches("Slicer_YR_MNTH_CD1") ,那么它应该是:

 Dim cache As Excel.SlicerCache 'not SlicerCacheS 

现在你有你的目标caching在variablescache

为了确保你不要调用你的函数recursion,我build议使用一个临时variables来进行任何操作。
例如Dim sSlicerItems as String

即时通讯不知道这个if / else语句的正确逻辑,但无论如何,您更正的代码可能看起来像:

 Public Function GetSlicerItems() As String Dim sSlicerItems As String Dim cache As Excel.SlicerCache Set cache = ThisWorkbook.SlicerCaches("Slicer_YR_MNTH_CD1") Dim sItm As Excel.SlicerItem Dim ICt As Long For Each sItm In cache.SlicerItems If sItm.Selected = True Then sSlicerItems = sSlicerItems & sItm.Name & ", " ICt = ICt + 1 If sItm.HasData = False Then ICt = ICt + 1 End If Next If Len(sSlicerItems) > 0 Then If ICt = cache.SlicerItems.Count Then sSlicerItems = "All Items" Else sSlicerItems = Left(sSlicerItems, Len(sSlicerItems) - 2) End If Else sSlicerItems = "No items selected" End If GetSlicerItems = sSlicerItems End Function 

对于所有切片器或者只有一个切片器的切片器,使用这个循环切片器示例https://stackoverflow.com/a/20486330/2519073和.parent属性(其工作表) SlicerCache项目
也许你会需要更多的SlicerCache属性为您的解决scheme。
检查https://msdn.microsoft.com/en-us/library/office/ff822652.aspx