2014-12-02 22 views
6

Ho bisogno di accedere tramite VBA a una cartella ospitata su un server di file di rete. La cartella è accessibile per iscritto solo tramite un account di servizio (diverso dai normali account utente) per il quale ho username e password.Accesso alla cartella di rete condivisa

Tramite l'interfaccia utente, è possibile visualizzare tale cartella e mapparla come unità locale, ma per accedervi per iscritto è necessario disconnettersi da Windows e accedere tramite l'account del servizio.

C'è un modo per accedere alla cartella di rete durante una sessione utente normale ma nome utente hardcoding e pwd nel codice VBA?

ho fatto provare a mappare la cartella come unità locale con:

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

ma non ha funzionato ("S" unità non è stata mappata). Se invece faccio lo stesso, ma senza fornire nome utente e password:

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

funziona perfettamente.

Chiedendosi ora se ciò che sto cercando di fare è effettivamente possibile? Se no, c'è qualche alternativa?

Grazie

risposta

5

si potrebbe trovare this answer di valore in prova.

In sostanza, vorrei controllare un paio di cose ...

  1. Assicurarsi che non si è già connessi a questa risorsa utilizzando l'attuale utente connesso. Se si, si potrebbe ottenere un messaggio di errore simile al seguente: enter image description here

  2. Assicurarsi che si sta utilizzando la sintassi domain\username il nome utente.

In caso contrario, penso che tu sia la strada giusta. Ho messo insieme un codice di esempio basato sul link sopra, ed è stato in grado di connettersi con successo a una condivisione di rete con un nome utente diverso e iterare attraverso un elenco di file.

(Si noti la punta che in realtà non è necessario tracciare un azionamento per stabilire una connessione.)

Il codice che segue è una (di lavoro) implementazione molto veloce VBA del campione elencati in 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

Grandi cose, grazie! Poiché attualmente lavoro da casa, posso solo provare il tuo codice tramite VPN e non ha funzionato (ha restituito un errore "nome utente o password errato"). Ho cercato con e senza dominio nel nome utente. Sono stato anche in grado di riprodurre il tuo errore sopra (connessioni multiple) aprendo la cartella di destinazione in tramite Explorer. Ho bisogno di testare di nuovo quando sono in ufficio, ma questo suona nel complesso buono per me e "deve" funzionare. Se credi ci sia qualcos'altro che posso provare fammi sapere altrimenti parliamone lunedì! – cfugge

+0

Questo ha funzionato perfettamente per me. Mille grazie per un pezzo di codice così pulito. – cfugge

+0

Hey questo codice è fantastico. Ha lavorato per la prima volta con poco o nessun massaggio. Saluti! –

Problemi correlati