web-dev-qa-db-fra.com

VBA Enregistrement d'une seule feuille au format CSV (classeur entier)

Je sais qu’il existe de nombreuses entrées telles que enregistrer des feuilles Excel individuelles au format csv Et exporter chaque feuille dans un fichier CSV séparé - Mais je souhaite enregistrer une feuille de calcul unique dans un classeur . 

Mon code dans mon fichier xlsm a un params et une fiche technique. Je crée une copie des données avec les valeurs collées dans la feuille de travail, puis je veux l'enregistrer au format csv. Actuellement, tout mon classeur change de nom et devient un csv.

Comment "enregistrer en tant que csv" une seule feuille dans un classeur Excel?

Existe-t-il un Worksheet.SaveAs ou dois-je déplacer ma feuille de données dans un autre classeur et l'enregistrer de cette manière?

Échantillon de code

' [Sample so some DIMs and parameters passed in left out] 
Dim s1 as Worksheet
Dim s2 as Worksheet

Set s1 = ThisWorkbook.Sheets(strSourceSheet)
' copy across
s1.Range(s1.Cells(1, 1), s1.Cells(lastrow, lastcol)).Copy

' Create new empty worksheet for holding values
Set s2 = Worksheets.Add

s2.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

' save sheet
s2.Activate
strFullname = strPath & strFilename


' >>> BIT THAT NEEDS FIXIN'
s2.SaveAs Filename:=strFullname, _
     FileFormat:=xlCSV, CreateBackup:=True

' Can I do Worksheets.SaveAs?

Utilisation de Windows 10 et Office 365

12
micstr

Ce code fonctionne bien pour moi.

Sub test()

Application.DisplayAlerts = False

ThisWorkbook.Sheets(strSourceSheet).Copy
ActiveWorkbook.SaveAs Filename:=strFullname, FileFormat:=xlCSV, CreateBackup:=True
ActiveWorkbook.Close

Application.DisplayAlerts = True

End Sub

Il crée une copie de l'intégralité de la feuille strSourceSheet, qui ouvre un nouveau classeur que nous pouvons ensuite enregistrer en tant que fichier .csv, puis ferme le fichier .csv récemment enregistré, sans modifier le nom du fichier d'origine.

14
Alex4336

Vous devez simplement enregistrer le classeur au format CSV . Excel affichera une boîte de dialogue vous avertissant que vous enregistrez sur une seule feuille, mais vous pouvez supprimer cet avertissement avec Application.DisplayAlerts = False.

N'oubliez pas de le remettre à la vérité si.

1
PaulG

C'est assez générique

Sub WriteCSVs()

Dim mySheet As Worksheet
Dim myPath As String

'Application.DisplayAlerts = False

For Each mySheet In ActiveWorkbook.Worksheets

    myPath = "\\myserver\myfolder\"

    ActiveWorkbook.Sheets(mySheet.Index).Copy
    ActiveWorkbook.SaveAs Filename:=myPath & mySheet.Name, FileFormat:=xlCSV, CreateBackup:=True
    ActiveWorkbook.Close

Next mySheet

'Application.DisplayAlerts = True

End Sub
0
Steve B