Excel-VBA-Verwenden von pivot-Tabelle Daten in eine andere Arbeitsmappe
Den folgenden Sub fragt den Benutzer, wählen Sie eine generische Vorlage zu öffnen, dann fragt den Benutzer zum auswählen einer source-Datei (zum füllen der Vorlage). Die source-Datei enthält eine Reihe von Arbeitsblättern und pivot-Tabellen. Die sub wählt dann die Daten aus einer pivot-Tabelle und kopiert ihn in die Vorlage.
Ich muss die Quell-Datei eine variable gegen eine hartcodierte pivot-Tabelle als Quelle bc diesen Titel änderungen basierend auf die Benutzer-Auswahl.
Problem 1: wenn die Daten kopiert werden, es zeigt nur, REF! anstelle der tatsächlichen Daten (selbst wenn die Daten vorhanden ist).
'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"")"
[Gelöst] Problem 2. Ähnlich wie Problem 1 würde ich mag, um Dinge wie "TypeName" oder "Teamnamen" Variablen. Kann ich einfach deklarieren Sie Sie außerhalb der Sub-wie diese-
Dim TeamName As String
Sub()
TeamName = "Tigers"
End Sub
Vielen Dank für Ihre Hilfe!
- Sie sind vorbei-mit "SourceFile" ist es der name einer sub, einer string-variable, und ein workbook-Objekt. Verwenden Sie separate Variablen.
- Ich änderte den Namen der Sub. Danke für den Tipp! Das sagte ich möchte die Arbeitsmappe Ein, um eine variable "SourceFile", so dass in der pivot-Tabelle code, den ich ziehen kann, aus welchem Quellcode-Dateien der Benutzer ausgewählt hat. Weiter, ich möchte nicht auf hard-code "Eine Arbeitsmappe" in die pivot-Formel, denn es wird nicht immer aufgerufen werden, "Eine Arbeitsmappe"
SourceFile
sollte ein String sein, nicht eine Variante. Was genau funktioniert nicht für Sie?- Habe ich geändert Quelltext in einen String. Das genaue problem ist jetzt: Arbeitsmappe B (d.h. die Diagramm-Datei) füllt. Aber jeder Wert zeigt " #REF! ", selbst wenn es einen Wert in das SourceFile (aka Arbeitsmappe Ein). Ich denke, das hat etwas zu tun mit der variable SourceFile...
- Bitte, werfen Sie einen Blick auf meine Antwort und nur Dinge tun (= ersetzen von strings mit Variablen) Schritt für Schritt und es wird kein problem sein. In jedem Fall, sich auf eine so komplexe Formel ist eine sehr ineffiziente Umgang mit VBA. Einfache Formeln für spezifische Probleme können akzeptabel sein, aber nicht, wenn VBA-Objekte liefert viel bessere Informationen leicht. Einer der Gründe, sich von "reinen" Excel VBA ist eben halt mit ellenlangen Formeln.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es kein problem, definieren Sie Globale Variablen (außerhalb einer sub/function) in VBA. Was Sie vorschlagen, für
TeamName
wäre in Ordnung (schreiben der variable definieren, die auf der Oberseite des Moduls). Sie können diese variable verwenden, danach im inneren dieses Modul ohne Probleme. Zum Beispiel, indem du tust:Wie Sie sehen können, die Sie haben zu kümmern, die Zitate bei Bedarf (zu entkommen). Ein trickto Verwirrungen zu vermeiden ist, indem Sie ganz appart (""""), wie oben gezeigt.
Andere Frage, die ich wollte zu markieren, ist, dass Sie Zugriff auf alle Inhalte
PivotTable
direkt über VBA (Sie brauchen nicht die Formel in deiner Frage):Aus der
pivotTable
variable, die Sie haben vollen Zugang zu allen Inhalten der angegebenen PivotTable. Dies stellt die Art der Vorteile von VBA über Excel, die Sie maximieren sollten (wenn Sie fortfahren, sich auf Formeln, warum mit VBA überhaupt?).Ich denke, dass Sie implizit in meiner oben genannten Antwort, aber nur um sicher zu gehen, hier haben Sie meine Antworten auf Ihre konkreten Fragen:
&
s. Im Fall von Zitaten, die Sie haben, Ihnen zu entkommen, wie oben vorgeschlagen.TeamName
ist richtig und man sollte Sie nachahmen für andere (string -) variable, die Sie verwenden möchten, weltweit. Dennoch, beachten Sie, dass zu viele Globale Variablen ist kein guter Programmierstil; stützen wollen, auf die lokalen Variablen so weit wie möglich.