10
votes

Comment copier le contenu de la feuille active vers un nouveau classeur?

J'essaie de copier le contenu de la feuille active vers un nouveau classeur.

Sub new_workbook()

    Dim ExtBk As Workbook
    Dim ExtFile As String

    Columns("A:N").Copy

    Workbooks.Add.SaveAs Filename:="output.xls"
    ExtFile = ThisWorkbook.Path & "\output.xls"

    Set ExtBk = Workbooks(Dir(ExtFile))
    ExtBk.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

    Application.DisplayAlerts = False
    ExtBk.Save
    Application.DisplayAlerts = True

End Sub


6 commentaires

Quel est le format de fichier du classeur source? Vous essayez peut-être de coller trop de lignes si vous allez d'un XLSX à un XLS


Hmm. C'est un XLSX. Cela fonctionnerait-il si j'essayais de la copier à un XLSX à la place?


Il est plus susceptible de travailler ...


Donc, si j'essaie avec le format XLSX, je reçois une erreur: erreur définie par l'application ou d'objet définie


Où obtenez-vous l'erreur?


La méthode de la pâte à la pâte ne fonctionne tout simplement pas dans mon expérience. Je l'ai essayé plusieurs fois dans différentes macros et ça ne fonctionne jamais. Je recommande d'utiliser une coupe simple ou une copie et une pâte ordinaire, puis appliquez une mise en forme.


4 Réponses :


0
votes
Private Sub ExceltoExcel()
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    'Input Data
     Sheets("Sheet1").Cells(1, 1).Select
     col = Sheets("Sheet1").Cells(2, 2)
     Dim exlApp As Excel.Application
     Dim ExtBk As Excel.Workbook
     Dim exlWs As Excel.Worksheet
     ExtFile = ThisWorkbook.Path & "\output.xls"
     Set exlApp = CreateObject("Excel.Application")
     Set ExtBk = exlApp.Workbooks.Open(ExtFile)
     Set exlWs = exlWb.Sheets("Sheet1")
     ExtBk.Activate
     exlWs.Cells(2, 2) = col
     'Output Data
     exlWs.Range("A1").Select
     exlWb.Close savechanges:=True
     Set ecxlWs = Nothing
     Set exlWb = Nothing
     exlApp.Quit
     Set exlApp = Nothing
     Application.EnableEvents = True
     Application.DisplayAlerts = True
End Sub

0 commentaires

1
votes

Si vous copiez toute la zone, copiez les feuilles de calcul:

Workbooks(2).Worksheets(1).UsedRange.Copy
Workbooks(2).Worksheets(1).Range("A1").PasteSpecial xlPasteValues


2 commentaires

Je vais bien avec la copie de la feuille entière mais j'ai besoin de coller spécial comme le classeur d'origine si des formules et je souhaite que les résultats soient enregistrés dans ce classeur nouvellement généré.


@yatican j'ai ajouté une suggestion supplémentaire à ma réponse.



17
votes

N'utilisez pas de la méthode code> Copier CODE> si vous êtes uniquement concerné par la sauvegarde des valeurs.

Sub new_workbook()
Dim wbMe As Workbook: Set wbMe = ThisWorkbook
Dim ws As Worksheet: Set ws = wbMe.ActiveSheet
Dim ExtBk As Workbook

Set ExtBk = Workbooks.Add
ExtBk.SaveAs Filename:=wbMe.Path & "\output.xls"

ExtBk.Worksheets("Sheet1").Range("A:N").Value = ws.Range("A:N").Value

Application.DisplayAlerts = False
ExtBk.Save
Application.DisplayAlerts = True

End Sub


5 commentaires

Bon appel. Il est souvent inutile de renseigner (polluer) le presse-papiers.


Yea m'a donné la même erreur lorsque vous essayez de définir les valeurs identiques.


@yatici Vous ne pouvez pas éventuellement obtenir la «même erreur» car ce code n'appellait pas la méthode PasteCeciial . Alors, quelle erreur obtenez-vous?


Aha Nevermind semble être comme ça l'aimait. J'avais oublié de commenter l'été. C'est sympa. Semble lent mais certainement pratique


La vitesse est probablement fonction du fait que vous copiez la colonne totale , donc, 12 colonnes * 1048576 rangées. Beaucoup de données. Si vous deviez réviser la plage à la plus petite gamme de données que vous devez réellement copier (par exemple, la plage ("A1: N3502") etc.), la performance devrait être beaucoup plus rapide. À votre santé.



2
votes

Je l'ai fait fonctionner: xxx

Je dois le faire entre activation de fenêtres ou cela ne fonctionne pas.


0 commentaires