Je sais que l'exportation vers csv a été posée environ un milliard de fois, et je l'ai fait plusieurs fois, mais j'essaie de comprendre comment exporter uniquement une partie de la feuille vers csv sans parcourir chaque ligne ou cellule et les imprimer individuellement dans un fichier. J'ai besoin de maintenir le formatage local comme une exigence.
Sheets("PI_OUTPUT").Copy
Cela copie la feuille entière, les verrues et tout. J'ai des formules dans les lignes 1 à 20000 et les colonnes A à X, mais avec une quantité variable de lignes vides après le traitement des données. Si j'utilise la méthode de copie, je copie toutes les lignes vides, qui sortent comme des lignes de virgules. , etc....
J'ai essayé d'utiliser activesheet.deleterows pour rogner le fichier de sortie après la copie, mais cela me donne une erreur.
J'ai essayé d'utiliser:
Worksheets("PI_OUTPUT").Activate
Sheets("PI_OUTPUT").Range("A2:X5000").Copy
J'ai essayé d'utiliser une autre suggestion: les cellules spéciales (xlCellTypeVisible), mais je n'arrive pas à le faire fonctionner:
Set rng = Sheets("PI_OUTPUT").SpecialCells(xlCellTypeVisible)
Set Workbook = Workbooks.Add
With Workbook
Call rng.Copy
.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
.SaveAs filename:=MyPath & MyFileName, FileFormat:=xlCSV
.Close
End With
Pour aggraver les choses, je dois le faire sur plusieurs feuilles, toutes avec un nombre variable de colonnes, de lignes, toutes enregistrées dans des fichiers séparés, donc je cherche quelque chose que je peux répéter plusieurs fois. J'ai un chemin de dossier pop-up pour sélectionner l'emplacement et j'ai un nom de fichier construit dynamiquement, mais le copier/coller évite de me déposer.
Déchirant actuellement le peu de cheveux que j'avais après d'innombrables recherches sur Google, toute aide reçue avec reconnaissance.
Vous pouvez utiliser le code ci-dessous;
Sub testexport()
'Adpated from OzGrid;
' export Macro as CSV
Dim wsh As Worksheet
Set wsh = ThisWorkbook.Worksheets("PI_OUTPUT")
With wsh.Range("A2:X20000")
.AutoFilter 1, "<>" 'Filter to get only non-blank cells
'assuming there is no blank cell within a filled row:
wsh.Range(wsh.Cells(2, 1), wsh.Cells(24, 2).End(xlDown)).Copy 'copy non-blank cells
'.AutoFilter should not cancel autofilter as it clears cutcopy mode
End With
Application.DisplayAlerts = False 'avoid from "save Prompt window"
Workbooks.Add
ActiveSheet.Paste
'Saves to C drive as Book2.csv
ActiveSheet.SaveAs Filename:= _
"C:\Book2.csv" _
, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
wsh.Range("A2:X20000").AutoFilter 'clear the filter
Application.DisplayAlerts = True 'set to default
End Sub