如何在不导出 Visual Basic 中的公式的情况下导出已使用的值范围 Excel

How can I export usedrange of values without exporting formulas in Visual Basic Excel

我尝试了多种变体,但一直得到相同的结果。最近的迭代是这样的:

Sub CopyToCSV()

' Copy and Paste Active Sheet
ActiveSheet.Copy
With ActiveSheet.UsedRange
    .Value = .Value
End With

 'The new workbook becomes Activeworkbook:
With ActiveWorkbook


      'Saves the new workbook to given folder / filename:
     .SaveAs Filename:= _
     "C:\uploadmeat-kl.csv", _
     FileFormat:=xlCSV, _
     CreateBackup:=False
      'Closes the file
     .Close False
  End With
End Sub

我的输出一直是这样的:

Store,Department,Date,Category,Item Count,Retail Price,Dollars,Reduced Retail,Total Loss,Reason for loss
18,90,2017-04-04,Meat,2,3,6,1,4,Out of Date
18,90,2017-04-04,Pork,2,1.5,3,0.99,1.02,Other
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,
,,,,,,,,,

原因是我的 Excel 文件包含一些这样的公式:

=IF(D5>0,TODAY(),"")

如果某些单元格输入任何内容,此功能会自动填充某些单元格。这导致 Excel 认为单元格是 "used" 并包括它们。我尝试了 Worksheet.usedrange.values 的几种变体,但我要么得到相同的输出,要么由于代码错误而得到调试提示。如何从输出中删除逗号?

您可以从起始行复制到没有公式的最后一行,而不是复制和粘贴整个使用范围。可以使用以下命令找到最后一行:

  Dim i As Integer
  With Sheets(1).Columns("A").SpecialCells(xlCellTypeConstants)
    i = .Cells(.Cells.Count).row
  End With

编辑以包含整个代码

只需清除 几乎空白的 单元格

Sub CopyToCSV()
    ' Copy and Paste Active Sheet
    ActiveSheet.Copy
    With ActiveSheet.UsedRange
        .Value = .Value
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With

    'The new workbook becomes Activeworkbook:
    With ActiveWorkbook
        'Saves the new workbook to given folder / filename:
        .SaveAs Filename:="C:\uploadmeat-kl.csv", FileFormat:=xlCSV, CreateBackup:=False
        'Closes the file and discard changes (no needed any more)
        .Close False
    End With
End Sub