2013-07-09 38 views
12

Tôi có một Sổ làm việc Excel có trên Nút Biểu mẫu, tôi cần lưu bản sao sổ làm việc vào Màn hình của người dùng.VBA: Làm thế nào để lưu sổ làm việc Excel vào máy tính để bàn bất kể người dùng?

Ban đầu mọi thứ sẽ nằm trong thư mục Mạng chia sẻ, nhưng bây giờ tôi có khoảng 6 người dùng khác nhau khi họ nhấp vào nút, tôi cần lưu sổ làm việc vào Máy tính để bàn riêng của họ.

Là cách của họ (mã hóa khôn ngoan) để lưu vào máy tính để bàn mà không cần phải chỉ định người dùng cá nhân (mà sẽ yêu cầu tôi phải duy trì 6 tệp sổ làm việc khác nhau)?

Trả lời

26

Tôi nghĩ đây là cách đáng tin cậy nhất để có được đường dẫn máy tính để bàn không phải lúc nào cũng giống như tên người dùng.

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

havent nghĩ về điều đó! +1 –

+1

@mehow Tôi chỉ nghĩ về nó trong quá khứ vì không phải của tôi;) – SWa

+0

Có cần phải có bất kỳ tham chiếu đặc biệt nào, các tệp, cho phép cần thiết để chạy mã đó trên máy người dùng của tôi không? –

0

Bạn đã nói rằng họ từng có máy riêng của họ, nhưng nếu họ cần phải đăng nhập vào một máy đồng nghiệp, và sau đó sử dụng các tập tin, lưu nó thông qua "C: \ Users \ Public \ Desktop \ "sẽ làm cho nó khả dụng cho các tên người dùng khác nhau.

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

Tôi không chắc đây có phải là yêu cầu hay không nhưng có thể hữu ích!

+0

Cảm ơn ghi chú, và chắc chắn có điều đáng xem xét trong hoàn cảnh bình thường. Những người dùng này là thanh tra viên, khoảng 6, mỗi người phụ trách khu vực của họ trong tiểu bang. Khả năng của họ bao giờ đăng nhập vào một máy thanh tra khác là rất khó có khả năng không bao giờ. –

-2

Không chắc chắn nếu điều này vẫn còn có liên quan, nhưng tôi sử dụng cách này

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 

này chút sau tôi lưu file dưới dạng PDF, nhưng có thể thay đổi cho phù hợp với

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

Đây không phải là cách chống đạn để thực hiện nó - hàm của bạn 'GetUserID()' trả về tên đăng nhập của người dùng (tuy nhiên thư mục hồ sơ người dùng có thể không được gọi cùng một điều trong một số trường hợp) – CrazyTim

Các vấn đề liên quan