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
4 Réponses :
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
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
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.
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
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 code>. 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 i>, 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") code> etc.), la performance devrait être beaucoup plus rapide. À votre santé.
Je l'ai fait fonctionner: Je dois le faire entre activation de fenêtres ou cela ne fonctionne pas. P> P>
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.