web-dev-qa-db-fra.com

Enregistrement de la feuille de calcul Excel dans des fichiers CSV avec le nom de fichier + nom de la feuille de calcul avec VB

Je suis très nouveau avec VB coding, j'essaye de sauvegarder plusieurs feuilles de calcul de fichiers Excel au format CSV, je ne sais pas le faire pour plusieurs feuilles, mais j'ai trouvé un moyen de le faire pour J'ai trouvé du code sur ce site qui est très utile pour ce que j'essaie de faire, le seul problème est que les fichiers sont enregistrés avec le nom de la feuille de calcul, mais j'essaie de les enregistrer avec le nom du fichier d'origine et de la feuille de calcul, tel que filename_worksheet name, J’ai essayé de le faire moi-même, mais je continue à avoir des erreurs, pourriez-vous me dire ce que je ne fais pas?

Le code que j'utilise est le suivant:

   Public Sub SaveWorksheetsAsCsv()

   Dim WS As Excel.Worksheet
   Dim SaveToDirectory As String

   Dim CurrentWorkbook As String
   Dim CurrentFormat As Long

   CurrentWorkbook = ThisWorkbook.FullName
   CurrentFormat = ThisWorkbook.FileFormat
   ' Store current details for the workbook
   SaveToDirectory = "H:\test\"
   For Each WS In ThisWorkbook.Worksheets
   WS.SaveAs SaveToDirectory & WS.Name, xlCSV
   Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub 
25
Achak

Je pense que c'est ce que tu veux ...

Sub SaveWorksheetsAsCsv()

Dim WS As Excel.Worksheet
Dim SaveToDirectory As String

Dim CurrentWorkbook As String
Dim CurrentFormat As Long

CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
' Store current details for the workbook
SaveToDirectory = "H:\test\"

For Each WS In Application.ActiveWorkbook.Worksheets
    WS.SaveAs SaveToDirectory & WS.Name, xlCSV
Next

Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=CurrentWorkbook, FileFormat:=CurrentFormat
Application.DisplayAlerts = True
' Temporarily turn alerts off to prevent the user being prompted
'  about overwriting the original file.

End Sub
39
Ben Strombeck

J'avais un problème similaire. Données dans une feuille de travail que je devais enregistrer dans un fichier CSV distinct.

Voici mon code derrière un bouton de commande


Private Sub cmdSave()
    Dim sFileName As String
    Dim WB As Workbook

    Application.DisplayAlerts = False

    sFileName = "MyFileName.csv"
    'Copy the contents of required sheet ready to paste into the new CSV
    Sheets(1).Range("A1:T85").Copy 'Define your own range

    'Open a new XLS workbook, save it as the file name
    Set WB = Workbooks.Add
    With WB
        .Title = "MyTitle"
        .Subject = "MySubject"
        .Sheets(1).Select
        ActiveSheet.Paste
        .SaveAs "MyDirectory\" & sFileName, xlCSV
        .Close
    End With

    Application.DisplayAlerts = True
End Sub

Cela fonctionne pour moi :-)

7
Tudor

Est-ce ce que vous essayez?

Option Explicit

Public Sub SaveWorksheetsAsCsv()
    Dim WS As Worksheet
    Dim SaveToDirectory As String, newName As String

    SaveToDirectory = "H:\test\"

    For Each WS In ThisWorkbook.Worksheets
        newName = GetBookName(ThisWorkbook.Name) & "_" & WS.Name
        WS.Copy
        ActiveWorkbook.SaveAs SaveToDirectory & newName, xlCSV
        ActiveWorkbook.Close Savechanges:=False
    Next
End Sub

Function GetBookName(strwb As String) As String
    GetBookName = Left(strwb, (InStrRev(strwb, ".", -1, vbTextCompare) - 1))
End Function
2
Siddharth Rout

Le meilleur moyen de le savoir consiste à enregistrer la macro et à exécuter les étapes exactes pour voir quel code VBA est généré. vous pouvez alors remplacer les bits que vous voulez rendre génériques (c'est-à-dire les noms de fichiers et autres)

1
Bek Raupov

Le code ci-dessus fonctionne parfaitement avec un défaut mineur; le fichier résultant n'est pas enregistré avec une extension .csv. - Tensigh il y a 2 jours

J'ai ajouté ce qui suit au code et cela a sauvegardé mon fichier en tant que csv. Merci pour ce morceau de code. Tout a fonctionné comme prévu.

ActiveWorkbook.SaveAs Filename:=SaveToDirectory & ThisWorkbook.Name & "-" & WS.Name & ".csv", FileFormat:=xlCSV
1
RazaJ77