Я открыл файл MS Excel с именем «myWork.XL» через кодировку. Теперь я хочу код, который может рассказать мне о его статусе - независимо от того, открыт он или нет. Другими словами, если я открою тот же файл, он должен сказать мне, что файл уже открыт.Обнаружить, что книга Excel уже открыта
ответ
Попробуйте это:
Option Explicit
Sub Sample()
Dim Ret
Ret = IsWorkBookOpen("C:\myWork.xlsx")
If Ret = True Then
MsgBox "File is open"
Else
MsgBox "File is Closed"
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
+1 Я иногда использовал этот метод для проверки файлов на приводе newtwork, доступном другим пользователям. Я думаю, что код был первоначально размещен на сайте msft. – brettdj
Лично я чувствовал себя очень неудобно, используя примитивный файл IO, чтобы попытаться прочитать файл в открытой книге Excel, когда у ИМХО есть лучшие альтернативы: но, возможно, это работает? –
@ Чарльз Уильямс: Да, это может быть примитивно, но это по-прежнему хороший код без каких-либо недостатков. По крайней мере, я об этом не знаю. :) Попробуй, может, тебе понравится? –
Если его открыть его будет в коллекции Workbooks:
Function BookOpen(strBookName As String) As Boolean
Dim oBk As Workbook
On Error Resume Next
Set oBk = Workbooks(strBookName)
On Error GoTo 0
If oBk Is Nothing Then
BookOpen = False
Else
BookOpen = True
End If
End Function
Sub testbook()
Dim strBookName As String
strBookName = "myWork.xls"
If BookOpen(strBookName) Then
MsgBox strBookName & " is open", vbOKOnly + vbInformation
Else
MsgBox strBookName & " is NOT open", vbOKOnly + vbExclamation
End If
End Sub
Чарльз, я уже думал об этом методе. Основным недостатком этого метода является то, что если рабочая книга открывается в другом экземпляре Excel, вы всегда будете получать значение как ложное :) альтернативой будет добавление кода для циклического преобразования всех экземпляров Excel, а затем использования вашего кода. В конечном итоге я понял, что я пишу больше кода, и поэтому я использовал альтернативный подход. Sid –
Если вы хотите проверить, открыта ли книга в другом экземпляре Excel (по-видимому, потому, что вы не сможете ее сохранить или отредактировать), почему бы просто не проверить, если ее Readonly после ее открытия (если oBk.Readonly ...) –
Что делать, если он доступен? – glh
Для моих приложений, я вообще хочу работать с книгой, а не просто определить, если это открытый. В этом случае я предпочитаю пропустить функцию Boolean и просто вернуть книгу.
Sub test()
Dim wb As Workbook
Set wb = GetWorkbook("C:\Users\dick\Dropbox\Excel\Hoops.xls")
If Not wb Is Nothing Then
Debug.Print wb.Name
End If
End Sub
Public Function GetWorkbook(ByVal sFullName As String) As Workbook
Dim sFile As String
Dim wbReturn As Workbook
sFile = Dir(sFullName)
On Error Resume Next
Set wbReturn = Workbooks(sFile)
If wbReturn Is Nothing Then
Set wbReturn = Workbooks.Open(sFullName)
End If
On Error GoTo 0
Set GetWorkbook = wbReturn
End Function
Я согласен с тем, что обычно требуется: если вы хотите проверить, что книга уже открыта в другом экземпляре Excel, вы можете проверить, была ли она открыта только для чтения. –
Ошибка этой ошибки из 'Workbooks (sFile)' –
. Вы не должны в поле «В поле« Ошибка повтора »нажмите« Код ошибки »или у вас есть« Разбить все ошибки »в« Инструменты »-« Параметры »в VBE. –
Это один немного легче понять:
Dim location As String
Dim wbk As Workbook
location = "c:\excel.xls"
Set wbk = Workbooks.Open(location)
'Check to see if file is already open
If wbk.ReadOnly Then
ActiveWorkbook.Close
MsgBox "Cannot update the excelsheet, someone currently using file. Please try again later."
Exit Sub
End If
Что делать, если вы хотите, чтобы проверить, не создавая еще один экземпляр Excel?
Например, у меня есть макрос Word (который выполняется многократно), который должен извлекать данные из электронной таблицы Excel. Если электронная таблица уже открыта в существующем экземпляре Excel, я бы предпочел не создавать новый экземпляр.
Я нашел большой ответ здесь, что я построил на: http://www.dbforums.com/microsoft-access/1022678-how-check-wether-excel-workbook-already-open-not-search-value.html
Благодаря MikeTheBike и kirankarnati
Function WorkbookOpen(strWorkBookName As String) As Boolean
'Returns TRUE if the workbook is open
Dim oXL As Excel.Application
Dim oBk As Workbook
On Error Resume Next
Set oXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
'Excel is NOT open, so the workbook cannot be open
Err.Clear
WorkbookOpen = False
Else
'Excel is open, check if workbook is open
Set oBk = oXL.Workbooks(strWorkBookName)
If oBk Is Nothing Then
WorkbookOpen = False
Else
WorkbookOpen = True
Set oBk = Nothing
End If
End If
Set oXL = Nothing
End Function
Sub testWorkbookOpen()
Dim strBookName As String
strBookName = "myWork.xls"
If WorkbookOpen(strBookName) Then
msgbox strBookName & " is open", vbOKOnly + vbInformation
Else
msgbox strBookName & " is NOT open", vbOKOnly + vbExclamation
End If
End Sub
Checkout эту функцию
Function to Check Whether a Workbook is Open
код из ссылки добавлен
'********************************************************************************************************************************************************************************
'Function Name : IsWorkBookOpen(ByVal OWB As String)
'Function Description : Function to check whether specified workbook is open
'Data Parameters : OWB:- Specify name or path to the workbook. eg: "Nucleation.xlsx" or "C:\Users\Kannan.S\Desktop\Nucleation\Nucleation.xlsm"
'Created by : Kannan S
'Email : [email protected]
'Creation date : 13-Nov-2013
'Website : www.nucleation.in
'THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
'LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
'Feel free to use the code as you wish but kindly keep this header section intact.
'Copyright © 2013 Nucleation. All Rights Reserved.
'********************************************************************************************************************************************************************************
Function IsWorkBookOpen(ByVal OWB As String) As Boolean
IsWorkBookOpen = False
Dim WB As Excel.Workbook
Dim WBName As String
Dim WBPath As String
Err.Clear
On Error Resume Next
OWBArray = Split(OWB, "\")
Set WB = Application.Workbooks(OWBArray(UBound(OWBArray)))
WBName = OWBArray(UBound(OWBArray))
WBPath = WB.Path & "\" & WBName
If Not WB Is Nothing Then
If UBound(OWBArray) > 0 Then
If LCase(WBPath) = LCase(OWB) Then IsWorkBookOpen = True
Else
IsWorkBookOpen = True
End If
End If
Err.Clear
End Function
Это будет захватывать, если книга открыта в текущем экземпляре на локальном компьютере - она не будет фиксировать, открыта ли книга в другом локальном экземпляре или другим пользователем в другом месте. – brettdj
Я думаю 'WB.Path &" \ "& WBName'' 'WB.FullName' – Winand
Я бы также добавил Set WB = Nothing перед выходом из функции –
Я бы с этим:
Public Function FileInUse(sFileName) As Boolean
On Error Resume Next
Open sFileName For Binary Access Read Lock Read As #1
Close #1
FileInUse = IIf(Err.Number > 0, True, False)
On Error GoTo 0
End Function
, как sFileName вы должны обеспечить прямой путь к файлу, например:
Sub Test_Sub()
myFilePath = "C:\Users\UserName\Desktop\example.xlsx"
If FileInUse(myFilePath) Then
MsgBox "File is Opened"
Else
MsgBox "File is Closed"
End If
End Sub
- 1. Проверьте, открыта ли книга Excel?
- 2. Проверьте, что книга Excel открыта с помощью VBScript
- 3. Как проверить, открыта ли рабочая книга
- 4. Как определить, открыта ли книга Excel на локальном компьютере, учитывая, что может быть несколько экземпляров Excel?
- 5. excel vba followhyperlink метод, когда книга не открыта
- 6. Ссылки Excel не работают, если исходная книга не открыта?
- 7. не может изменить книга открыта макросъемки
- 8. Как обнаружить, что одна и та же страница уже открыта в другом окне в IE
- 9. Как проверить книгу excel уже открыта в C# win form
- 10. Установите презентацию PowerPoint, когда она уже открыта (из Excel)
- 11. Книга Excel Форматирование ячеек
- 12. Как обнаружить, что хранимая процедура уже существует
- 13. Как обнаружить, что транзакция уже запущена?
- 14. Как идентифицировать, чтобы проверить, открыта ли еще одна книга
- 15. enable excel workbooks, когда пользовательформа открыта
- 16. ссылка на различные рабочие таблицы с использованием переменных объекта. Книга уже открыта.
- 17. Как проверить, что вкладка уже открыта в TabPane в JavaFX
- 18. проверить, что страница уже открыта и отправить ей параметр
- 19. Моя связь уже открыта, но почему система заявила, что закрыта?
- 20. vba проверить, открыта ли книга только для чтения.
- 21. Закрыть excel, если это последняя книга?
- 22. Обнаружить, если страница была открыта из приложения
- 23. Обнаружить, если на экране открыта клавиатура
- 24. OleDbConnection только находит значение ячейки, когда рабочая книга также открыта в Excel
- 25. Excel Определенная пользователем функция вычисляется до нуля, если открыта другая книга.
- 26. excel vba метод рабочая книга открыта или закрыта true или false
- 27. Проверьте, не открыта ли какая-либо рабочая книга
- 28. Excel VBA, чтобы узнать, открыта ли рабочая книга и если она записывает данные
- 29. Ошибка при запуске макроса, если открыта другая рабочая книга.
- 30. Сообщите, если рабочая книга с определенной строкой в имени открыта
Задавая вопросы, пожалуйста, дайте им описательное название , «Кодирование Visual Basic о Excel» не достаточно точно. На этот раз я исправил это для вас. –