我正在开发一个到目前为止无需宏即可运行的项目。在实现宏时,我的机器执行它们时没有错误,但是当在其他机器上为其他用户测试它时,它们在代码本身的随机点上出现问题 - 但总是停在“保存此文档”部分。我延长了与保存它相关的行,这给了我一个更好的方式来命名文件,但无法弄清楚为什么其他计算机在运行这些宏时会出现问题,而我的却没有。
下面的代码被严重破坏和拼凑在一起,但应该在用户桌面上创建一个文件,无论用户名如何,解决了我在多个用户具有不同保存路径时遇到的原始问题。它似乎在涉及实际保存文档的部分工作得很好 - 即,它使用我需要的两张表、格式和所有内容创建了一个新工作表,但抛出 1004 错误并且不保存/命名文档。感谢您的帮助,我对在 Excel 中使用宏还比较陌生。
Sub XWorkbook()
Dim SavePath As String
Dim File1 As String
Dim Filename As String
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\[MyFolderName]\"
If Dir(Path, vbDirectory) = "" Then MkDir Path
Application.DisplayAlerts = False
Worksheets(Array("[Sheet1]", "[Sheet2]")).Copy
With ActiveWorkbook
SavePath = "C:\Users\" & Environ("UserName") & "\Desktop\[MyFolderName]\[DocumentName]"
File1 = " "
Filename = File1 & " " & Format(Now(), "MM-DD-YYYY") & ".xlsm"
ActiveWorkbook.SaveAs SavePath & Filename, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End With
End Sub
我尝试延长负责使用 environ() 函数保存文档的部分,并添加一个部分来创建文件夹,以便每个用户*在其桌面上应该*有一个标准化文件夹,以消除特定用户拥有的任何问题不同的路径。除此之外,我一无所知。与所有其他用户一样,运行最新的 Office 365。调试时错误总是准确地指向这里:
ActiveWorkbook.SaveAs SavePath & Filename, FileFormat:=xlOpenXMLWorkbookMacroEnabled
我还确保所有用户将原始文件保存在本地,并在打开文档时启用宏。这些都是完全相同的戴尔 Thinkpad 型号,除了用户信息之外,几乎在所有方面都应该相似,我认为 environ() 会对此有所帮助。我见过一些类似的问题谈论驱动器映射,但据我所知,这已经被考虑在内,并且没有人应该有将日期“MM-DD-YYYY”连字符替换为斜杠的设置。有什么想法吗?
这对我有用:
Sub XWorkbook()
Dim wbPath As String, saveName As String
wbPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\MyFolderName\"
If Dir(wbPath, vbDirectory) = "" Then MkDir wbPath
saveName = wbPath & "DocumentName " & Format(Now(), "MM-DD-YYYY") & ".xlsm"
'assuming the sheets are in the same workbook as this code...
ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2")).Copy
'save the new workbook with the sheet copies
ActiveWorkbook.SaveAs Filename:=saveName, _
FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub