Excel 是否有可能使;SourceData:=&uquot;变量

Excel 是否有可能使;SourceData:=&uquot;变量,excel,vba,Excel,Vba,下面的代码来自一个注册的宏,用于创建透视表,我的意思是该代码可用于下一行,该行将出现在工作表“DONNEES”中,列将不会仅递增, 看起来我可以像“DONNEES!R1C1:R65500C16”那样设置它,但它是否更合适,我可以包含一个变量 `ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "DONNEES!R1C1:R1553C16", Version:=xlPivotTableVersi

下面的代码来自一个注册的宏,用于创建透视表,我的意思是该代码可用于下一行,该行将出现在工作表“DONNEES”中,列将不会仅递增, 看起来我可以像“DONNEES!R1C1:R65500C16”那样设置它,但它是否更合适,我可以包含一个变量

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

我想你误解了“
\u
”的作用。在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。

时间有点晚,但我遇到了一个类似的问题,也许我的解决方案对其他人有帮助

首先,微软的文档说:

传递范围时,建议使用字符串指定工作簿、工作表和单元格范围,或设置命名范围并将名称作为字符串传递。传递范围对象可能会导致意外的“类型不匹配”错误

因此,根据我的经验,传递一个range对象在大多数情况下都可以正常工作,但有时会返回类型不匹配。“出人意料”的结局让我采取了一种变通办法,这很简单。我发现只有当activesheet是数据表时,该方法才会接受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方法中的“destination”是一个范围对象,到目前为止没有任何问题

rng.Worksheet.Activate()
cache = ActiveWorkbook.PivotCaches().Create(1, rng.Address, 6)
pivot = cache.CreatePivotTable(destination, name, True, 6)