将VBA文件格式另存为.xls。

3

我有一个宏来将活动工作表保存到新工作簿中。但是,它想要将其保存为 .xlsx 格式,而我需要将其保存为 .xls 格式。

Private Sub SaveBarList_Click()
ActiveSheet.Copy
With ActiveSheet.UsedRange
    .Copy
    .PasteSpecial xlValues
    .PasteSpecial xlFormats
End With
Dim strDir As String

'Show standard save as dialogue box
With Application.FileDialog(msoFileDialogSaveAs)
    If .Show = -1 Then
        strDir = .SelectedItems(1)
    End If
End With

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename, FileFormat:=-4143
Application.DisplayAlerts = True

ActiveWorkbook.Close

End Sub

我建议使用枚举xlWorkbookNormal代替值(-4143),这样更易读。话虽如此,你用的数字是正确的。你尝试过从文件名中去掉额外的“x”,然后在Excel中打开文件吗?我猜你的FileDialog会返回一个带有“.xlsx”扩展名的完整名称,即使格式正确,Excel也只是按照给定的名称保存它。如果你可以用“.xls”扩展名打开它,在保存之前改变扩展名。 - FreeMan
尝试使用文件格式57,并将保存代码行编辑为ActiveWorkbook.SaveAs "C:\Users\YourUserName\Desktop\FILENAME.xlsm",fileformat:=57 - BruceWayne
@user3578951,我猜xlsm是个打字错误?另外,57看起来是Mac特定的数字(没有Win Excel2011),而且OP也没有具体说明,所以你可能是正确的。57的Win版本是56,它将是xlExcel8,这也可能有效。 - FreeMan
2
我在网上找到了一个解决方案,使用了这段代码。它似乎有效。`Private Sub SaveBarList_Click() ActiveSheet.Copy With ActiveSheet.UsedRange .Copy .PasteSpecial xlValues .PasteSpecial xlFormats End With Dim fname fname = Application.GetSaveAsFilename(InitialFileName:="", FileFilter:="Excel Files (*.XLS), *.XLS", Title:="另存为") If fname = False Then Exit Sub ActiveWorkbook.SaveAs Filename:=fnameActiveWorkbook.CloseEnd Sub` - Mark Smith
1
为什么不把你的代码作为答案发布呢?你是被允许这样做的(尽管可能要等到明天)。这样更易读,一旦你接受了自己的答案,其他人就更容易找到并使用它。 - FreeMan
显示剩余4条评论
1个回答

3
ActiveWorkbook.SaveAs方法有一个成员,允许不同的文件格式:XlFileFormat枚举。除了.xlsx格式之外,还有其他几种格式可用,包括.xls。
请注意,MSDN关于.SaveAs的文章(上面的第一个链接)说:“对于现有文件,默认格式是指定的最后一个文件格式; 对于新文件,默认格式是使用的Excel版本的格式。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接