以下Sub要求用户选择要打开的通用模板,然后要求用户选择源文件(以填充模板)。源文件包含许多工作表和数据透视表。然后,sub从数据透视表中选择数据并将其复制到模板中。 我需要源文件是变量而不是硬编码数据透视表源bc此标题会根据用户选择而更改。
问题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”变量的事情。我可以像Sub-
一样在Sub之外声明它们 Dim TeamName As String
Sub()
TeamName = "Tigers"
End Sub
感谢您的帮助!
答案 0 :(得分:0)
在VBA中定义全局变量(在任何子/函数之外)没有问题。您对TeamName
的建议是没问题的(在给定模块的顶部写入变量define)。之后您可以在此模块中使用此变量而不会出现任何问题。例如,通过:
ActiveCell.FormulaR1C1 = _
"=GETPIVOTDATA("" Sum"",'[SourceFile]WorkbookA_PIVOT1'!R3C1,""Team/Branch""," & """" & TeamName & """" & ",""Row Descrption"",""RowName"",""Type"",""TypeName"")"
如您所见,您必须在需要时处理引号(以逃避它们)。如上所示,避免混淆的技巧就是将它们完全放入appart(“”“”)。
我想强调的其他问题是您可以直接通过VBA访问任何PivotTable
的所有内容(您不需要问题中的公式):
Dim pivotTable As pivotTable
Set pivotTable = ActiveSheet.PivotTables("PivotTable Name")
从pivotTable
变量,您可以完全访问给定数据透视表的所有内容。这代表了VBA优于Excel的优势,你应该最大化(如果你继续依赖公式,为什么要使用VBA?)。
我猜他们在我上面提到的答案中含蓄,但为了确保,在这里你能得到我对你具体问题的答案:
&
建议的代码是正确的,您应该为要全局使用的任何其他(字符串)变量模拟它。然而,请记住,拥有太多的全局变量并不是一个好的编码实践;打算尽可能地依赖局部变量。