Как проверить, открыта ли моя Рабочая тетрадь (Excel) из текстового документа? - PullRequest
0 голосов
/ 10 апреля 2020

Точно, я хотел бы проверить, открыта ли моя книга Excel (только одна). ЕСЛИ это открыто, ТО используйте некоторый код, чтобы получить некоторые данные из него, иначе откройте мой файл Excel и получите некоторые данные из него. Я хотел бы, чтобы мой файл Excel всегда был открыт, пока я работаю над своим документом Word.

Ниже приведен код в текстовом документе, чтобы попытаться достичь этого:

Dim appExcel As Excel.Application
Dim xlWBook As Excel.Workbook

On Error Resume Next
Set appExcel = GetObject(, "Excel.Application")
If appExcel Is Nothing Then
    Set appExcel = CreateObject("Excel.Application")
    Set xlWBook = appExcel.Workbooks.Open(ActiveDocument.Path & strFile)
EndIf

' Some code
xlWBook.Sheets(3).Cells(4,2).value = strData1
' or the other way
strData2 = xlWBook.Sheet(4).Cells(3,5).Value
'    ...etc...

xlWBook.Close SaveChanges:=True
appExcel.Quit
Set xlWBook = Nothing
Set appExcel = Nothing

Нужно ли закрывать его (как указано выше), зная, что я буду использовать этот вид кода для другого модуля или пользовательской формы? Я на правильном пути? Или лучше открывать его каждый раз, а затем закрывать, когда вы закончите?

Моя цель - не открывать и не закрывать файл Excel каждый раз, когда мне что-то нужно из него. Обратите внимание, что вначале я открываю свой файл Excel с помощью нажатия на кнопку на ленте, чтобы ввести данные непосредственно на него, поэтому пользователь может оставить его открытым, но он может закрыть его.

Последнее подумал: мне узнать, открыт ли файл excel? Если да, закройте его, а затем открывайте и закрывайте каждый раз, когда мне это нужно.

Спасибо.

1 Ответ

1 голос
/ 10 апреля 2020

Попробуйте, пожалуйста:

Sub CheckOpenWbinEccel()
  Dim appExcel As Excel.Application, boolFound as Boolean
  Dim xlWBook As Excel.Workbook, wb  As Excel.Workbook

On Error Resume Next
Set appExcel = GetObject(, "Excel.Application")
If appExcel Is Nothing Then
    Err.Clear: On Error GoTo 0 'it is good to clear the error and make VBA raise other errors, if the case
    Set appExcel = CreateObject("Excel.Application")
    Set xlWBook = appExcel.Workbooks.Open(ActiveDocument.path & strFile)
Else
    On Error GoTo 0' make VBA raise other errors, if the case
    For Each wb In appExcel
        If wb.FullName = ActiveDocument.path & strFile Then
            Set xlWBook = wb: boolFound = True: Exit For' no need to close and reopen it
        End If
        If Not boolFound Then Set xlWBook = appExcel.Workbooks.Open(ActiveDocument.path & strFile)
    Next
End If

' Some code
xlWBook.Sheets(3).Cells(4, 2).value = strData1
' or the other way
strData2 = xlWBook.Sheet(4).Cells(3, 5).value
'    ...etc...
  'if you want keeping Excel session and workbook open, comment the next two lines:
  xlWBook.Close SaveChanges:=True 'here
  appExcel.Quit                   'and here
  Set xlWBook = Nothing
  Set appExcel = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...