使用VBA导出值不是公式

我正在使用下面的脚本将工作表导出为CSV格式:

Sub Button14_Click() ' ' export Macro Dim LR As Long LR = Range("A" & Rows.Count).End(xlUp).Row Range("A2:M" & LR).SpecialCells(xlCellTypeConstants, 23).Select Selection.Copy Workbooks.Add ActiveSheet.Paste ActiveWorkbook.SaveAs Filename:= _ "C:\upload\19meat-kl.csv" _ , FileFormat:=xlCSV, CreateBackup:=False Application.DisplayAlerts = False ActiveWorkbook.Close Application.DisplayAlerts = True End Sub 

我是VBA脚本的新手,我从另一篇文章中得到了这个代码。

大多数情况下,它做我想要的,但如果我尝试使用一个公式,它会导出公式,而不是结果。 我需要更改什么,以便单元格内容是导出的内容?

除了@ Mat'sMug的评论之外,您需要使用PasteSpecial xlValues而不仅仅是Paste

试试下面的这个例子代码 – 它做你最初的macros,但有一些最佳实践:

  • 使用Option Explicit来防止定义不好的variables的问题

  • 设置对源数据和目标数据(例如源工作表( wsSource ),源范围( rngToCopy ),目标工作簿( wbTarget )和目标工作表( wsTarget ))的wsTarget – 这比使用ActiveSheetSomething.Select等更好最佳实践

  • 复制后立即粘贴 ,以防止剪贴板持久性问题

码:

 Option Explicit Sub SaveRangeDataAsValuesOnNewWorkbook() ' set-up your variables Dim strFileToSave As String Dim wsSource As Worksheet Dim lngLastRow As Long Dim wbTarget As Workbook Dim wsTarget As Worksheet Dim rngToCopy As Range ' where you want to save strFileToSave = "C:\upload\19meat-kl.csv" ' get a worksheet reference Set wsSource = ThisWorkbook.Worksheets("Sheet1") '<~~ set to your worksheet ' get last row in column A - you need to reference a worksheet to do this properly lngLastRow = wsSource.Range("A" & wsSource.Rows.Count).End(xlUp).Row ' now - add a workbook and get its reference Set wbTarget = Application.Workbooks.Add ' get the first worksheet in the new workbook Set wsTarget = wbTarget.Worksheets(1) ' get a reference to your source range Set rngToCopy = wsSource.Range("A2:M" & lngLastRow).SpecialCells(xlCellTypeConstants, 23) ' copy the source range rngToCopy.Copy ' paste it to the target worksheet in the new workbook - you need to PasteSpecial to a Range wsTarget.Range("A1").PasteSpecial xlValues ' save the new workbook wbTarget.SaveAs Filename:=strFileToSave, FileFormat:=xlCSV, CreateBackup:=False ' close the new workbook Application.DisplayAlerts = False wbTarget.Close Application.DisplayAlerts = True End Sub