是否可以使用VBA检查使用命名范围指定的工作簿是否已打开?

时间:2012-05-18 08:53:56

标签: vba excel-vba excel

我试图拼凑其他几个VBA来实现这一点,但我是一个语言的初学者,所以没有运气。我想使用VBA来实现以下目标:

  • 在加载时运行以下内容:
  • 检查当前是否有其他工作簿处于打开状态。此工作簿由命名范围(input_sheet_location)指定,该范围包含所述工作簿的整个网络位置。
  • 如果未打开,请询问用户是否可以打开它。
  • 如果该加载失败(即无法找到/被限制/命名范围为空),请退出sub并显示错误消息并允许用户继续。
  • 如果已打开,请在没有提示的情况下继续。

我99%肯定所有这些事情都是可以实现的;我根本没有把它们全部串在一起所需的技巧。因此,我真正缺乏的唯一一个难题是上面的第二个要点;其他任何事情,我都可以(希望)弄清楚。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

我设法弄清楚了;感谢您的回复。

它是这样的:

Sub IsInputSheetOpen()
Dim Ret

Ret = IsWorkBookOpen(range("input_sheet_location_nobrackets"))

If Ret = True Then
    MsgBox "Input sheet is open."
Else
    MsgBox "Input sheet is not open. Auto output won't work without it."
End If
End Sub

Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long

On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0

Select Case ErrNo
Case 0:    IsWorkBookOpen = False
Case 70:   IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function

关键是要在命名区域(input_sheet_location_nobrackets)中格式化我的文件位置,而不使用您需要的方括号,以便将其用作参考。我确信上面的内容非常混乱,但似乎有效!

相关问题