【问题标题】:Copy pasting from different CSVs to one XLSX file从不同的 CSV 复制粘贴到一个 XLSX 文件
【发布时间】:2023-01-19 18:00:06
【问题描述】:

我正在尝试在 VBA 中完成以下操作:

  • 打开文件夹中的每个文件(1 x 1)
  • 由于所有文件都是 CSV,我想将它们分成更多的列以收集我需要的数据。
  • 我想将这些复制粘贴到一个特定的 excel 中。这些大约有 300 行。
  • 在那个特定的 excel 中,我想让它们相互粘贴。

我已经拥有的:

  • 找到我需要的所有文件的方法。
  • 将 CSV 数据制作成列。
  • 复制粘贴方法。
  • 找到下面的第一个空行。

问题是:

  • 我没有足够的知识让宏对所有 CSV 执行此操作

请在下面查看我到目前为止的代码:

Sub pm_logger()

Application.ScreenUpdating = False
Dim bookDest As Workbook
Dim bookFrom As Workbook
Dim lDestLastRow as Long
Dim sh As Worksheet

Workbooks.Open "P:\logs\logstorage.xlsx"
Workbooks.Open "P:\logs\logfile.csv"

Set bookDest = Workbooks("logstorage.xlsx")

Set bookFrom = Workbooks("logfile.csv")

bookFrom.Activate
    Set sh = Worksheets(1)
        With sh
            Set Rng = .Range("A5:A305")
            Set Rng = .Range(Rng, .Cells(.Rows.Count, Rng.Column).End(xlUp))
                Rng.TextToColumns Destination:=Rng, DataType:=xlDelimited, _
                TextQualifier:=xlDoubleQuote, _
                ConsecutiveDelimiter:=False, _
                Tab:=False, _
                Semicolon:=False, _
                Comma:=True, _
                Space:=False, _
                Other:=False, _
                FieldInfo:=Array(Array(1, xlGeneralFormat), Array(2, xlGeneralFormat), Array(3, xlGeneralFormat)), _
                TrailingMinusNumbers:=True
        End With
    
bookFrom.Worksheets(1).Range("A5:K304").Copy

lDestLastRow = bookDest.Cells(bookDest.Rows.Count, "A").End(xlUp).Offset(1).Row

bookDest.Range("A" & xlDestLastRow).PasteSpecial Paste:=xlPasteValues

'Workbooks("logstorage.xlsx").Close SaveChanges:=True

Application.ScreenUpdating = True

End Sub

非常感谢您!

【问题讨论】:

  • 使用宏记录器做你需要手动做的事情,然后从那里开始。

标签: excel vba


【解决方案1】:

要完成此操作,您首先需要一种方法来将所有 .csv 文件加载到您的宏中。这可以通过几种方式完成,但我建议使用文件选择器将它们全部加载到一个集合中:

Dim picker As Office.FileDialog
Dim mycsvs As New Collection
Dim file As Variant

Set picker = Application.FileDialog(msoFileDialogFilePicker)

With picker

    .Filters.Clear
    .Filters.Add "CSV files", "*.csv", 1
    .AllowMultiSelect = True
    .InitialFileName = "P:logs"
    
    If .Show = True Then
    
    For Each file In .SelectedItems
        mycsvs.Add file
    Next file
    
    End If
    
End With

现在您有了集合mycsvs,其中包含您选择要处理的所有文件。然后你需要做的就是用你已经编写的代码遍历它们:

Workbooks.Open "P:logslogstorage.xlsx"

For Each file In mycsvs

    Set bookDest = Workbooks("logstorage.xlsx")
    Set bookFrom = Workbooks.open(file)

    'your code here from "Bookfrom.Activate"

    bookFrom.Close SaveChanges:= False

Next file

'Workbooks("logstorage.xlsx").Close SaveChanges:=True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多