将变量路径 CSV 直接导入 table

Import variable path CSV directly into table

我正在尝试将 CSV 文件 "User Roles Entitlements" 中的数据导入我当前的 sheet(当前的 sheet 选项卡名称也是 "User Roles Entitlements"),工作正常如果它被导入到单元格 A1。但是,如果我尝试 table,代码将不起作用。我知道这是一个小调整,但是,我无法弄明白。

注意:我的文件在同一个文件夹中,我使用的是可变路径导入VBA代码。

我的代码如下:

Dim path As String

path = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(ThisWorkbook.path)

Sheets("User Roles Entitlements").Select
       Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & path & "\User Roles Entitlements.csv", Destination:=Range("A1"))
.Name = "positions_1"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 857
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

End Sub

如果我能得到这方面的帮助,我将不胜感激。

如果导入后数据连接丢失,您还好吗?换句话说,导入后是否需要从CSV文件中动态刷新table?

如果答案是否定的,那么您可以在事后简单地将范围转换为 ListObject (table)。

为方便起见(这样您以后就不必弄清楚范围),您可以在破坏它之前从 QueryTable 对象捕获范围。

Sub CsvInsert()
  Dim sh As Worksheet
  Dim qt As QueryTable
  Dim r As Range

  Set sh = Sheets("User Roles Entitlements")
  Set qt = sh.QueryTables.Add(Connection:="TEXT;" & path & _
      "\User Roles Entitlements.csv", Destination:=Range("A1"))

  With qt
    .Name = "positions_1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 857
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
    End With

然后将查询table转换为范围并在范围内创建table:

  Set r = qt.ResultRange

  sh.QueryTables("positions_1").Delete
  sh.ListObjects.Add(xlSrcRange, r).Name = "positions_1"

End Sub