24

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

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

他们是一种无需指定单个用户(这将需要我维护 6 个不同的工作簿文件)就可以保存到计算机桌面的方式(编码方式)吗?

4

3 回答 3

48

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

MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")
于 2013-07-09T14:59:12.143 回答
0

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

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

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

于 2013-07-10T09:44:33.503 回答
-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
于 2015-03-15T11:33:06.637 回答