簡體   English   中英

Excel VBA在另一個工作簿中使用數據透視表數據

[英]Excel VBA Using pivot table data in another workbook

以下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外部聲明它們嗎?

    Dim TeamName As String

    Sub()

    TeamName = "Tigers"

    End Sub

謝謝你的幫助!

在VBA中定義全局變量(在任何子/函數之外)沒有問題。 您為TeamName提出的建議就可以了(在給定模塊的頂部編寫變量define)。 之后,您可以在此模塊內使用此變量,而不會出現任何問題。 例如,通過執行以下操作:

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")

pivotTable變量中,您可以完全訪問給定PivotTable的所有內容。 這代表了VBA優於Excel的優勢,您應該將其最大化(如果繼續依賴公式,為什么還要使用VBA?)。

我想它們在我前面提到的答案中是隱含的,但是為了確保這一點,這里有您對特定問題的回答:

  1. 將工作簿的名稱命名為A:我希望用戶選擇的文件稱為“ SourceFile”。 這不起作用...不確定原因...->如果您有需要的代碼,則可以通過插入變量來替換其上的字符串(例如:“ workbookA”)在正確的位置,並通過& s將其與其余位連接起來。 如果有引號,則必須按照上述建議將其轉義。
  2. 與第1期類似,我想制作“ TypeName”或“ TeamName”變量之類的東西。 我可以像這樣在Sub外部聲明它們嗎?->為TeamName提議的代碼是正確的,並且應該為要全局使用的任何其他(字符串)變量模擬它。 但是,請記住,過多的全局變量並不是一種好的編碼習慣; 打算盡可能地依賴局部變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM