【问题标题】:VBA to check if file is open [duplicate]VBA检查文件是否打开[重复]
【发布时间】:2019-03-30 03:46:25
【问题描述】:

我有以下代码用于检查文件是否打开。如果文件是打开的,那么它应该什么都不做,但如果文件没有打开,那么它应该显示一条消息,说明文件没有打开并退出子。

但是,无论文件是否打开,它总是退出。

Sub Update_Folder()

Dim str As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String





'Creates file string name
str = Range("H6").Value
openPos = InStr(str, "[")
closePos = InStr(str, "]")
midBit = Mid(str, openPos + 1, closePos - openPos - 1)


   If Range("B2").Value = "Yes" Or Range("B4").Value = "Yes" Or Range("B5").Value = "Yes" Or Range("B6").Value = "Yes" Or Range("B9").Value = "Yes" Or Range("B12").Value = "Yes" Or Range("B13").Value = "Yes" Then

On Error Resume Next
    Set WB = Workbooks(midBit)
    If Err Then MsgBox ("Please open the following file(s): " & str)
    'Exit Sub
On Error GoTo 0
 End If


Call Folder_Creation

END SUB

检查文件是否打开的正确语法是什么,如果打开,则什么都不做,但如果文件未打开,则显示msgbox并退出子?单元格H6C:\Users\User1\Documents\[TestFile.xlsx]

我尝试了以下链接中的解决方案,但是 Detect whether Excel workbook is already open

它对我不起作用。也许是因为我根据单元格中的文件路径设置路径?运行时出现文件未找到错误。 debug 屏幕将我带到Case Else: Error ErrNo 行。

更新:

以下代码对我有用。我不得不更改Error GoTo 语法,然后将error handler 移动到脚本的末尾。因此,如果发生错误,它会跳到脚本的底部

Sub Update_Folder()

Dim str As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String

'Creates file string name
str = Range("H6").Value
openPos = InStr(str, "[")
closePos = InStr(str, "]")
midBit = Mid(str, openPos + 1, closePos - openPos - 1)


   If Range("B2").Value = "Yes" Or Range("B4").Value = "Yes" Or Range("B5").Value = "Yes" Or Range("B6").Value = "Yes" Or Range("B9").Value = "Yes" Or Range("B12").Value = "Yes" Or Range("B13").Value = "Yes" Then

On Error goto ErrorHandler1:
    Set WB = Workbooks(midBit)
    If Err Then MsgBox ("Please open the following file(s): " & str)
    'Exit Sub



Call Folder_Creation


 ErrorHandler1:

MsgBox ("Please open the following file(s): " & str)
    Exit Sub



END SUB

【问题讨论】:

  • 什么样的文件?工作簿?
  • 正确,工作簿。
  • midbit 返回什么字符串?可以在这里展示一下吗?

标签: excel vba error-handling


【解决方案1】:

也许这会有所帮助:

检查文件是否已打开的宏代码

https://support.microsoft.com/en-us/help/291295/macro-code-to-check-whether-a-file-is-already-open

按照上面链接中的说明进行操作。如下: 在 Excel 中,按 Alt+F11 调出 VBA。单击插入 > 模块。复制并粘贴代码。返回 Excel 并设置单元格,如下图所示。这就是你的细胞应该如何设置:

【讨论】:

  • 我已经尝试过了,但它对我不起作用。单元格H6 包含文件路径,当我根据您共享的链接将其调暗为字符串(str)以调用为`If IsFileOpen(str)Then`时,我收到错误消息。错误 iget 要么是找不到文件,要么是我没有访问权限,而我确实可以访问。 debug 屏幕也将我带到 Case Else Error errnum 部分。
  • @AlmostThere 我不明白你在说什么。您不需要将任何东西作为字符串变暗。按 Alt+F11。单击插入 > 模块。复制并粘贴代码。返回 Excel 并按照上图设置单元格。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2015-08-02
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2022-11-22
相关资源
最近更新 更多