2014-12-02 24 views
6

Tôi cần truy cập qua VBA một thư mục được lưu trữ trên Máy chủ Tệp Mạng. Chỉ có thể truy cập thư mục bằng văn bản qua Tài khoản dịch vụ (khác với tài khoản người dùng thông thường) mà tôi có tên người dùng và mật khẩu.Truy cập Thư mục Mạng Chia sẻ

Qua giao diện người dùng, tôi có thể thấy thư mục đó và ánh xạ nó dưới dạng ổ đĩa cục bộ nhưng để truy cập nó bằng văn bản, tôi cần phải đăng xuất khỏi Windows và đăng nhập qua Tài khoản dịch vụ.

Có cách nào để truy cập thư mục mạng trong phiên người dùng bình thường nhưng mã hóa tên người dùng và mã pwd trong mã VBA không?

tôi đã cố gắng lập bản đồ các thư mục như ổ đĩa cục bộ với:

Set WshNetwork = CreateObject("WScript.Network") 
WshNetwork.MapNetworkDrive "S:", "\\corp-server\HostingFolder", False, Username, pwd 

nhưng đã không làm việc ("S" lái xe đã không ánh xạ). Nếu thay vào đó tôi làm tương tự nhưng không cung cấp Tên người dùng và mật khẩu:

Set WshNetwork = CreateObject("WScript.Network") 
WshNetwork.MapNetworkDrive "S:", "\\corp-server\HostingFolder" 

hoạt động hoàn hảo.

Tự hỏi bây giờ nếu điều tôi đang cố gắng thực sự có thể thực hiện được không? Nếu không, có cách nào khác không?

Cảm ơn

Trả lời

5

Bạn có thể tìm thấy this answer giá trị trong thử nghiệm của mình.

Về cơ bản, tôi sẽ kiểm tra một vài điều ...

  1. Hãy chắc chắn rằng bạn chưa kết nối với khu vực này bằng cách sử dụng hiện đăng nhập người dùng. Nếu có, bạn có thể nhận được thông báo lỗi như sau: enter image description here

  2. Đảm bảo bạn đang sử dụng cú pháp domain\username trong tên người dùng của mình.

Nếu không tôi nghĩ rằng bạn đang đi đúng hướng. Tôi đặt cùng một số mã mẫu dựa trên liên kết ở trên và có thể kết nối thành công với một mạng chia sẻ dưới tên người dùng khác và lặp qua danh sách tệp.

(Lưu ý các mẹo khác mà bạn không thực sự có để ánh xạ một ổ đĩa để thiết lập kết nối.)

Các mã sau đây là một thực sự nhanh chóng (làm việc) thực hiện VBA của mẫu niêm yết tại Access network share from within VBScript eg FileSystemObject

Public Sub TestNetShareName() 

    Dim NetworkObject As Object 
    Dim FSO As Object 
    Dim Directory As Object 
    Dim Filename As Object 
    Dim ServerShare As String 
    Dim UserName As String 
    Dim Password As String 

    ServerShare = "\\corp-server\HostingFolder" 
    UserName = "mydomain\myuser" 
    Password = "freddie123" 

    Set NetworkObject = CreateObject("WScript.Network") 
    Set FSO = CreateObject("Scripting.FileSystemObject") 

    NetworkObject.MapNetworkDrive "", ServerShare, False, UserName, Password 

    Set Directory = FSO.GetFolder(ServerShare) 
    For Each Filename In Directory.Files 
     Debug.Print Filename.Name 
    Next 

    Set Filename = Nothing 
    Set Directory = Nothing 
    Set FSO = Nothing 

    NetworkObject.RemoveNetworkDrive ServerShare, True, False 

    Set NetworkObject = Nothing 

End Sub 
+0

Công cụ tuyệt vời, cảm ơn! Vì tôi hiện đang làm việc tại nhà nên tôi chỉ có thể thử mã của bạn qua VPN và không hoạt động (trả về lỗi "tên người dùng hoặc mật khẩu sai"). Đã thử và không có tên miền trong tên người dùng. Tôi cũng có thể tạo lại lỗi của bạn ở trên (nhiều kết nối) bằng cách mở thư mục đích trong qua Explorer. Tôi cần bây giờ để kiểm tra khi trở lại trong văn phòng nhưng điều này âm thanh tổng thể tốt cho tôi và "phải" làm việc. Nếu bạn tin rằng có cái gì khác tôi có thể thử chỉ cho tôi biết nếu không hãy nói chuyện vào thứ hai! – cfugge

+0

Điều này làm việc hoàn hảo cho tôi. Cảm ơn rất nhiều vì một đoạn mã rất sạch sẽ. – cfugge

+0

Hey mã này thật tuyệt vời. Làm việc lần đầu với ít hoặc không có mát xa. Chúc mừng! –

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