如何在不导出 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
我尝试了多种变体,但一直得到相同的结果。最近的迭代是这样的:
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