我想使用vba

时间:2019-02-04 18:49:08

标签: excel vba

我有一个将多个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

1 个答案:

答案 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)