Sauvegarder la feuille de travail excel dans les fichiers CSV avec le nom du fichier+le nom de la feuille de travail en utilisant VB [dupliquer]

cette question a déjà une réponse ici:

je suis très nouveau avec le codage VB, je suis en train d'essayer de sauver de multiples feuilles de travail de fichier excel à csv, Je ne sais pas pour faire ceci pour plusieurs feuilles, mais j'ai trouvé un moyen de faire pour simple fichier. J'ai trouvé du code sur ce site qui sont très utiles pour ce que j'essaie de faire, le seul problème est que les fichiers sont sauvegardés avec le nom de la feuille de travail , mais j'essaie de les sauvegarder avec le nom original du fichier et de la feuille de travail comme filename_worksheet name , j'ai essayé de le faire moi-même, mais continuez à faire des erreurs, pourriez-vous s'il vous plaît indiquer ce que je fais mal?

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 
21
demandé sur RoelF 2012-05-11 16:29:55
la source

5 ответов

je pense que c'est ce que vous voulez...

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
    Sheets(WS.Name).Copy
    ActiveWorkbook.SaveAs Filename:=SaveToDirectory & ThisWorkbook.Name & "-" & WS.Name & ".csv", FileFormat:=xlCSV
    ActiveWorkbook.Close savechanges:=False
    ThisWorkbook.Activate
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
30
répondu Ben Strombeck 2014-06-18 00:10:58
la source

j'ai eu un problème similaire. Les données dans une feuille de travail que je devais sauvegarder dans un fichier CSV séparé.

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

Ce qui fonctionne pour moi :-)

7
répondu Tudor 2014-03-25 14:14:48
la source

c'est 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
répondu Siddharth Rout 2012-05-11 16:58:19
la source

la meilleure façon de le savoir est d'enregistrer la macro et d'effectuer les étapes exactes et de voir quel code VBA il génère. vous pouvez alors aller et remplacer les bits que vous voulez faire Générique (i.e. noms de fichiers et trucs)

1
répondu Bek Raupov 2012-05-11 17:04:56
la source

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

j'ai ajouté ce qui suit au code et il a enregistré mon fichier comme csv. Merci pour ce code.Tout a fonctionné comme prévu.

ActiveWorkbook.SaveAs Filename:=SaveToDirectory & ThisWorkbook.Name & "-" & WS.Name & ".csv", FileFormat:=xlCSV
1
répondu RazaJ77 2014-06-17 20:59:40
la source

Autres questions sur