如何将Excel工作簿保存到桌面,而不考虑用户?

25

我有一个Excel工作簿,当用户点击表单按钮时,我需要将工作簿的副本保存到其桌面上。

最初所有内容都将放在共享网络文件夹中,但现在我有大约6个不同的用户,当他们点击按钮时,我需要将工作簿保存到他们各自的桌面上。

是否有一种(编码)方法可以将文件保存到机器桌面上,而无需指定每个用户(这将要求我维护6个不同的工作簿文件)?

3个回答

49

我认为这是获取桌面路径最可靠的方法,因为它并不总是与用户名相同。

MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")

还没有考虑过那个!+1 - user2140173
1
@mehow 我之前只是想过,因为我的不是 ;) - SWa
1
在用户的机器上运行该代码是否需要任何特殊的引用、文件或启用? - Analytic Lunatic
3
不,Windows 脚本运行时是标准 Windows 安装的一部分。 - SWa
好的,谢谢!看起来工作正常 :) 还有一个问题。我有一个归档功能,基本上做相同的事情,但是将文件放入一个名为FileName-Date的文件夹中。你知道怎么获取系统用户名以使文件名更加独特吗?例如 FileName-User-Date.xlsm - Analytic Lunatic
1
使用mehow的技巧如下:Environ("username") - SWa

0

你提到他们每个人都有自己的电脑,但如果他们需要登录到同事的电脑上并使用文件,通过“C:\Users\Public\Desktop\”保存文件将使其对不同的用户名可用。

Public Sub SaveToDesktop()
    ThisWorkbook.SaveAs Filename:="C:\Users\Public\Desktop\" & ThisWorkbook.Name & "_copy", _ 
    FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub

我不确定这是否是必需的,但可能会有所帮助!


谢谢您的留言,这确实是在正常情况下值得考虑的事情。这些用户是检查员,大约有6个人,每个人负责该州的自己的区域。他们很可能永远不会登录到其他检查员的计算机上。 - Analytic Lunatic

-3

不确定这是否仍然相关,但我使用这种方式

Public bEnableEvents As Boolean
Public bclickok As Boolean
Public booRestoreErrorChecking As Boolean   'put this at the top of the module

 Private Declare Function apiGetComputerName Lib "kernel32" Alias _
"GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Function GetUserID() As String
' Returns the network login name
On Error Resume Next
Dim lngLen As Long, lngX As Long
Dim strUserName As String
strUserName = String$(254, 0)
lngLen = 255
lngX = apiGetUserName(strUserName, lngLen)
If lngX <> 0 Then
    GetUserID = Left$(strUserName, lngLen - 1)
Else
    GetUserID = ""
End If
Exit Function
End Function

接下来的部分我将文件保存为PDF格式,但可以根据需要进行更改

Public Sub SaveToDesktop()
Dim LoginName As String
LoginName = UCase(GetUserID)

ChDir "C:\Users\" & LoginName & "\Desktop\"
Debug.Print LoginName
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users\" & LoginName & "\Desktop\MyFileName.pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
    True
End Sub

1
这不是一种万无一失的方法 - 您的函数 GetUserID() 返回用户的登录名(但在某些情况下,用户配置文件文件夹可能不叫同样的名称)。 - CrazyTim

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