vba:以 xlsm 文件格式保存而不更改活动工作簿

Posted

技术标签:

【中文标题】vba:以 xlsm 文件格式保存而不更改活动工作簿【英文标题】:vba: saveas in xlsm fileformat without changing the active workbook 【发布时间】:2014-08-08 23:52:46 【问题描述】:

我有以下代码制作活动工作簿的副本并为每个副本赋予不同的名称。它运作良好,但我真的需要运行代码的原始工作表才能保持活动状态。

如果我改用SaveCopyAs 函数,则复制的文件没有正确的文件格式(.xlsm),并且您不能像saveAs 函数中那样将文件格式指定为参数。

http://msdn.microsoft.com/en-us/library/bb178003%28v=office.12%29.aspx

http://msdn.microsoft.com/en-us/library/office/ff841185%28v=office.15%29.aspx

    Sub makeCopies()
        Dim name As Range, team As Range
        Dim uName As String, fName As String, fFormat As String
        Dim location as string, nName as string

        location ="c:\test\"
        nName = "Test - Team "
        Set team = Names("Team").RefersToRange

        For Each name In team
            uName = nName & name.Value
            fName = location & uName
            fFormat = ThisWorkbook.FileFormat
            ActiveWorkbook.SaveAs FileName:=fName, FileFormat:=fFormat
        Next name
   End sub

我能想到的最好方法是先用saveCopyAs 制作副本,然后访问每个文件,用saveAs 将其保存为正确的文件格式,然后关闭它,但这意味着双重工作,我会真的很讨厌这样做。有没有更聪明的方法?

【问题讨论】:

好吧,碰巧我确实这样做了。这正是 FileFormat 参数的作用,请参考我在帖子中的第二个链接和msdn.microsoft.com/en-us/library/office/… 【参考方案1】:

这对我有用。 SaveCopyAs 以完全相同的格式保存工作簿。

Sub makeCopies()
    Dim name As Range, team As Range
    Dim uName As String, fName As String, tempname As String
    Dim location As String, nName As String

    location = "C:\Test\"
    nName = "Test - Team "
    Set team = ThisWorkbook.Names("Team").RefersToRange

    For Each name In team
        uName = nName & name.Value
        fName = location & uName & "." & _
            Split(ThisWorkbook.FullName, ".") _
            (UBound(Split(ThisWorkbook.FullName, ".")))
        ThisWorkbook.SaveCopyAs fName
    Next name
End Sub

这是你正在尝试的吗?尝试和测试。

【讨论】:

如果这可行的话很有趣。我会试一试然后回来。不过,我认为您在 tempname var 上犯了一个小错误。你没有在任何地方使用它...... @Miqi180 是的,我使用另一种方法对其进行了测试 :) 如果我认为这可行,那么我们不必求助于它:D hrrmm,我猜我的电脑一定是得了流感什么的,因为我发誓我首先尝试的是 saveCopyAs 功能,包括将文件扩展名设置为字符串 (".xlms") 和将其添加到文件名的末尾。这完全等同于您正在做的事情,除了您的代码是动态的并且适用于所有文件扩展名。无论如何,它现在按预期工作。谢谢。好决定! :)

以上是关于vba:以 xlsm 文件格式保存而不更改活动工作簿的主要内容,如果未能解决你的问题,请参考以下文章

excel2007以后的文件格式

excel2010每次写好VBA运行完成之后,保存为xlsm格式。关闭后就打不开了,也不能创建副本?

打开 Excel VBA 2016 .xlsm 文件

Excel VBA 入门

VBA:保存而不覆盖现有文件

保存时将 .xlsm 的副本创建为 .xlsx