web-dev-qa-db-fra.com

Exporter une plage (d'une partie) d'une feuille Excel vers CSV avec VBA

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.

6

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 
8
M--