Экспортировать значения, а не формулы с 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 .

Попробуйте этот примерный код ниже – он делает то, что делает ваш оригинальный макрос, но с некоторыми передовыми методами:

  • Используйте Option Explicit для предотвращения проблем с сильно определенными переменными

  • Установите ссылки на исходные данные и целевые данные, например, исходный лист ( wsSource ), исходный диапазон ( rngToCopy ), целевую книгу ( wbTarget ) и целевой лист ( wsTarget ) – это лучше, чем использование ActiveSheet или Something.Select и т. Д., Something.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 
Давайте будем гением компьютера.