首页 > 解决方案 > 在 Excel 中将单元格的内容保存到不带引号的 csv

问题描述

我正在尝试使用 VBA 创建一个 csv 文件(不带引号) - 文件的唯一内容应该是名为“MetricValue”的单元格中的值。

    Dim FileName As String
    Dim PathName As String
    Dim ws As Worksheet

    Set Range.Value = MetricValue
    FileName = "filename.csv"
    PathName = Application.ActiveWorkbook.Path
    ws.Copy
    ActiveWorkbook.SaveAs FileName:=PathName & "\" & FileName, _
        FileFormat:=xlCSV, CreateBackup:=False
End Sub

我知道我在设置范围时已经填满了一些东西,但不知道为什么。我试图开始工作的所有内容都只输出带有引号的值。谁能指出我正确的方向?

标签: excelvba

解决方案


我认为您的问题令人困惑,因为您似乎真正想要做的是将单个值保存为 CSV。正在创建的引号可能来自文件的其他部分。可能有更好的方法来实现您的总体目标。这是一篇关于 CSV 文件的StackOverflow 文章,通过 excel 可能有用。

无论如何,这里有两种使用宏将命名范围值保存为 CSV 文件的解决方案。确保命名范围位于工作簿级别(而不是工作表)。

选项一

Sub MakeASingleValueCSVFile()
Dim FileName As String: FileName = "filename.csv"
Dim PathName As String: PathName = Application.ActiveWorkbook.Path
Dim finalValue As Double: finalValue = Range("MetricValue").Value

    
Dim iFileNum As Long
iFileNum = FreeFile
Open PathName & "\" & FileName For Output As iFileNum

Print #iFileNum, finalValue
Close #iFileNum
End Sub

这有一些你可能不喜欢的间距问题。

选项 2

(更新了初始问题的更多动态解决方案)

Const FileName As String = "filename2"
Const namedRange As String = "MetricValue" 'make sure at workbook level
Dim PathName As String: PathName = Application.ActiveWorkbook.Path
Dim pullRNG As Range: Set pullRNG = Range(namedRange)
Dim wkBK As Workbook: Set wkBK = Application.Workbooks.Add

With wkBK

    .Sheets(1).Cells(1, 1).Resize(pullRNG.Rows.Count, pullRNG.Columns.Count) = pullRNG.Value

        .SaveAs PathName & "\" & FileName, xlCSV
    .Close
End With

推荐阅读