我有一个将多个CSV文件导入excel的代码。该代码可以正常工作,但我应该对其进行更多编辑。我需要复制并粘贴固定范围,例如,每个CSV文件的A1至C10并将其粘贴到主Excel文件中。实际上,我有多个CSV文件,我需要从一个CSV文件复制的数据粘贴到已经粘贴的先前数据下。我是VBA的新手,需要帮助。
我试图声明一个固定范围。但这似乎是不对的。我不明白那条线到底是做什么的。
ActiveSheet.UsedRange.Copy xSht.Range("D" & Rows.Count).End(xlUp).Offset(1)
Sub ImportCSVsWithReference()
Dim xSht As Worksheet
Dim xWb As Workbook
Dim xStrPath As String
Dim xFileDialog As FileDialog
Dim xFile As String
On Error GoTo ErrHandler
Set xFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
xFileDialog.AllowMultiSelect = False
xFileDialog.Title = "Select a folder [DataImporter]"
If xFileDialog.Show = -1 Then
xStrPath = xFileDialog.SelectedItems(1)
End If
If xStrPath = "" Then Exit Sub
Set xSht = ThisWorkbook.ActiveSheet
If MsgBox("Clear the existing sheet before importing?", vbYesNo, "DataImporter") = vbYes Then xSht.UsedRange.Clear
Application.ScreenUpdating = False
xFile = Dir(xStrPath & "\" & "*.csv")
Do While xFile <> ""
Set xWb = Workbooks.Open(xStrPath & "\" & xFile)
Columns(1).Insert xlShiftToRight
Columns(1).SpecialCells(xlBlanks).Value = ActiveSheet.Name
ActiveSheet.UsedRange.Copy xSht.Range("D" & Rows.Count).End(xlUp).Offset(1)
xWb.Close False
xFile = Dir
Loop
Application.ScreenUpdating = True
Exit Sub
ErrHandler:
MsgBox "no files csv", , "DataImporter"
End Sub
答案 0 :(得分:0)
您的代码非常老练,并且看起来对我来说效果很好。
代码将FilePicker设置为选择要导入的内容,并在创建新表以粘贴值之后,将其复制并粘贴到主表(xSht)
说明:
ActiveSheet.UsedRange.Copy xSht.Range("D" & Rows.Count).End(xlUp).Offset(1)
“ Activesheet.UsedRange.Copy”意味着您将复制第一行到最后一列(即整个表),然后复制到ClipBoard
“ xSht.Range(” D“&Rows.Count).End(xlUp).Offset(1)”,表示您转到主工作表并计算D列中填充的所有行(可能需要一列)避免使用空白寄存器),并以偏移量+1(即“换行”)结尾。
但是这样做,会将新数据粘贴到D列中,但是您说过要放在A列中。
为此,请将该行更改为:
ActiveSheet.UsedRange.Copy xSht.Range("A" & Rows.Count).End(xlUp).Offset(1)
或者如果您的A不可信
ActiveSheet.UsedRange.Copy xSht.Range("D" & Rows.Count).End(xlUp).Offset(1, -3)