excel 2010 vba错误调用模块

时间:2016-01-13 20:33:04

标签: excel-vba vba excel

在下面excel 2010 vba中,loop打开并阅读所有文本文件,然后生成同一张表中的call to a module。但是我得到Argument not optional' error on that line (调用CreateXLSXFiles`)。我需要一些专家帮助解决这个问题,因为我无法弄明白。谢谢:))

VBA

'CREATE REPORT '
MsgBox ("Please click ok to generate analysis reports, vbOKOnly")

Dim myDir As String, fn As String
myDir = "C:\Users\cmccabe\Desktop\EmArray\"
fn = Dir(myDir & "*.txt")
Do While fn <> ""
   CreateXLSXFiles myDir & fn
   fn = Dir
Loop

Call CreateXLSXFiles

模块

Sub CreateXLSXFiles(fn As String)
' PARSE TEXT FILE AND CREATE XLSX REPORT '
Dim txt As String, m As Object, n As Long, fp As String
Dim i As Long, x, temp, ub As Long, myList

 myList = Array("Display Name", "Medical Record", "Date of Birth", _
                "Order Date", "Gender", "Barcode", "Sample", "Build", _
                "SpikeIn", "Location", "Control Gender", "Quality")

fp = "C:\Users\cmccabe\Desktop\EmArray\"

With Worksheets(1)
    .Cells.Clear
    .Name = CreateObject("Scripting.FileSystemObject").GetBaseName(fn)
On Error Resume Next
n = FileLen(fn)
If Err Then
    MsgBox "Something wrong with " & fn
    Exit Sub
End If
On Error GoTo 0
n = 0
txt = CreateObject("Scripting.FileSystemObject").OpenTextFile(fn).ReadAll
With CreateObject("VBScript.RegExp")
    .Global = True: .MultiLine = True
    For i = 0 To UBound(myList)
        .Pattern = "^#(" & myList(i) & " = (.*))"
        If .Test(txt) Then
            n = n + 1
            Sheets(1).Cells(n, 1).Resize(, 2).Value = _
            Array(.Execute(txt)(0).submatches(0), .Execute(txt)(0).submatches(1))
        End If
    Next
    .Pattern = "^[^#\r\n](.*[\r\n]+.+)+"
    x = Split(.Execute(txt)(0), vbCrLf)
    .Pattern = "(\t| {2,})"
    temp = Split(.Replace(x(0), Chr(2)), Chr(2))
    n = n + 1
    For i = 0 To UBound(temp)
        Sheets(1).Cells(n, i + 1).Value = temp(i)
    Next
    ub = UBound(temp)
    .Pattern = "((\t| {2,})| (?=(\d|"")))"
    For i = 1 To UBound(x)
        temp = Split(.Replace(x(i), Chr(2)), Chr(2))
        n = n + 1
        Sheets(1).Cells(n, 1).Resize(, ub).Value = temp
    Next
End With
.Copy
    Application.DisplayAlerts = False
    With ActiveSheet
         .Columns.AutoFit
         .Range("B1:B12").ClearContents
    End With
    ActiveWorkbook.SaveAs Filename:=fp & .Name, _
                          FileFormat:=xlOpenXMLWorkbook
    ActiveWorkbook.Close False
End Sub

1 个答案:

答案 0 :(得分:0)

方法CreateXLSXFilesString作为输入:

Sub CreateXLSXFiles(fn As String)

但是,您在不传递任何字符串的情况下调用它:

Call CreateXLSXFiles

为了使其有效,您需要传递所需的fn(我猜这意味着&#34;文件名&#34;):

Call CreateXLSXFiles(fn)

或使用最新语法,只需:

CreateXLSXFiles fn