如何获取另一Excel工作簿中切片器(Slicer)的对象数量?
问题修复指南
几个关键错误导致代码失效:
- Workbooks集合引用错误:
Workbooks(CurDir & "\" & Dir(...))用完整路径作为索引是无效的,Workbooks集合仅识别工作簿的文件名(不含路径)。 - 切片器缓存归属错误:
SlicerCaches是工作簿级对象,不属于工作表,你错误地通过wb.Sheets("Sheet")调用它,正确方式是直接通过工作簿对象访问。 - 错误处理掩盖问题:
On Error Resume Next会隐藏找不到切片器缓存、工作簿打开失败等关键错误,导致无法定位问题根源。
修复后的代码:
Sub slicerCount() Dim wb As Workbook Dim targetFileName As String Dim slicerCache As SlicerCache Dim itemCount As Long ' 获取第一个匹配*B*.xlsm的文件名 targetFileName = Dir(CurDir & "\*B*.xlsm") If targetFileName = "" Then MsgBox "未找到匹配的工作簿文件" Exit Sub End If ' 检查目标工作簿是否已打开 On Error Resume Next Set wb = Workbooks(targetFileName) On Error GoTo 0 ' 关闭错误捕获,避免后续问题被隐藏 ' 未打开则尝试打开 If wb Is Nothing Then Set wb = Workbooks.Open(CurDir & "\" & targetFileName) End If ' 直接通过工作簿获取切片器缓存(核心修复点) On Error Resume Next Set slicerCache = wb.SlicerCaches("ID") On Error GoTo 0 If slicerCache Is Nothing Then MsgBox "目标工作簿中不存在名为ID的切片器缓存" Exit Sub End If ' 获取切片器项数量 itemCount = slicerCache.SlicerItems.Count MsgBox "切片器项数量:" & itemCount End Sub
额外检查点:
- 确认目标工作簿的切片器缓存名称确实为
ID:打开目标工作簿,按Alt+F11进入VBA编辑器,在立即窗口输入?ThisWorkbook.SlicerCaches(1).Name,回车即可查看第一个切片器缓存的名称,核对是否与代码中的名称一致。 - 若存在多个匹配
*B*.xlsm的文件,Dir仅会返回第一个,如需处理多个文件,需循环调用Dir()直到返回空字符串。
内容的提问来源于stack exchange,提问作者Hyprium
相关产品推荐
相关产品推荐

