VBA:如何将Excel工作簿保存到桌面而不pipe用户?

我有一个Excel工作簿上的表单button单击我需要将工作簿的副本保存到用户的桌面。

最初一切都将在一个共享的networking文件夹,但现在我有大约6个不同的用户,当他们点击button,我需要将工作簿保存到他们各自的桌面。

他们的方式(编码方式)保存到机器桌面,而不必指定个人用户(这将需要我维护6个不同的工作簿文件)?

我认为这是获得桌面path的最可靠的方法,而这个path并不总是和用户名一样。

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

你已经提到他们每个人都有自己的机器,但是如果他们需要login同事机器,然后使用该文件,通过“C:\ Users \ Public \ Desktop \”保存它将使其可用不同的用户名

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

我不确定这是否是一项要求,但可能有帮助!

不知道这是否仍然相关,但我用这种方式

 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