【发布时间】:2013-08-22 13:41:51
【问题描述】:
以下 Sub 要求用户选择要打开的通用模板,然后要求用户选择源文件(以填充模板)。源文件包含许多工作表和数据透视表。然后,子从数据透视表中选择数据并将其复制到模板中。 我需要源文件是一个变量而不是硬编码的数据透视表源,因为这个标题会根据用户的选择而变化。
问题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 之外声明它们吗 -
Dim TeamName As String
Sub()
TeamName = "Tigers"
End Sub
感谢您的帮助!
【问题讨论】:
-
您过度使用“SourceFile” 它是子名称、字符串变量和工作簿对象。使用单独的变量。
-
我已经更改了 Sub 的名称。谢谢你的提示!也就是说,我希望 Workbook A 成为变量“SourceFile”,以便在数据透视表代码中我可以从用户选择的任何 SourceFile 中提取。此外,我不想将“工作簿 A”硬编码到数据透视公式中,因为它不会总是被称为“工作簿 A”
-
SourceFile应该是字符串,而不是变体。 究竟是什么不适合你? -
我已将 SourceFile 更改为字符串。现在的确切问题是:填充工作簿 B(即图表文件)。然而,每个值都显示“#REF!”,即使 SourceFile(又名工作簿 A)中有一个值。我认为这与变量 SourceFile...
-
请看我的回答,一步一步做事(=用变量替换字符串),不会有任何问题。无论如何,依靠如此复杂的公式来处理 VBA 是一种非常低效的方法。针对特定问题的简单公式可能是可以接受的;但当 VBA 对象轻松提供更好的信息时,情况并非如此。从“纯 Excel”迁移到 VBA 的原因之一就是停止使用千里之外的公式。