我有一些代码运行在打开的工作簿上,使用表单来请求用户选择共享目录映射到的驱动器。Excel VBA:如何实现定时器来检查代码超时
这是因为工作簿使用VBA代码检索并将数据保存到位于此共享目录中的共享工作簿,但本地驱动器由用户更改,因此他们需要选择它。
我遇到的问题发生在用户将多个共享目录映射到他们的计算机上并因此具有多个驱动器时......例如:1个目录位于驱动器G上:另一个位于X:上。
如果他们选择工作簿所在的共享目录的驱动器,则没有问题。但是,如果他们不小心选择其他共享目录的驱动器,则代码会挂起。我有一个循环设置,检查他们选择了正确的驱动器... IE:如果他们选择A :(我的例子中不存在的驱动器),那么代码会注意到他们选择了不正确的驱动器并再次提示。
但是,当选择另一个共享目录时,不会产生错误,代码只会挂起。
在下面的代码中,表1中的单元格AD3包含true或false(在sub的开始处设置为false)。如果他们选择了正确的驱动器,它将被设置为true,因为Module6.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
是挂在特定的代码。所述(如上所示)在细胞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
注:如上所述,如果用户选择一个不存在的目录中,上述代码返回立即出现错误,因为它无法打开文件...如果它们具有映射到所选驱动器的共享目录(但它是错误的目录),则代码将挂起并且不会返回错误。
当选择错误的驱动器时,实际挂起的代码是什么?除了没有预期的目录是其他驱动器常规网络共享?还是他们映射到一个VPN,他们需要登录? – 2013-05-13 10:36:22
是'DriverSelectForm'打开标准文件对话框,还是一些自定义导航? – 2013-05-13 12:25:05
将在一条评论中回答两个问题: 共享目录驱动器映射到一个vpn(并且需要在这个意义上的登录)。我将编辑该问题以包含暂时挂起的特定代码。 'DriverSelectForm'是一个自定义导航,只是允许他们选择一个字母(例如:'X:'),然后将其添加到用于打开工作簿的文件路径中。 – 2013-05-13 12:46:31