强制另存为,MS Excel VBA

4
我对MS Office产品中的VBA有些新手。我一直在寻找一些代码,可以强制用户“另存为”模板使用的.xls文件(但它不是实际的模板文件类型)
基本上,我有这个:
1. 用户打开.xls,在某些字段中输入数据,然后文件- > 另存为到他们自己的位置
2. 有时用户会点击保存,因此覆盖了我不想要的.xls文件。
我一直在研究一些想法,但我不确定如何最好地实现它。我认为当用户第一次打开.xls时提示其另存到新位置是最好的方法,但往前思考,如果他们已经将文件保存到新位置并决定编辑新文件,则希望他们此时能够“保存”,因为现在它是他们自己的文件,而不是原始文件。
如果有人能指出我的问题或者在我的逻辑上发现缺陷,我很想听听。
谢谢, Mike

将文件放在共享文件夹中并标记为只读,或者给予该文件夹只读访问权限?将该文件作为 Web 下载提供?这取决于你的具体情况。 - Tim Williams
这正是模板所用的。您打开模板,它会创建文件的副本,您必须将其保存为新工作簿。您必须有意地将新文件保存为模板,以重复您所描述的内容。 - JimmyPena
2个回答

6
我使用的是模板(但它不是实际的模板文件类型)
最简单的方法是将文件保存为“建议只读”。请参见快照。
这样,即使用户尝试进行“保存”,Excel也会自动提示进行“另存为”。
希望对您有所帮助。

如果我按照这种方式设置Excel,用户打开并“另存为”,那么新保存的电子表格是否允许您在此时“保存”?如果可以的话,那就太好了。 - Mike
@Mike:在上述情况下,您只能执行“另存为”操作 :) - Siddharth Rout

4

我同意其他人的观点,认为模板和只读是更好的选择,但如果你想自己创建,请看下面的例子。这个例子需要放在 ThisWorkbook 模块中。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Dim sNewName As String

    Cancel = True 'Cancel the save operation

    sNewName = Application.GetSaveAsFilename(Replace(Me.Name, ".xls", "1.xls"))

    If sNewName <> Me.FullName And sNewName <> "False" Then
        Application.EnableEvents = False
            Me.SaveAs sNewName
        Application.EnableEvents = True
    End If

End Sub

1
+1 这是另一个好的解决方案,但请记住,如果用户禁用宏,则此方法将无法工作。 - Reafidy

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