2015-12-08 180 views
0

我的工作场所正在推出一些Microsoft Office的大型更新。我试图设置一个VBA宏在每个人的计算机上运行,​​以创建一个具有Normal.dotm副本的新文件夹,以便如果(上帝禁止)出现问题,我们可以恢复Normal.dotm。这很重要,因为每个人都有不同的功能区布局以及我们不想丢失的不同的宏和设置。Word 2013,VBA创建Normal.dotm副本

我的问题是我有一个功能上很好的宏,但是当我在Normal.dotm上尝试它时,它给出了权限被拒绝的错误,因为FileCopy功能无法在Normal.dotm上工作。

代码:

Private Sub CopyFiles_Click() 
sUserName = Environ$("username") 

Dim BackupDir As String 
BackupDir = "C:\Users\" + sUserName + "\Desktop\Backup for Normal - DO NOT DELETE" 

If FileFolderExists(BackupDir) Then 
Else 
    MkDir BackupDir 
End If 

If FileFolderExists("C:\Users\" + sUserName + "\AppData\Roaming\Microsoft\Templates\Normal.dotm") Then 
    FileCopy "C:\Users\" + sUserName + "\AppData\Roaming\Microsoft\Templates\Normal.dotm", (BackupDir + "\Normal.dotm") 
End If 

End Sub 

我有“FileFolderExists”的功能,我只是没有包括节省空间(正常工作)

我的问题是,有没有什么办法解决这个问题(找了一段时间,空手而过),还是有更好的方法来做到这一点?

+0

您的问题是的Normal.dotm被 “锁定” 在运行Word时。如果你运行这个代码,例如,Excel中的Word未运行,它可能会工作......“更好的方式来做到这一点”取决于你的公司是如何设置的。是否有一个中央IT管理部门来管理安装,用户配置文件等?如果是的话,那么“组策略”将是应该能够备份(和恢复)用户的“漫游”文件夹中的文件的方式。 –

回答

0

试试这个VBScript中(不VBA)

Dim sUserName 
sUserName = CreateObject("WScript.Network").UserName 

Dim BackupDir 
BackupDir = "C:\Users\" + sUserName + "\Desktop\Backup for Normal - DO NOT DELETE" 

dim filesys 

set filesys=CreateObject("Scripting.FileSystemObject") 
on error resume next 
filesys.CreateFolder BackupDir 
on error goto 0 
filesys.CopyFile "C:\Users\" & sUserName & "\AppData\Roaming\Microsoft\Templates\Normal.dotm", (BackupDir & "\Normal.dotm")