2014-12-02 3 views
6

VBA를 통해 네트워크 파일 서버에서 호스팅되는 폴더에 액세스해야합니다. 이 폴더는 사용자 이름과 비밀번호가있는 서비스 계정 (일반 사용자 계정과 다른)을 통해서만 서면으로 액세스 할 수 있습니다.공유 네트워크 폴더에 액세스

UI를 통해 해당 폴더를 볼 수 있으며 로컬 드라이브로 매핑 할 수 있지만 서면으로 액세스하려면 Windows에서 로그 오프하고 서비스 계정을 통해 로그온해야합니다.

일반 사용자 세션 중에 네트워크 폴더에 액세스 할 수 있지만 VBA 코드에서 사용자 이름과 암호를 하드 코딩하는 방법이 있습니까?

내가 함께 로컬 드라이브로 폴더를 매핑 시도했다 :

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

을하지만, 작동하지 않았다 ("S"드라이브 매핑되지 않았습니다). 대신 사용자 이름과 비밀번호를 제공하지 않고 동일한 작업을 수행한다면 :

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

완벽하게 작동합니다.

내가하려는 일이 실제로 가능한지 궁금한 점이 있으십니까? 그렇지 않다면 대안이 있습니까?

감사

답변

5

당신은 당신의 테스트에서 값의 this answer을 찾을 수 있습니다.

기본적으로, 나는 당신이 이미 로그인 한 사용자의 전류를 사용하여이 자원에 연결되어 있지 않은지 확인 ...

  1. 을 몇 가지를 확인합니다. 그렇다면 다음과 같은 오류 메시지가 나타날 수 있습니다. enter image description here

  2. 사용자 이름에 domain\username 구문을 사용하고 있는지 확인하십시오.

그렇지 않으면 나는 당신이 올바른 길이라고 생각합니다. 위의 링크를 기반으로 샘플 코드를 작성하고 다른 사용자 이름으로 네트워크 공유에 연결하고 파일 목록을 반복 할 수있었습니다.

(실제로 연결을 설정하기 위해 드라이브를 매핑 할 필요가 없습니다 팁을 참고.)

은 다음 코드는 Access network share from within VBScript eg FileSystemObject

에 나와있는 샘플의 정말 빠른 (일) VBA 구현입니다
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

좋은 물건, 고마워! 현재 집에서 일하고 있기 때문에 VPN을 통해 코드를 시험해볼 수 있었고 작동하지 않았습니다 ("잘못된 사용자 이름 또는 암호"오류가 반환되었습니다). 사용자 이름에 도메인이 있는지 여부에 관계없이 시도했습니다. 익스플로러를 통해 대상 폴더를 열어 여러 번 연결할 때도 오류를 재현 할 수있었습니다. 나는 지금 사무실에있을 때 시험 할 필요가있다. 그러나 이것은 나에게 전반적으로 좋게 들리며 작동해야한다. 내가 뭔가를 알고 있다고 믿는다면 월요일에 얘기하자. – cfugge

+0

이것은 나를 위해 완벽하게 작동했습니다. 매우 깨끗한 코딩에 대해 많은 감사드립니다. – cfugge

+0

안녕하세요.이 코드는 훌륭합니다. 거의 마사지를하지 않고 처음으로 일했습니다. 건배! –