我有一个Excel工作簿,在表单按钮上单击我需要将工作簿的副本保存到用户的桌面。
最初一切都将在共享的网络文件夹中,但现在我有大约6个不同的用户,当他们点击按钮时,我需要将工作簿保存到他们各自的桌面。
他们是一种(编码方式)保存到机器桌面而无需指定个人用户(这需要我维护6个不同的工作簿文件)吗?
答案 0 :(得分:34)
我认为这是获取桌面路径的最可靠方式,并不总是与用户名相同。
MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")
答案 1 :(得分:0)
你已经提到他们每个人都有自己的机器,但如果他们需要登录一个同事机器,然后使用该文件,通过“C:\ Users \ Public \ Desktop \”保存它将使它可用于不同的用户名。
Public Sub SaveToDesktop()
ThisWorkbook.SaveAs Filename:="C:\Users\Public\Desktop\" & ThisWorkbook.Name & "_copy", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
我不确定这是否是一项要求,但可能有所帮助!
答案 2 :(得分:-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