VBA 文件夹批处理操作 - CSV 列表以填充 XLS 模板

VBA Batch Action on Folder - CSV lists to fill an XLS template

我是 VB/VBA 的新手。正在努力让它发挥作用。

我发现了这个: Looping a code through a folder of workbooks with VBA?

但它并没有完全解决我想要做的事情。我有大约 60 个干净且符合规范的 .CSV 文件,我想使用 VBA 将它们放入 Excel 模板中。我能够使用 "Record Macro" 函数使一个工作:

Range("A2:A33").Select
Selection.Copy
Workbooks.Open Filename:="C:\Users\rs\Desktop\F15-Template.xlsx"
Range("A6").Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
    xlNone, SkipBlanks:=False, Transpose:=False
Windows("List01.csv").Activate
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("F15-Template.xlsx").Activate
Range("H2:J2").Select
ActiveSheet.Paste
Windows("List01.csv").Activate
Range("D2").Select
Application.CutCopyMode = False
Selection.Copy
Windows("F15-Template.xlsx").Activate
Range("H3:J3").Select
ActiveSheet.Paste

但如您所知,这是针对模板中的一个列表。

除了 copy/pasting 从列表到 XLS 模板之外,我还想做的事情是:

  1. 使上面的代码与目录一起工作
  2. 另存为 ListName01.xls copy/paste 合并后
  3. 如果可能,对这些文件应用批处理 "Protect Sheet"。

列表位于 C:\Users\rs\Desktop\lists 中,模板是裸露的 Desktop -- 如果您能提供帮助,我们将不胜感激。

如果 VB/VBA 是工作的错误工具,请指出正确的方向。提前致谢!

这将为您提供文件夹中的 CSV 文件列表。

Sub test()

    Dim FileArray() As String
    Call GetFileArray(FileArray, "C:\Users\rs\Desktop\lists\")

    Dim x As Integer
    For x = LBound(FileArray) To UBound(FileArray)
        'action here
        Debug.Print FileArray(x)
    Next
End Sub


Sub GetFileArray(ByRef FileArray() As String, path)

    Dim fileName
    Dim fileCt
    Dim rowNum

    If Right(path, 1) <> "\" Then path = path & "\"
    'path = "C:\clientsTAX\"

    fileCt = 0
    rowNum = 0

    fileName = Dir(path)
    ReDim Preserve FileArray(fileCt)
    FileArray(fileCt) = fileName

    Do While fileName <> ""
        fileName = Dir
        If Right(fileName, 3) = "WK3" Then
            fileCt = fileCt + 1
            ReDim Preserve FileArray(fileCt)
            FileArray(fileCt) = fileName
        End If
    Loop
End Sub

我会留给你填写其余的代码。

我最终做了各种各样的事情。我能找到的最好的代码块来自 Kent Finkle.

    $comments = @'
    Script name: DerpExcelGoodness.ps1
    Thanks to Kent Finkle
    Purpose: How can I use Windows Powershell to Open All the_
    Excel Spreadsheets in a Folder 
    and Run a Specified Macro Found on those Spreadsheets?
    Store Macro Excel Sheet in ~/Documents Folder
    6 - csv; 51 - xlsx
    '@
    #-----------------------------------------------------
    function Release-Ref ($ref) {
    ([System.Runtime.InteropServices.Marshal]::ReleaseComObject(
    [System.__ComObject]$ref) -gt 0)
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers() 
    }
    #-----------------------------------------------------
    $files = dir("E:\<path>\*.csv")

    $xl = new-object -comobject excel.application
    $xl.Visible = $True

    $xl.DisplayAlerts = $False

    foreach ($f In $files) { 
        $wb = $xl.Workbooks.Open($f.FullName)
        $ws = $wb.Worksheets.Item(1)
    #    Daisy chain is totally possible. Just uncomment.
    #    $a = $xl.Run("macro.xlsb!clean")
    #    $a = $wb.SaveAs($f.FullName + "-clean.csv", 6)
    #    $a = $xl.Run("macro.xlsb!gradesheet")
    #    $a = $xl.Run("macro.xlsb!protect")
    #    $a = $xl.Run("macro.xlsb!unprotect")
    #    $a = $wb.SaveAs($f.FullName + "-gradesheet.xlsx", 51)
        $a = $wb.Close()
    }
    $a = $xl.Quit()

    $a = Release-Ref($ws)
    $a = Release-Ref($wb)
    $a = Release-Ref($xl)

我只是在必要时取消注释,并且能够 运行(来自 Powerscript)文件夹上的外部宏,这非常棒且有用。

我也将这些藏在 GitHub 中:here