2013-07-09 16 views
12

Ho una cartella di lavoro di Excel che sul pulsante del modulo clic ho bisogno di salvare una copia della cartella di lavoro sul desktop dell'utente.VBA: come salvare la cartella di lavoro di Excel sul desktop indipendentemente dall'utente?

Originariamente tutto sarebbe stato su una cartella di rete condivisa, ma ora ho circa 6 utenti diversi che quando fanno clic sul pulsante, ho bisogno di salvare la cartella di lavoro sui loro desktop individuali.

È un modo (per la codifica) di salvare sulla macchina Desktop senza dover specificare singoli utenti (il che richiederebbe il mantenimento di 6 diversi file della cartella di lavoro)?

risposta

26

Penso che questo sia il modo più affidabile per ottenere il percorso del desktop che non è sempre uguale al nome utente.

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

havent pensato a questo! +1 –

+1

@mehow L'ho solo pensato in passato come il mio non lo è;) – SWa

+0

Dovranno esserci riferimenti speciali, file, abilitazione necessaria per eseguire quel codice sulle macchine degli utenti? –

0

Hai detto che ognuno ha le proprie macchine, ma se hanno bisogno di accedere a una macchina di collaboratori, e quindi utilizzare il file, il salvataggio attraverso "C: \ Users \ Public \ Desktop \ "lo renderà disponibile a diversi nomi utente.

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

Non sono sicuro se questo sarebbe un requisito, ma potrebbe essere d'aiuto!

+0

Grazie per la nota, e sicuramente qualcosa che vale la pena considerare in circostanze normali. Questi utenti sono ispettori, circa 6, ciascuno responsabile della propria area nello stato. È molto improbabile che la probabilità che si colleghino a un'altra macchina degli ispettori probabilmente non lo sarà mai. –

-2

Non so se questo è ancora rilevante, ma io uso questo modo

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 

Questo bit successivo risparmio file come PDF, ma può cambiare in base alle

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

Questo non è un modo per farlo funzionare a prova di proiettile - la tua funzione 'GetUserID()' restituisce il nome di accesso degli utenti (tuttavia la cartella del profilo utente potrebbe non essere chiamata la stessa cosa in alcune circostanze) – CrazyTim

Problemi correlati