如何强制 Excel 将 CSV 中的日期视为宏中的文本

如何强制 Excel 将 CSV 中的日期视为宏中的文本

我有一个宏,它允许用户选择一个 CSV 文件,然后对其进行操作。但是,它将包含 1/2/12 之类的内容的单元格视为日期。我需要将这些字符串保留为文本,而不是日期。

我知道我可以通过以下方式做到这一点:1) 开始新的工作表 2) 导入 CSV 而不是打开它。将包含日期的列设置为“文本”并完成。

问题是:我如何中断数据 > 导入,以便用户可以选择文件。之后,宏应继续设置列的格式,完成导入并执行数据操作。

编辑:这是当前的宏的相关代码:

ChDir“C:\RoomTimerData\”

MyFile = Application.GetOpenFilename("逗号分隔值(.csv).csv”)

工作簿.打开文件名:=MyFile

答案1

通常,人们会选择每个导入列的数据类型作为文本导入对话框的第 3 步(共 3 步)。为了避免格式错误,只需使用文本作为格式,你就很好了。

但是,你似乎使用 VBA 宏来导入 CSV 文件。所以我只录制了这样一个未损坏的文本进口:

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\test.csv", Destination:=Range("$A$1"))
    .Name = "test_1"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 850
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = True
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(2, 1) 'THIS IS THE MAGIC LINE!
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

另外,请查看 excel-help 中的这个示例TextFileColumnDataTypes

Set shFirstQtr = Workbooks(1).Worksheets(1) 
Set qtQtrResults = shFirstQtr.QueryTables _
        .Add(Connection := "TEXT;C:\My Documents\19980331.txt", _
        Destination := shFirstQtr.Cells(1, 1))
With qtQtrResults
    .TextFileParseType = xlFixedWidth
    .TextFileFixedColumnWidths = Array(5, 4)
    .TextFileColumnDataTypes = _
        Array(xlTextFormat, xlSkipColumn, xlGeneralFormat)
    .Refresh
End With

您可以使用以下格式:

  • 通用格式
  • 文本格式
  • 跳过列
  • 格式
  • 格式
  • xlEMD格式
  • 格式
  • 格式
  • 格式
  • 格式

相关内容