Excel VBA - salva a planilha no novo arquivo sem fórmulas

1

Preciso de ajuda para concluir este código do VBA, e até onde meu conhecimento limitado me levará.

Cenário: Eu tenho uma pasta de trabalho mestre que extrai dados de outras duas planilhas exportadas de um programa (para salvar copiar / colar), então preciso exportar apenas 1 folha e salvar como um novo arquivo e o código VBA abaixo o trabalho perfeitamente.

Sub savesheet2()

Application.ScreenUpdating = False
ActiveSheet.Select
ActiveSheet.Copy
ThisFile = Range("A2").Text
Dim fileName As String
fileName = "C:\INTERNAL\ACCOUNTS\" & ThisFile
ActiveSheet.SaveAs fileName:=fileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.ScreenUpdating = True

End Sub

O que preciso incluir é codificar para remover as fórmulas (somente valores de exportação) e reter a formatação condicional do livro-mestre.

Qualquer ajuda seria muito apreciada.

    
por GaryW 03.08.2016 / 03:56

2 respostas

1

A primeira coisa que vem à mente é apenas substituir cada célula pelo seu valor.

For Each c In Cells
    c = c.Value
Next c

Se você tem uma tonelada de células, isso pode levar algum tempo.

Como alternativa, você pode selecionar a planilha inteira e colar os valores especiais:

Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues

Nenhuma dessas opções deve alterar qualquer formatação condicional.

    
por 03.08.2016 / 05:15
0
  Public Sub convertir_fichero(fichero_origen As String)

 Dim nuevo_libro As Workbook
 Dim indice As Integer
 Dim Ruta_Salida As String

 Set nuevo_libro = Workbooks.Add(xlWBATWorksheet)


 Application.CalculateBeforeSave = False
 Application.DisplayAlerts = False

 Workbooks(fichero_origen).Activate
 Ruta_Salida = Application.ActiveWorkbook.Path & "\Salida_aux.xlsx"

 nuevo_libro.SaveAs Ruta_Salida, AccessMode:=xlExclusive, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges

 For indice = 1 To Workbooks(fichero_origen).Worksheets.Count
    Dim nombre_hoja As String

    nombre_hoja = Workbooks(fichero_origen).Worksheets(indice).Name

    nuevo_libro.ActiveSheet.Name = nombre_hoja

    Workbooks(fichero_origen).Worksheets(nombre_hoja).Activate

    If Workbooks(fichero_origen).Worksheets(nombre_hoja).FilterMode = True Then
       Workbooks(fichero_origen).Worksheets(nombre_hoja).AutoFilter.ShowAllData
    End If
    Cells.Select
    Selection.Copy
    'After:=ActiveSheet
    nuevo_libro.Sheets(nombre_hoja).Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'formato
    Workbooks(fichero_origen).Worksheets(nombre_hoja).Activate
    Cells.Select
    Selection.Copy
    nuevo_libro.Sheets(nombre_hoja).Activate
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False

    Application.CutCopyMode = False
    If ((indice Mod 5) = 0) Then
      nuevo_libro.SaveAs Ruta_Salida, AccessMode:=xlExclusive, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges
    End If
    If (indice < Workbooks(fichero_origen).Worksheets.Count) Then
      nuevo_libro.Sheets.Add After:=ActiveSheet
    End If
 Next indice

  nuevo_libro.SaveAs Ruta_Salida, AccessMode:=xlExclusive, ConflictResolution:=Excel.XlSaveConflictResolution.xlLocalSessionChanges
End Sub
    
por 13.07.2018 / 11:22