ワークブックを開いたときに実行されるコードがあり、フォームを使用して、共有ディレクトリがマップされているドライブをユーザーが選択するように要求します。
これは、ワークブックが VBA コードを使用してデータを取得し、この共有ディレクトリにある共有ワークブックに保存するためですが、ローカル ドライブはユーザーによって変更されるため、ローカル ドライブを選択する必要があります。
私が遭遇した問題は、ユーザーが複数の共有ディレクトリをコンピューターにマップしているため、複数のドライブがある場合に発生します...例: 1 つのディレクトリがドライブ G: にあり、もう 1 つのディレクトリが X: にあります。
ワークブックが存在する共有ディレクトリのドライブを選択する場合、問題はありません。ただし、別の共有ディレクトリのドライブを誤って選択すると、コードがハングします。
正しいドライブが選択されていることを確認するループ設定があります... IE: A: (私の例では存在しないドライブ) を選択した場合、コードは、間違ったドライブを選択したことを通知し、プロンプトを表示します。それらをもう一度。
ただし、別の共有ディレクトリが選択されたときにエラーが発生するのではなく、コードがハングするだけです。
以下のコードでは、シート 1 のセル AD3 に true または false が含まれています (サブの先頭で false に設定されます)。Module6.PipelineRefresh がエラーを引き起こさなくなるため、正しいドライブを選択した場合は true に設定されます (このサブルーチンは共有ドライブでワークブックを開こうとします...選択したドライブが正しくない場合、明らかにエラーが返されます)。
コードは以下のとおりです。
Do While Sheet1.Range("ad3") = False
On Error Resume Next
Call Module6.PipelineRefresh '~~ I'm guessing the code hangs here. Instead of returning an error immediately, as it would if they simply chose a non-existant drive, it appears to get stuck trying to open the workbook, even though it's not located in the shared directory they've selected.
If Err.Number = 0 Then
Sheet1.Range("ad3") = True
Err.Clear
Else
MsgBox "Invalid Network Drive."
DriverSelectForm.Show
Err.Clear
End If
Loop
誰かがタイマーを実装する方法を知っていて、しばらくしてからコードをシャットダウンできるようになれば、それは素晴らしいことです。
あるいは、このエラーを回避する方法を知っていれば、それも素晴らしいことです!
コメントに従って編集:
Module6.PipelineRefresh
これはハングする特定のコードです。(DriverSelectForm
上に表示) は、セル o1 の値を選択したドライブ文字列 (つまり: X:) に修正します。
Dim xlo As New Excel.Application
Dim xlw As New Excel.Workbook
Dim xlz As String
xlz = Sheet1.Range("o1").Value & "\Region Planning\Created Pipeline.xlsx"
Dim WS As Worksheet
Dim PT As PivotTable
Application.DisplayAlerts = False
Set xlw = xlo.Workbooks.Open(xlz)
Application.DisplayAlerts = True
注:上記のように、ユーザーが存在しないディレクトリを選択すると、ファイルを開くことができないため、上記のコードはすぐにエラーを返します...選択したドライブに共有ディレクトリがマップされている場合(しかし、それは間違ったディレクトリです) 、コードがハングし、エラーが返されないように見えます。