2016-07-25 87 views
3

我創建了VBA代碼,這樣我們公司的一羣人就可以用存儲在網絡驅動器上的Excel工作表中的唯一編號(本質上給出一個序列號)「印記」一個文檔文檔。這些人無法訪問上述網絡驅動器,但我希望他們能夠執行VBA代碼。如何使用vba訪問具有不同證書的網絡excel文件?

我一直在閱讀本網站上的各種文章和其他人在過去幾天,並能夠適應this post爲我工作。但是,如果我嘗試多次執行VBA代碼,則會得到原始答案中所述的「多個連接」錯誤。那麼,似乎映射的驅動器未被刪除。這是一個簡單的語法問題?或者我錯過了我的RemoveNetworkDrive聲明中的某些內容?

ServerShare = "\\Servername\path" 
UserName = "domain\username" 
Password = "password" 

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

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

str_WbPath = ServerShare & "\MRL Number Generator.xlsm" 
Set exWb = objExcel.Workbooks.Open(str_WbPath) 

'Do Stuff in excel 


Set exWb = Nothing 
Set FSO = Nothing 

NetworkObject.RemoveNetworkDrive ServerShare, True, False 

Set NetworkObject = Nothing 
+0

您是否在關閉網絡驅動器之前嘗試關閉excel工作簿?它可能不喜歡連接被強制關閉,文件仍然打開 – Rabbitman14

+2

到機器的IPC $'會話可能仍然打開。嘗試刪除'\\ servername \ ipc $'以及。如果這不起作用,請參閱[關於SU的這個問題](http://serverfault.com/questions/451387/)及其相關問題以獲得更多靈感(但並非所有提議的解決方案都可能來自VB)。 'EnumNetworkDrives'也可能給你一個線索,確定這個移除是否真的失敗了。 –

+0

@JeroenMostert一個很好的建議,但我得到一個「這個驅動器不存在」的錯誤。 –

回答

0

我會告訴你它我爲我工作。我使用了一個驅動器,而我取消了驅動器。

'This insures you find a empty drive letter 
For i = 67 To 90 
    netDrive = Chr(i) & ":" 
    If Not fs.DriveExists(netDrive) Then Exit For 
Next 

'mount network drive on the above selected drive letter 
Network.MapNetworkDrive netDrive, ServerShare, False, UserName, Password 

'DO STUFF 
'DO STUFF 

'remove that drive letter 
Network.RemoveNetworkDrive netDrive, True, True 

我把拆下一些錯誤處理爲好,否則如果你有一些錯誤,你會釀出了一堆驅動器。

+0

所以你說使用驅動器盤符起作用,UNC不是? –

+0

MS文章說UNC路徑應該工作,但是然後你說它不認識他駕駛他試圖去除。除了在您的UNC路徑末尾添加斜線之外,我不知道爲什麼它不會刪除它。甚至可能是Windows處理事物的一個錯誤。我可以保證使用它的驅動器號,因爲我用它來打開/關閉每個用戶/會話多次使用用戶名/密碼的網絡文件夾。 – CyberClaw

+0

使用信函確實有效......我將不得不繼續使用它,因爲我不想冒錯誤發送驅動器的風險。謝謝你的幫助! –

相關問題