如何使Excel VBA自动执行所有最终用户

我写了下面的代码,以便当Excel电子表格被closures时,它将更新它的名称与当前的date和时间:

Private Sub Workbook_BeforeClose(Cancel As Boolean) If ThisWorkbook.Name = "Name_Last Opened-" & Format(Date, "MM-DD-YYYY") & _ "_" & Format(Time, "HH.MM") & ".xls" Then Else ThisWorkbook.SaveAs Filename:="\\C:\... Name_Last Opened-" & _ Format(Date, "MM-DD-YYYY") & "_" & Format(Time, "HH.MM") & ".xls" FName = Sheets("Name").Range("D1").Text Kill FName End If End Sub Private Sub Workbook_Open() Range("A1").Select ActiveCell.FormulaR1C1 = ThisWorkbook.Name End Sub 

此外,代码位于MS Excel对象 – ThisWorkbook下的VBAProject(文件的名称)。

这个代码完全适合我或创build它的工作站; 然而,对于任何打开它的人来说,它并不会执行。 任何人都知道如何让代码执行任何时候从任何电脑打开和closures电子表格,不只是我的?

谢谢,

DFM

Excel的安全设置可能不允许其他人的计算机运行可能被解释为有风险的恶意软件的脚本。 也许你很久以前就改变了你的安全设置,你忘记了。 查看是否可以修改其他用户的安全设置,以查看是否会使工作簿上的macrosclosures。

“任何人都知道如何让代码在电子表格从任何计算机打开和closures时执行,而不仅仅是我的?

除非您确保每个可能的用户都有macros安全设置,以使您的macros能够执行,否则我不认为可以100%确定地完成这项工作。

假设你可以通过那个,你可能应该检查用户是否都在C:\上使用相同的硬编码path的工作表。 如果他们从不同的位置打开工作簿,会发生什么情况?

也:

 FName = Sheets("Name").Range("D1").Text 

从一个地方获得价值

 Range("A1").Select ActiveCell.FormulaR1C1 = ThisWorkbook.Name 

正在把它放在另一个。

我想我会尝试类似下面的(从你的代码中假设你实际上只是想改变文件名,如果它从当前时间的分钟改变以来没有改变):

 Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim dateTime As String Dim oldPath As String Dim newPath As String dateTime = Format(Now, "MM-DD-YYYY_HH.MM") ' Format the while thing in one string - once With ThisWorkbook oldPath = .FullName ' what is it called now, and where did it come from? newPath = .Path & "\" & "Name_Last Opened-" & dateTime & ".xls" ' what should it be called now? If oldPath <> newPath Then ' only do something if not saved in last minute - is that what you really want? .SaveAs Filename:=newPath Kill oldPath End If End With End Sub 

Date()函数需要pipe理员权限来运行..所以如果你的用户是非pipe理员,那么它将会失败。 而是使用now()。 大多数情况下,这是我们通常忘记的事情,因为我们(开发工具的人员)可以通过我们的PC访问pipe理员

基本上,您不能确保所有的用户将a)具有低或中等的macros安全设置,和b)如果设置为中等,打开文件时启用它们。

创build你自己的证书似乎是一个明显的答案,但在实践中,我发现由此产生的信息和警告对于一些最终用户来说更是令人困惑/可怕,从而导致与macros观安全相同的情况。 第三方证书可以避免这种情况,但对于企业环境中的Excel工作簿而言,它们几乎可以肯定是过度的。

我需要用户启用VBA的function是在保存时将所有工作表设置为xlveryhidden ,除了一个自定义locking工作表,只有一个说明必须启用macros的说明以及有关如何执行此操作的简要指南。 这个表是隐藏的,其他的是通过工作簿的workbook_open过程来恢复的,如果VBA被禁用的话,这些东西当然不会被触发。