2016-11-23 2 views
0

J'essaie d'enregistrer une feuille de calcul dans mon fichier Excel dans un nouveau fichier, mais sans la formule.Excel exécuter du code VBA dans le classeur nouvellement créé

je ce code qui fonctionne pour obtenir le fichier enregistré:

Sub SaveInvoice() 

'Create a filename based on invoicenumber 
Dim FileName As String 
FileName = Sheets("Sale").Range("C3").Value 

'Copy the "Print" sheet 
Worksheets("Print").Copy 

With ActiveWorkbook 
    'Save the file as new 
    .SaveAs FileName:="C:\" & FileName 
End With 

End Sub 

Cela fonctionne comme un charme, mais je dois dépouiller de la formule I googlé donc et Fount ce morceau de code:

ActiveSheet.Copy 
Cells.Copy 
Range("A1").PasteSpecial Paste:=xlPasteValues 
Application.CutCopyMode = False 

Et cela fonctionne aussi, mais une fois que je fusionne les deux morceaux de code ensemble, toute la fonction se brise.

With ActiveWorkbook 
    'Transform cells to values 
    ActiveSheet.Copy 
    Cells.Copy 
    Range("A1").PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 

    'Save the file as new 
    .SaveAs FileName:="C:\" & FileName 
End With 

Cela a pour résultat que ma feuille de calcul de base est supprimée des formules.

J'ai besoin de savoir comment je peux appeler la fonction sur le classeur newle créé.

Répondre

2

Lors de la copie d'une feuille de calcul Excel sans Destination crée un New Workbook et le New Workbook avec sa seule Worksheet sont actifs.

EDIT: Je viens de réaliser que dans le code final de ces lignes à partir du code original:

'Copy the "Print" sheet 
Worksheets("Print").Copy 

ont été déplacés à l'intérieur du

With ActiveWorkbook 

Ce se référait précédemment au New Workbook créé par le Worksheet.Copy et qui se réfère maintenant à la Source Workbook

Alors voir ce que le code final Op est en train de faire:

Ici, le ActiveWorkbook est le [Cahier Source] et le ActiveSheetdoit être [Imprimer]

With ActiveWorkbook 

Cette copie le ActiveSheet la création d'un New Workbook avec une seule feuille

 ActiveSheet.Copy 

Ces lignes affectent la ActiveSheet [Imprimer] dans le [Cahier d'exercices Source]. Pas à cause de la déclaration With mais parce c'est celui qui est actif

Cells.Copy 
    Range("A1").PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 

Les commandes dans un With destinées à affecter l'objet qu'il fait référence à doit commencer par un point [.]; Toutefois, ces lignes ne sont pas valides car les cellules et la plage ne sont pas des méthodes ou des propriétés de l'objet classeur, donc une erreur aurait été déclenchée.

Avec Déclaration

Exécute une série de déclarations sur un seul objet ou d'un type défini par l'utilisateur.

(de l'aide msdn.microsoft.com)

Cela enregistre le classeur visé par la déclaration With, qui a encore les formules

'Save the file as new 
    .SaveAs FileName:="C:\" & FileName 

End With 

Essayez ce code:

Sub SaveInvoice_TEST_1() 
'Create a filename based on invoicenumber 
Dim FileName As String 
    With ThisWorkbook 
     FileName = .Sheets("Sale").Range("C3").Value 
     'Copy the "Print" sheet 
     .Worksheets("Print").Copy 
    End With 

    With ActiveWorkbook 
     Rem Replace Formulas with Values 
     .Sheets(1).UsedRange.Value = .Sheets(1).UsedRange.Value2 
     'Save the file as new 
     .SaveAs FileName:="C:\" & FileName 
    End With 
    End Sub 

Suggérer à lire les pages suivantes pour obtenir une meilleure compréhension des ressources utilisées:

With Statement

+0

ne fonctionne pas, enregistre le fichier d'origine en tant que copie. – Nautilus

+0

Étrange cela a bien fonctionné dans tous mes tests, néanmoins faites juste un edit essayez maintenant et faites le moi savoir ... – EEM

+0

Check! Cela a fait l'affaire! Merci! – Nautilus

0

Essayez quelque chose comme ce qui suit. Lisez la page d'aide pour « ActiveSheet.Copy » - noter qu'il crée un nouveau classeur et l'active

Dim MyWkbk as workbook 

set MyWkbk = ActiveWorkbook 
ActiveSheet.Copy 

With ActiveWorkbook 
    Cells.Copy 
    Range("A1").PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 

    'Save the file as new 
    .SaveAs FileName:="C:\" & FileName 
    '.close 
End With 


MyWkBk.activate 
+0

Eh bien, c'est la chose étrange. ActiveSheet.Copy crée une copie mais ne semble pas activer le fichier copié. Sauf pour la sauvegarde, c'est la seule fonction que je peux exécuter dans le "Avec ActiveWorkbook" – Nautilus

+0

'Sheet.Copy' se comporte comme prévu, le problème réside dans l'utilisation incorrecte de l'instruction' With'. voir [With Statement] (https://msdn.microsoft.com/EN-US/library/office/gg264723.aspx) – EEM

0

Merci à @EEM la solution a été trouvée.

Voici le code je: