我有一个 Excel 工作簿,单击表单按钮我需要将工作簿的副本保存到用户的桌面。
最初所有内容都将位于共享网络文件夹中,但现在我有大约 6 个不同的用户,当他们单击按钮时,我需要将工作簿保存到他们各自的桌面。
他们是一种无需指定单个用户(这将需要我维护 6 个不同的工作簿文件)就可以保存到计算机桌面的方式(编码方式)吗?
我认为这是获取与用户名并不总是相同的桌面路径的最可靠方法。
MsgBox CreateObject("WScript.Shell").specialfolders("Desktop")
您已经提到他们每个人都有自己的机器,但是如果他们需要登录到同事的机器上,然后使用该文件,通过“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