Excel VBA Экспорт в лист Excel, но удалить формулы - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть часть VBA, которая ежедневно экспортирует 3 вкладки в книгу Excel. У меня есть кусок сценария, который удалил все внешние ссылки, и это здорово. однако мне интересно, есть ли другой фрагмент кода, который позволит мне также удалить формулы. Для заголовков полей, которые вычисляют даты, есть формула.

Таким образом, вместо того, чтобы просто показывать 7 ноября, он по-прежнему показывает формулу = Today () - 1 В моем VBA я хотел бы включить код, который бы просто включал значение «7 ноября», а не формулу.

Сценарий, который у меня есть, ниже

'excel read only
Application.DisplayAlerts = False
Sheets(Array("Template", "Data Export", "Sales Breakdown")).Copy

Dim ExternalLinks As Variant
Dim x As Long

'Create an Array of all External Links stored in Workbook
ExternalLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)

'Loop Through each External Link in ActiveWorkbook and Break it
For x = 1 To UBound(ExternalLinks)
ActiveWorkbook.BreakLink Name:=ExternalLinks(x), Type:=xlLinkTypeExcelLinks
Next x

ActiveWorkbook.SaveAs Filename:="MY FILENAME", FileFormat:=51, CreateBackup:=False

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Другой подход:

On Error Resume Next
Set FormulaCells = ActiveSheet.UsedRange.SpecialCells(xlFormulas, 23)

'   Exit if no formulas are found
If FormulaCells Is Nothing Then
    Exit Sub
End If

For Each myCell In FormulaCells
    myCell.Value = myCell.Value
Next myCell
0 голосов
/ 09 ноября 2018

сразу после копирования вы можете обратиться к значению старой книги, чтобы изменить материал на значение. что-то вроде

Dim wb1, wb2 As Workbook
Set wb1 = ActiveWorkbook
wb1.Sheets(Array("Template", "Data Export", "Sales Breakdown")).Copy
Set wb2 = ActiveWorkbook 'the new workbook is now wb2
For Each i In Array("Template", "Data Export", "Sales Breakdown")
wb2.Sheets(i).usedrange.Value = wb1.Sheets(i).usedrange.Value
Next
///rest of yourcode///

или если у вас есть точный диапазон, вы можете использовать диапазон («A1: Z500») вместо используемого диапазона, чтобы сделать его быстрее. Используя этот метод, вы можете избежать использования копировать и вставить значение (которое я ненавижу). и вместо activeworkbook вы можете использовать wb2 в приведенном ниже коде.

0 голосов
/ 08 ноября 2018

Как насчет:

Sub FormulaKiller()
    Dim sh As Worksheet

    For Each sh In ActiveWorkbook.Worksheets
        With sh.Cells
            .Copy
            .PasteSpecial xlPasteValuesAndNumberFormats
        End With
    Next sh
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...