Fragen, ob Sie mit einem VBA-Problem helfen können. Ich pieced die folgenden, ohne wirklich zu wissen, zusammen, was ich tat:Importieren von Daten von .csv in Excel-Dokument mit VBA
Sub Import_Raw_Stripe_data()
Dim fileDialog As fileDialog
Dim strPathFile As String
Dim strFileName As String
Dim strPath As String
Dim dialogTitle As String
Dim Tworkbook As Workbook
Dim Sworkbook As Workbook
dialogueTitle = "Select File to Import"
Set fileDialogue = Application.fileDialog(msoFileDialogFilePicker)
With fileDialogue
.InitialFileName = "L:\Downloads"
.AllowMultiSelect = False
.Filters.Clear
.Title = dialogueTitle
If .Show = False Then
MsgBox "No file selected."
Exit Sub
End If
strPathFile = .SelectedItems(1)
End With
Set Sworkbook = Workbooks.Open(fileName:=strPathFile)
Set Tworkbook = ThisWorkbook
End Sub
Welche, soweit ich in Excel einen Dateidialog kann sagen öffnet, ermöglicht es einem Benutzer, ein Dokument zu wählen, und öffnet sie dann.
Was Ich mag würde tun, ist der folgende:
1) einen Dateidialog öffnen und eine CSV-Datei auswählen, um Daten aus zu importieren (vollständig) in eine XLSM Stammdatei (mit mehreren Blättern)?.
2) Wählen Sie bestimmte Spalten aus der .csv (Spalte A, Q, R und S in diesem Fall), kopieren Sie sie und importieren Sie sie in das zweite Blatt der Master-Excel-Datei mit dem Titel "Raw Stripe Data".
Jede Hilfe in der Angelegenheit würde sehr geschätzt werden.
Update: Ich schaffte den folgenden Code zu finden:
Sub load_csv()
Dim fStr As String
With Application.fileDialog(msoFileDialogFilePicker)
.Show
If .SelectedItems.Count = 0 Then
MsgBox "Cancel Selected"
Exit Sub
End If
'fStr is the file path and name of the file you selected.
fStr = .SelectedItems(1)
End With
With ThisWorkbook.Sheets("Stripe Raw Data").QueryTables.Add(Connection:= _
"TEXT;" & fStr, Destination:=ThisWorkbook.Sheets("Stripe Raw Data").Range("$A$1"))
.Name = "CAPTURE"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
ActiveWorkbook.Save
End With
End Sub
Dies funktioniert gut - aber ist es trotzdem, es nicht zu haben, die Daten bereits importiert außer Kraft setzen? (Zum Beispiel, wenn ich es zweimal verwende, überschreibt der zweite Import den ersten).
Ja, ich verstehe, dass das passieren muss, aber das Problem ist, ich weiß nicht, wie man es implementiert. Ich würde annehmen, dass es eine Schleife von irgendeiner Art geben muss, aber wieder buchstäblich mein zweiter Tag, der VBA verwendet. – Spnkmyr
Wenn Sie die Prozedur erweitern, um 'ThisWorkbook.Sheets (" Stripe Raw Data ") zu nehmen. Bereich (" $ A $ 1 ")' als Parameter: 'load_csv (rng As Range)' - dann können Sie den Import ändern dazu: 'ThisWorkbook.Sheets (" Stripe Raw Data "). QueryTables.Add (Verbindung: = _ " TEXT; "& fStr, Destination: = rng)' - Nun kann man 'load_csv()' mit variierenden Wiederholungen aufrufen Parameter. – Leviathan
Hey, danke für deine Hilfe. In Ihrem Beispiel können Sie die notwendigen Schritte ausführen, um dies zu implementieren (insbesondere load_csv (rng As Range)? Können Sie Worksheet.Range = rng deklarieren und dann rng ("$ B $ 1") oder etwas ähnliches? Die andere Frage I has hängt davon ab, wo die Daten importiert werden.Ich möchte grundsätzlich, dass jeder Datensatz über den letzten geladen wird (im Gegensatz zu derselben Zelle, die alle vorherigen Daten nach lateral schiebt) .Wenn Sie sagen, Ziel: = rng, wie spezifizieren Sie den Anfang Bereich und dann die anschließende Import-Bereich? – Spnkmyr