2014-06-27 127 views
3

有沒有辦法檢查vba中的網絡連接?使用vba檢查網絡連接

我使用這個命令:

If Dir("O:\") = "" Then 
    MsgBox "you have network connection" 
Else 
    MsgBox "No Connection" 
End If 

但它不工作,我得到一個運行時錯誤

+1

瞭解運行時錯誤的詳細信息會很有用。 –

+0

運行時錯誤52,錯誤的文件名或數字 – Kaja

+0

只是要添加,你想檢查計算機是否連接到網絡或特定的網絡驅動器? – Gareth

回答

3

你在做什麼幾乎是正確的,如果和其他零件,除了翻轉,

即當Dir("O:\") = "" = 你沒有連接

,當它返回的東西意味着你有一個連接。

Dir函數用於返回指定目錄中的第一個文件名和屬性列表。

Sub Test_Connection() 

If (Len(Dir("O:\"))) Then 
    MsgBox "Connected" 
Else 
    MsgBox "No Connection" 
End If 

End Sub 
+0

+1,我會推薦這個策略(並且在被問及類似的問題[這裏](http: //stackoverflow.com/questions/23032162/excel-vba-abort-script-if-network-connection-does-not-exist/23032935#23032935))。爲了個人可讀性的原因,我明確地檢查了Len(Dir(...))= 0,儘管......好東西無論如何! –

+0

謝謝你的回答,我已經測試了你的代碼,但是我得到了同樣的錯誤,運行時錯誤52 – Kaja

1

我不知道你的問題是否已解決。無論如何,我有一個類似的問題,使用Excel VBA。 在我的網絡上安裝了一個diskstation後,我將這個工作站的共享文件夾映射爲Windows中的網絡文件夾,並使用字母M.通常,在啓動Windows之後,當然還有diskstation啓動並運行後,網絡驅動器將顯示在Windows資源管理器中,但它有一個紅色十字(不連接),而不是綠色(已連接)的圖標。只有在我手動點擊瀏覽器中的這個網絡位置後,它纔會變綠。當第一次發佈類似Dir(「M:\ abc」)的聲明時,我首先希望連接也可以通過我的Excel VBA程序來建立。但是沒有結果,並且圖標保持紅色。我總是首先需要在資源管理器中手動點擊。 最後,我在VBA中找到了一個解決方案,在Dir之前使用一個虛擬「shellexecute ... explore M:...」,使網絡驅動器自動連接。

Declare Function ShellExecute Lib "shell32.dll" Alias _ 
    "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _ 
    As String, ByVal lpFile As String, ByVal lpParameters _ 
    As String, ByVal lpDirectory As String, ByVal nShowCmd _ 
    As Long) As Long 
'... 
Dim RetVal As Long 
Dim hwnd As Long 
RetVal = ShellExecute (hwnd, "explore", "M:", vbNullString, vbNullString, SW_SHOWNOACTIVATE) 
'... 
a = Dir("M:\abc") 
+0

請注意,你可能需要使用Dim SW_SHOWNOACTIVATE作爲整數SW_SHOWNOACTIVATE = 4來定義SW_SHOWNOACTIVATE。 [這裏](https://msdn.microsoft.com/en-us/library/windows/desktop/ms633548%28v=vs.85%29.aspx) – JBES