Excel VBA在其他工作簿中使用数据透视表数据

以下Sub要求用户select要打开的通用模板,然后要求用户select一个源文件(以填充模板)。 源文件包含许多工作表和数据透视表。 然后子从数据透视表中select数据并将其复制到模板中。 我需要源文件是一个variables与硬编码的数据透视表源bc这个标题根据用户的select而改变。

问题1:当数据被复制时,只显示REF! 而不是实际的数据(即使数据存在)。

'Open Generic Report to populate with data Dim GenericFolderLocation As String MsgBox "Please select the generic porfolio template..." GenericFolderLocation = "C:\Users\user.name\Desktop" ChDrive GenericFolderLocation SelectedFile = Application.GetOpenFilename( _ fileFilter:="Excel Files (*.xls*), *.xls*", MultiSelect:=False) Workbooks.Open (SelectedFile) Set test = ActiveWorkbook Dim SourceFolderLocation As String Dim FileName As String Dim SourceFile As String MsgBox "Please select the data source file..." SourceFolderLocation = "C\Users\user.name\Desktop" ChDrive SourceFolderLocation SourceFile = Application.GetOpenFilename( _ fileFilter:="Excel Files (*.xls*), *.xls*", MultiSelect:=False) Workbooks.Open (SourceFile) Set wkbk = ActiveWorkbook test.Activate 'Test1 'Select empty cell in Chart template Range("C28").Select 'Populate with pivot table data from sourceFile ActiveCell.FormulaR1C1 = _ "=GETPIVOTDATA("" Value"",'[wkbk]ActCost_PIVOT'!R3C1,""Team"",""Field1"",""Row Descrption"",""Row1"",""Type"",""DataPoint1"")" 'Repeat for next cell Range("C27").Select ActiveCell.FormulaR1C1 = _ "=GETPIVOTDATA("" Value"",'[wkbk]CRActCost_PIVOT'!R3C1,""Team"",""Field1"",""Row Descrption"",""Row1"",""Type"",""DataPoint2"")" 

[已解决]问题2.与问题1类似,我想使“TypeName”或“TeamName”variables。 我可以像这样在Sub之外声明它们 –

  Dim TeamName As String Sub() TeamName = "Tigers" End Sub 

谢谢你的帮助!

在VBA中定义全局variables(在任何子/函数之外)没有问题。 你对TeamNamebuild议是好的(在给定模块的顶部写入variablesdefine)。 之后你可以在这个模块中使用这个variables,没有任何问题。 比如通过做:

 ActiveCell.FormulaR1C1 = _ "=GETPIVOTDATA("" Sum"",'[SourceFile]WorkbookA_PIVOT1'!R3C1,""Team/Branch""," & """" & TeamName & """" & ",""Row Descrption"",""RowName"",""Type"",""TypeName"")" 

正如你所看到的,如果需要的话,你必须照顾报价(以逃避)。 避免混淆的一招是把它们完全贴上去(“”“”),如上所示。

我想强调的其他问题是,您可以直接通过VBA访问任何PivotTable所有内容(您不需要在您的问题中的公式):

  Dim pivotTable As pivotTable Set pivotTable = ActiveSheet.PivotTables("PivotTable Name") 

pivotTablevariables您可以完全访问给定数据透视表的所有内容。 这代表了VBA优于Excel的优点,您应该最大化(如果继续依赖公式,为什么要使用VBA?)。

我猜他们是隐含在我前面提到的答案中,但只是为了确定,在这里你可以回答你的具体问题:

  1. 制作工作簿的名称A变体:我希望用户select的文件被称为“SourceFile”。 这是行不通的…不知道为什么… – >如果你有一个代码工作,你可以用一个variablesreplace一个string(例如:“workbookA”),只需插入variables在正确的位置,并通过& s将其与剩余的位连接起来。 在引用的情况下,你必须按照上面的build议逃避它们。
  2. 与问题1类似,我想将“TypeName”或“TeamName”variables设置为“ 我可以像这样在Sub之外声明它们吗?>你为TeamNamebuild议的代码是正确的,你应该为其他想要全局使用的(string)variables来模拟它。 不过,要记住,有太多的全局variables不是一个好的编码习惯; 打算尽可能依靠局部variables。