2013-07-09 12 views
12

Mam skoroszyt programu Excel, który na przycisku formularza Kliknij muszę zapisać kopię skoroszytu na pulpicie użytkownika.VBA: Jak zapisać skoroszyt programu Excel na komputer, niezależnie od użytkownika?

Pierwotnie wszystko było w udostępnionym folderze sieciowym, ale teraz mam około 6 różnych użytkowników, którzy po kliknięciu przycisku muszą zapisać skoroszyt na swoich indywidualnych komputerach.

Czy ich sposób (zgodnie z kodowaniem) do zapisywania na pulpicie komputera bez konieczności określania indywidualnych użytkowników (co wymagałoby ode mnie utrzymania 6 różnych plików skoroszytu)?

Odpowiedz

26

Myślę, że jest to najbardziej niezawodny sposób uzyskania ścieżki pulpitu, która nie zawsze jest taka sama jak nazwa użytkownika.

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

miałaś myśli o tym! +1 –

+1

@ o ile tylko myślałem o tym w przeszłości, ponieważ moje nie jest;) – SWa

+0

Czy będą potrzebne specjalne referencje, pliki, umożliwiające uruchomienie tego kodu na moich komputerach użytkowników? –

0

Wspominałeś, że każdy z nich ma swoje własne maszyny, ale jeśli trzeba zalogować się na komputerze współpracowników, a następnie użyć pliku, zapisywanie go przez „C: \ Users \ Public \ Desktop \ "udostępni je różnym nazwom użytkowników.

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

Nie jestem pewien, czy byłby to wymóg, ale może pomóc!

+0

Dzięki za notatkę, a na pewno coś wartego rozważenia w normalnych okolicznościach. Tymi użytkownikami są inspektorzy, około 6, każdy odpowiada za swój obszar w stanie. Prawdopodobieństwo, że kiedykolwiek zalogują się oni na innej maszynie inspektorów jest prawdopodobnie mało prawdopodobne. –

-2

Nie wiem, czy to jest nadal aktualne, ale używam ten sposób

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 

Następny bit zapisać jako plik PDF, ale mogą ulec zmianie w zależności

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

To nie jest sposób na kuloodporne zrobienie tego - twoja funkcja 'GetUserID()' zwraca nazwę logowania użytkowników (jednak folder profilu użytkownika może nie być nazwany tym samym w pewnych okolicznościach) – CrazyTim

Powiązane problemy