作为工作表宏运行时,子例程不起作用

时间:2018-03-03 00:45:56

标签: excel-vba vba excel

我有一个创建带有工作表宏的.xlsm文件的进程,即工作表内部的宏,而不是在单独的模块中运行。

在其中一个工作表子例程中,我尝试使用此方法导入.csv文件:

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;" & INFILE, Destination:=Range("$A$1"))
    .Name = "NLIST"
    .FieldNames = True
    .PreserveFormatting = True
    .RefreshStyle = xlInsertDeleteCells
    .SaveData = True
    .AdjustColumnWidth = True
    .TextFileStartRow = 1
    .TextFileParseType = xlFixedWidth
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileTabDelimiter = True
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileFixedColumnWidths = Array(8, 36, 2, 4, 7, 4, 4)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

问题是作为表格宏工作。 只有当它在自己的模块中时才有效。 我试过改变所有的“。”引用这种结构:

With sheets("NLIST").QueryTables.Add(Connection:= _
    "TEXT;" & INFILE, Destination:=Range("$A$1"))
    sheets("NLIST").Name = "NLIST"
    sheets("NLIST").FieldNames = True
End with

没有buenos

与往常一样,任何帮助都将受到赞赏

1 个答案:

答案 0 :(得分:0)

编辑1:由于它不起作用,请尝试在模块级别创建过程并在工作表代码中调用它。

例如:这是一个模块

Sub AddConnection(targetWS As Worksheet, INFILE As String)

With targetWS
    With .QueryTables.Add(Connection:= _
        "TEXT;" & INFILE, Destination:=.Range("$A$1"))
        .Name = "NLIST"
        .FieldNames = True
        .PreserveFormatting = True
        .RefreshStyle = xlInsertDeleteCells
        .SaveData = True
        .AdjustColumnWidth = True
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileTabDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileFixedColumnWidths = Array(8, 36, 2, 4, 7, 4, 4)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End With

End Sub

然后在您的工作表代码中,您可以将其命名为:

AddConnection Me, <FilePath> '/* if you are creating connection in that sheet */

AddConnection Sheets("NLIST"), <FilePath> '/* creating it on another sheet */

没有经过测试,没办法做atm,但我认为它应该可行。