我有以下代码来自一个注册的宏来创建一个数据透视表,我的这个代码可用于下一行,它将出现在表单“DONNEES”中,列不会仅增加, 它看起来像我可以设置为“DONNEES!R1C1:R65500C16”,但它可以更合适,我可以包含一个变量,
`ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"DONNEES!R1C1:R1553C16", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Sheet2!R1C1", TableName:="PivotTable1", DefaultVersion _
:=xlPivotTableVersion10`
提前谢谢, 的问候,
答案 0 :(得分:1)
Dim rng as Range
Set rng = ActiveWorkbook.Sheets("DONNEES").Range("A1:P1553")
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= rng, _
Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Sheet2!R1C1", TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion10
答案 1 :(得分:0)
我认为你误解了“_
”的作用。在VB中,“_
”表示代码行在下面的行中继续。与删除它们的声明相同:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="DONNEES!R1C1:R1553C16", Version:=xlPivotTableVersion10).CreatePivotTable TableDestination:="Sheet2!R1C1", TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
此外,当您看到类似“SourceType:=
”的内容时,这是VB允许非严格参数顺序的方式,通常函数的参数按特定顺序排列,您必须按此顺序传递它们,但是“X:=Y
”布局允许您告诉VB“Y的此参数值属于名为X的参数”。订单被忽视。 SourceType:="DONNEES!R1C1:R1553C16"
实际上只是说名为“SourceType
”的参数会收到值"DONNEES!R1C1:R1553C16"
是的,您可以在值的位置使用变量
MyVariable="DONNEES!R1C1:R1553C16"
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=MyVariable, Version:=xlPivotTableVersion10).CreatePivotTable TableDestination:="Sheet2!R1C1", TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion10
但是,您无法动态更改SourceType:= piece。
答案 2 :(得分:0)
时间有点晚,但是我偶然发现了一个类似的问题,也许我的解决方案对其他人有帮助。
首先,微软的文档说:
“传递范围时,建议使用字符串指定工作簿,工作表和单元格范围,或者设置命名范围并将名称作为字符串传递。传递范围对象可能会导致”类型不匹配”错误出乎意料。”
因此,根据我的经验,在大多数情况下,传递范围对象都可以,但是有时会返回类型不匹配的情况。 “出乎意料”的结局是让我寻求解决方法的原因,这非常简单。我发现仅当活动表是数据表时,该方法才会接受rng.Address,所以我这样做:
rng.Worksheet.Activate()
cache = ActiveWorkbook.PivotCaches().Create(1, rng.Address, 6)
pivot = cache.CreatePivotTable(destination, name, True, 6)
请注意,我正在python中使用pywintypes进行此操作,因此在VBA中可能是“ .Activate”而不带括号,并且声明和设置了对象变量,等等。
CreatePivotTable方法中的“目标”是一个范围对象,到目前为止没有任何问题。