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
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
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 :-)
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
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)
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