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

问题描述 投票:0回答:1

我有一个进程创建一个带有工作表宏的.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

不好

一如既往,任何帮助将不胜感激

excel-vba vba excel
1个回答
0
投票

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

例如:这是一个模块

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,但我认为应该可行。

© www.soinside.com 2019 - 2024. All rights reserved.