我有一些在工作簿打开时运行的代码,它使用表单请求用户选择共享目录映射到的驱动器。
这是因为工作簿使用 VBA 代码来检索数据并将数据保存到位于此共享目录中的共享工作簿中,但本地驱动器由用户更改,因此他们需要选择它。
当用户将多个共享目录映射到他们的计算机并因此具有多个驱动器时,我遇到的问题会发生...例如:1 个目录位于驱动器 G: 上,另一个位于 X: 上。
如果他们为工作簿所在的共享目录选择驱动器,则没有问题。但是,如果他们不小心为其他共享目录选择了驱动器,代码就会挂起。
我有一个循环设置来检查他们是否选择了正确的驱动器... IE:如果他们选择 A:(在我的示例中是一个不存在的驱动器),那么代码会注意到他们选择了不正确的驱动器并提示他们再次。
但是,代码不是在选择另一个共享目录时创建错误,而是悬挂。
在下面的代码中,第一页上的单元格 AD3 包含 true 或 false(在 sub 的开头设置为 false)。如果他们选择了正确的驱动器作为 Module6,它将设置为 true。PipelineRefresh 将不再导致错误(此子尝试在共享驱动器中打开工作簿......如果选择的驱动器不正确,它显然会返回错误)
代码如下:
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
注意:如上所述,如果用户选择了一个不存在的目录,上面的代码会立即返回错误,因为它无法打开文件......如果他们有一个共享目录映射到所选驱动器(但它是错误的目录) ,代码将挂起并且似乎不会返回错误。