很久以前,我曾经使用过 vb(作为 Visual Studio pkg 的一部分),而一份新工作让我在业余项目中使用 VBA 进行了一些工作。我不会说我是新手船,但我仍然在重新学习我以前做过的很多事情(更不用说,结合我在学习 VB 时没有涉及到的 excel 特定部分)在视觉工作室)
我已经在另一个项目中通过 vba 完成了几个数据透视表,但是我现在有一个让我难过的特定项目。
我一直在重复使用 VBA Excel 参考书中列出的一些数据透视表的代码,并且它一直运行良好。但是在这个特定的工作簿中,在工作表上按下了一个按钮,该按钮在传递一些变量的同时调用一个函数。一切通常都很好而且花花公子,但是当我尝试创建缓存时,我收到一个错误,告诉我我有一个不匹配错误?据我了解,在创建数据透视缓存时,字符串和变体可以作为源数据传递,但是之前多次重复下面的代码,直到现在我都没有遇到任何问题。
Private Function createPivotTable(ByRef sheetName As Variant, ByVal sheetNum As Integer)
Dim DataRange As Range
Dim pivotTableCache As PivotCache
Dim pivotTableReport As PivotTable
ActiveWorkbook.Worksheets("EXAMPLE SHEET").Activate
Range("A1").Select
Set DataRange = Selection.CurrentRegion
Worksheets.Add.Name = sheetName
Set pivotTableCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, _
SourceData:=DataRange)
Set pivotTableReport = pivotTableCache.createPivotTable(TableDestination:=ActiveWorkbook.Worksheets(sheetName).Range("A1"), _
TableName:="PVR")
....
所以我基本上被卡住了。我在这里找到了另一个围绕类似问题跳舞的线程。评价最高的评论确实解决了一个问题,因为当我将它作为字符串沿范围位置传递时,我不再有不匹配的问题,但是当我尝试创建实际表本身时,我一直收到一个 1004 错误告诉我我需要选择多行数据(从我可以解释的内容来看 - 可悲的是,错误代码的 msgbox 切断了这一行,这很有趣哈哈)。但是,我已经仔细检查过,选择确实抓住了我的整个表格(所有 6 列和 1000 行)。
任何帮助或指向正确方向将不胜感激。
*验证; 我将 sheetName 作为变体而不是字符串传递,因为我使用输入框要求用户命名工作表,并且作为故障保险,将输入框的句柄尺寸标注为变体允许我检查用户是否已取消操作(然后返回值 false 而不是空白字符串)。