【发布时间】:2018-08-23 14:07:48
【问题描述】:
我创建了一个包含多个工作表的 xlsx 文件,每个工作表至少有一个数据透视表,供同一张工作表上的某种图表使用。所有这些数据透视表都使用另一个名为“数据”的工作表中的相同数据。在我完成所有工作后,我开始录制一些宏,然后创建一些 VBA 代码,以便在我运行代码时更新数据透视表。所有这一切都很好,我制作了一个 xlsm 文件。
我决定是时候将所有东西都整合到 VB.Net 中了。我的代码执行一个存储过程并带回我成功放入“数据”表中的所有其他表可以访问它的正确位置的数据。 然后我从带有数据透视表的第一张表开始,这就是我的问题开始的地方。下面是来自 Excel 的有效代码:
Sub UpdatePreviousMonth(intRecordCount As Integer)
Sheets("Prev Month").Select
Range("A6").Select
ActiveSheet.PivotTables("ptPreviousMonth").ChangePivotCache _
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"C:\Users\me\Documents\[My Charts.xlsm]Data!R1C4:R" & CStr(intRecordCount) & "C4", Version:=xlPivotTableVersion15)
ActiveSheet.PivotTables("ptPreviousMonth").PivotFields("Names").AutoSort xlAscending, "Names"
End Sub
这是我在 VB.Net 中无法使用的代码:
Private Sub UpdatePreviousMonth(intRecordCount As Integer, xlWorkbook As Excel.Workbook, xlWorkSheets As Excel.Sheets, xlWorkSheetData As Excel.Worksheet)
Try
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkSheets("Prev Month"), Excel.Worksheet) ' This line works...
xlWorkSheet.PivotTables("ptPreviousMonth").ChangePivotCache _
(xlWorkbook.PivotCaches.Create(SourceType:=Excel.XlPivotTableSourceType.xlDatabase, SourceData:=xlWorkSheetData.Range("R1C4:R" & CStr(intRecordCount) & "C4"), Version:=xlPivotTableVersion15))
xlWorkSheet.PivotTables("ptPreviousMonth").PivotFields("Names").AutoSort(Excel.XlSortOrder.xlAscending, "Names")
Catch ex As Exception
End Try
End Sub
问题从整个 xlWorkSheet.PivotTables("ptPreviousMonth").ChangePivotCache 行开始。 xlWorkSheet.PivotTables("ptPreviousMonth").ChangePivotCache 警告“后期绑定分辨率;可能会发生运行时错误”。我在 xlWorkSheet.PivotTables("ptPreviousMonth").PivotFields("Names").AutoSort 行收到相同的警告。
而Version:=xlPivotTableVersion15 是一个例外'xlPivotTableVersion15' 未声明。由于其保护级别,它可能无法访问。
如您所见,我声明了 xlWorkSheet,所以我不知道为什么会收到警告,除非它与我无法识别的行的其余部分有关。
从我读到的 xlPivotTableVersion15 是可选的,所以我尝试在没有 Version:=xlPivotTableVersion15 的情况下运行代码并得到了
HRESULT 异常:0x800A03EC
这似乎意味着我缺少一个参数?
xlWorkSheetData 是数据所在的“数据”表。
有人可以帮忙吗?我觉得我很接近但找不到解决方案?
【问题讨论】: