想知道你是否可以帮助解决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
据我所知,在excel中打开一个文件对话框,允许用户选择一个文档,然后打开它。
我想做的是以下内容:
1)打开文件对话框并选择.csv文件将数据从(完成?)导入.xlsm主文件(包含多张)。
2)从.csv中选择某些列(在本例中为A,Q,R和S列),复制它们并将它们导入到名为“Raw Stripe Data”的主excel文件的第二张表中。
对此事的任何帮助将不胜感激。
更新:我设法找到以下代码:
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
这很好用 - 但是有没有它不会覆盖已导入的数据? (例如,如果我使用它两次,第二次导入会覆盖第一次)。
答案 0 :(得分:2)
grey frame
指定导入数据的写入位置,即表单 Stripe Raw Data 的第一个单元格。
如果您希望在其他位置进行下一次导入,请根据自己的喜好进行调整。
如评论中所述,您可以更改ThisWorkbook.Sheets("Stripe Raw Data").Range("$A$1")
以将输出目标作为参数。如果您还将其从load_csv()
更改为Sub
,则可以返回导入的行数:
Function
现在您可以重复调用Function load_csv(rngDestination As Range) As Long
'...
With ThisWorkbook.Sheets("Stripe Raw Data").QueryTables.Add(Connection:= _
"TEXT;" & fStr, Destination:=rng)
'...
.Refresh BackgroundQuery:=False
load_csv = .ResultRange.Rows.Count
'...
End Function
并为其提供输出应该开始的范围,例如:
load_csv
仍有很大的改进空间:
Dim rngOutput As Range
Dim lngRows As Long
Set rngOutput = ThisWorkbook.Sheets("Stripe Raw Data").Range("$A$1")
lngRows = load_csv(rngOutput) ' load first file
lngRows = lngRows + load_csv(rngOutput.Offset(lngRows)) ' load second file
lngRows = lngRows + load_csv(rngOutput.Offset(lngRows)) ' load third file
lngRows = lngRows + load_csv(rngOutput.Offset(lngRows)) ' load fourth file
四次load_csv
但之后保存ThisWorkbook
- 它们可能并非总是相同但这不是这个问题的一部分。毕竟,你想知道的只有:
无论如何都没有覆盖已导入的数据?
我希望我能用上面的内容充分回答这个问题。