Подтвердить что ты не робот

Открыть файл Excel для чтения с помощью VBA без отображения

Я хочу искать через существующие файлы Excel с помощью макроса, но я не хочу отображать эти файлы, когда они открываются кодом. Есть ли способ открыть их "в фоновом режиме", так сказать?

4b9b3361

Ответ 1

Не уверен, что вы можете открыть их невидимо в текущем экземпляре excel

Вы можете открыть новый экземпляр excel, хотя, скрыть его, а затем открыть книги

Dim app as New Excel.Application
app.Visible = False 'Visible is False by default, so this isn't necessary
Dim book As Excel.Workbook
Set book = app.Workbooks.Add(fileName)
'
' Do what you have to do
'
book.Close SaveChanges:=False
app.Quit
Set app = Nothing

Как сообщали другие, убедитесь, что вы очистились после того, как вы закончили с любыми открытыми книгами.

Ответ 2

Если это соответствует вашим потребностям, я просто использовал бы

Application.ScreenUpdating = False

с дополнительным преимуществом ускорения вашего кода, вместо замедления его использования с помощью второго экземпляра Excel.

Ответ 3

Даже если у вас есть ответ, для тех, кто находит этот вопрос, также можно открыть электронную таблицу Excel в виде хранилища данных JET. Заимствуя строку подключения из проекта, на котором я его использовал, он будет выглядеть следующим образом:

strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & objFile.Path & ";Extended Properties=""Excel 8.0;HDR=Yes"""
strSQL = "SELECT * FROM [RegistrationList$] ORDER BY DateToRegister DESC"

Обратите внимание, что "RegistrationList" - это название вкладки в книге. В Интернете есть несколько руководств, в которых вы можете узнать, что вы можете и не можете сделать доступ к листу таким образом.

Просто подумал, что добавлю.:)

Ответ 4

Чтобы открыть книгу как скрытую в существующем экземпляре Excel, используйте следующую команду:

    Application.ScreenUpdating = False
    Workbooks.Open Filename:=FilePath, UpdateLinks:=True, ReadOnly:=True
    ActiveWindow.Visible = False
    ThisWorkbook.Activate
    Application.ScreenUpdating = True

Ответ 5

Более простой подход, который не включает управление активными окнами:

Dim wb As Workbook
Set wb = Workbooks.Open("workbook.xlsx")
wb.Windows(1).Visible = False

Из того, что я могу сказать, индекс Windows в книге всегда должен быть 1. Если кто-нибудь знает какие-либо условия гонки, которые сделают это неверным, пожалуйста, дайте мне знать.

Ответ 6

Проблема с ответами iDevlop и Ashok заключается в том, что основной проблемой является недостаток дизайна Excel (по-видимому), в котором метод Open не соблюдает параметр Application.ScreenUpdating для False. Следовательно, установка этого параметра в False не приносит пользы этой проблеме.

Если решение Патрика Макдональда слишком обременительно из-за накладных расходов на запуск второго экземпляра Excel, то лучшим решением, которое я нашел, является минимизация времени открытия открытой книги путем повторного активации исходного окна как можно быстрее насколько это возможно:

Dim TempWkBk As Workbook
Dim CurrentWin As Window

Set CurrentWin = ActiveWindow
Set TempWkBk = Workbooks.Open(SomeFilePath)
CurrentWin.Activate      'Allows only a VERY brief flash of the opened workbook
TempWkBk.Windows(1).Visible = False 'Only necessary if you also need to prevent
                                    'the user from manually accessing the opened
                                    'workbook before it is closed.

'Operate on the new workbook, which is not visible to the user, then close it...

Ответ 7

Откройте их из нового экземпляра Excel.

Sub Test()

    Dim xl As Excel.Application
    Set xl = CreateObject("Excel.Application")

    Dim w As Workbook
    Set w = xl.Workbooks.Add()

    MsgBox "Not visible yet..."
    xl.Visible = True

    w.Close False
    Set xl = Nothing

End Sub

Вам нужно запомнить очистку после того, как вы закончите.

Ответ 8

Откройте книгу как скрытую, а затем установите ее как "сохраненную", чтобы пользователи не запрашивали, когда они закрываются.

Dim w As Workbooks

Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Set w = Workbooks
    w.Open Filename:="\\server\PriceList.xlsx", UpdateLinks:=False, ReadOnly:=True 'this is the data file were going to be opening
    ActiveWindow.Visible = False
    ThisWorkbook.Activate
    Application.ScreenUpdating = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    w.Item(2).Saved = True 'this will suppress the safe prompt for the data file only
End Sub

Это несколько производное от ответа, отправленного Ашоком.

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

Затем вы можете сохранить прейскурант в общем месте в сети и сделать его доступным только для чтения.

Ответ 9

В Excel, спрячьте книги и сохраните их как скрытые. Когда ваше приложение загружает их, они не будут отображаться.

Изменить: при повторном чтении стало ясно, что эти книги не являются частью вашего приложения. Такое решение было бы неуместным для пользовательских книг.