是否可以制作“SourceData:= _”变量

时间:2014-01-08 21:16:01

标签: excel-vba vba excel

我有以下代码来自一个注册的宏来创建一个数据透视表,我的这个代码可用于下一行,它将出现在表单“DONNEES”中,列不会仅增加, 它看起来像我可以设置为“DONNEES!R1C1:R65500C16”,但它可以更合适,我可以包含一个变量,

`ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "DONNEES!R1C1:R1553C16", Version:=xlPivotTableVersion10).CreatePivotTable _
    TableDestination:="Sheet2!R1C1", TableName:="PivotTable1", DefaultVersion _
    :=xlPivotTableVersion10`

提前谢谢, 的问候,

3 个答案:

答案 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方法中的“目标”是一个范围对象,到目前为止没有任何问题。