2013-07-09 279 views
12

我有一個Excel工作簿,在表單按鈕上單擊我需要將工作簿的副本保存到用戶的桌面。VBA:如何將Excel工作簿保存到桌面而不管用戶?

本來一切都將是一個共享的網絡文件夾,但現在我有大約6個不同的用戶,當他們按一下按鈕,我需要將工作簿保存到他們的個人桌面。

是他們的一種方式(編碼明智)保存到本機桌面,而無需指定具體的用戶(這需要我保持6個不同的工作簿文件)?

回答

26

我認爲這是最可靠的方式來獲得,這並不總是一樣的用戶名桌面路徑。

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

還沒有想過這個問題! +1 – 2013-07-09 15:01:51

+1

@mehow我只是想過這個問題在過去像我不是;) – SWa

+0

是否有需任何特殊的參考文獻,文件,使需要在我的用戶的機器上運行的代碼? –

0

你提到了,他們每個人都有自己的機器,但如果他們需要登錄到一個同事的機器,然後使用該文件,將其保存到「C:\用戶\公用\桌面\「將使其可用於不同的用戶名。

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

我不確定這是否是需求,但可能有幫助!

+0

謝謝你的筆記,當然值得考慮的在正常情況下。這些用戶是督察員,大約6人,每個負責本州自己的地區。他們登錄另一臺檢查機的可能性極不可能永遠不會。 –

-2

不知道這仍然是相關的,但我用這樣的方式

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 
+0

這不是一個防彈的方法 - 你的函數GetUserID()返回用戶登錄名(但是在某些情況下,用戶配置文件文件夾可能不會被調用相同的東西) – CrazyTim

相關問題