【发布时间】:2020-05-28 03:49:44
【问题描述】:
我有一个包含多张工作表的 excel,我尝试使用 vba 保存除 4 之外的每张工作表。 问题是,如果我尝试使用 .csv 以外的任何其他格式,它会保存整个 excel,从而将工作表保存为活动的。
这是我正在使用的代码(带有 csv 的代码):
Public Sub SaveWorksheetsAsCsv()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim xDir As String
Dim folder As FileDialog
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
For Each s In Worksheets
If s.Name <> "Template" And s.Name <> "Interface" And s.Name <> "Accounts" And s.Name <> "Instr" Then
s.SaveAs xDir & "\" & s.Name, xlCSV
End If
Next
For Each s In Worksheets
If s.Name <> "Template" And s.Name <> "Interface" And s.Name <> "Accounts" And s.Name <> "Instr" Then
s.Delete
End If
Next s
End Sub
我想将它保存为 xlsm,这样它将保留我在主 excel 中的所有格式。(自动适应列和所有边框)。
我不知道它有什么问题......
【问题讨论】:
-
是的,我认为
Worksheet.SaveAs有这种行为。一种解决方法是Copy工作表(创建一个新工作簿),然后保存ActiveWorkbook。请注意,如果您只想保留格式,可以使用xlsx而不是xlsm。 -
CSV 文件只有一张。如果您加载包含多张工作表的内容,由于文件类型的原因,它们以及任何格式都将被删除。 .xl* 文件类型将保存整个工作簿。您可以
Sheets.Movefor one sheet 和.SaveAs新工作簿,而不用旧工作簿保存任何内容。正如 BigBen 所说,您也可以Sheets.Copy。 -
@Cyril Cool,sheets.move 效果很好。