Bazaprogram.ru

Новости из мира ПК
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Visual basic открыть файл excel

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

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

9 ответов

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

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

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

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

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

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

обратите внимание, что» RegistrationList » — это имя вкладки в книге. Есть несколько учебников, плавающих в интернете с подробностями того, что вы можете и не можете сделать, получая доступ к листу таким образом.

просто думаю, я добавлю. 🙂

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

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

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

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

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

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

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

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

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

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

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

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

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

Visual basic открыть файл excel

Можно ли открыть в одном и том же документе excel несколько файлов и чтобы они присутствовали в нём одновременно?

Как средствами VBA для открытия файлов не задавать точное имя файла (Workbooks.Open Filename:= _»имя файла» ), а вызвать диалоговое окно типа стандартного для открытия файлов — Файл->Открыть ?

Почему при открытии файла Файл->Открыть некторые числа файла в Excel’e отображаются как Дата — май.43 , а при открытии через VBA Workbooks.Open Filename:= _» все чесла отображаются нормально?

2. V3 , 29.10.2005 17:36
ВВ
1. без добавления новой книги, можно считывать данные на прямую из закрытой книги эту функцию можешь посмотреть и доработать Ссылка на ячейки другой книги в этой же директории без указания полного пути (http://forum.ixbt.com/topic.cgi? >или как вариант открываем как обычно потом копируем лист нужный, и закрываем исходный файл
(ну этот вариант ты уже и сам увидел)

2. вызов диалогового окна

Добавление от 29.10.2005 17:49:

это проблема с десятичным разделителем для русской раскладки это «,» для английской «.» (вроде так )
вообщем когда ты открываешь и считываешь с десятичным разделителем точка, то Excel расценивает это как дату, если бы была запятая все было бы ок.
мне твой вариант повторить не удалось с разным открытием что так что так открывалось одинаково

3. Proforg , 30.10.2005 14:42
V3
Проблему с разделителем для Excel 2К можно побороть, сменив его на время открытия файла во всей системе (правда, сие базируется на функциях ядра, что не есть хорошо)
4. V3 , 30.10.2005 16:06
Proforg
согласен, можно и в ядре поменять посредством вба на время разделитель
но лучше наверно попробовать сходу считывать данные без открытия и подменять разделитель
или когда считали данные их уже обработать
5. ВВ , 30.10.2005 19:39
V3
1. без добавления новой книги, можно считывать данные на прямую из закрытой книги эту функцию можешь посмотреть и доработать
Ещё непопробовал. Данные возможно считывть только из закрытой книги excel? Из закрытого файла *.htm их тоже возможно считывать, если доработать функцию?

2. вызов диалогового окна
Нехочет у меня эта процедура работать ругается на FileDialog — user-defined type not defined. Надо какие то библиотеки подключать? Или прототипы библиотечных функций писать?

Добавление от 30.10.2005 20:47:

C датами как то странно, несовсем понял. Excel файлы по какому то разному методу открывает: если вручную Файл->Открыть — то даты получаются вместо чисел, а если на VBA Workbooks.Open Filename:= то всё нормально.
Поменял в настройках(Язык и стандарты) запятую на точку и всё стало нормально и при открытии через Файл->Открыть. Только это всё будет использоваться на разных компах. хотел бы добиться полной автоматизированности — без инструкций юзерам — «Поменяйте там то на то то. «

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

Есть ли какая нибудь стандартная функция которая конвертит дату в число? — только нормальное число которое было в оригинальном файле, а не то что excel выдаёт если поменять формат ечейки с даты на числовой.

P.S. Делаю всё в Win2K Excel2000

6. V3 , 30.10.2005 20:55
ВВ
1. можно и из html брать, только надо смотреть как организовать это дело или как просто чтение из текстового файла. Та функция что по ссылки с html работать не будет

2. Упсс извени не посмотрел твою версию Excel
FileDialog появился с версии 2002, поэтому предыдущими версиями не поддерживается
тебе надо использовать
object.GetOpenFilename (фильтр файла, идекс фильтра, заголовок, подпись кнопки, множественный выбор)
набирал с листа так сказать, поэтому могут быть синтаксические помарки поправь если что

Добавление от 30.10.2005 21:43:

ВВ
как вариант добавить макрос на открытие книги чтобы искал и точку заменял на запятую (ИМХО может есть проще)

Добавление от 31.10.2005 03:51:

Исправил не большую ошибку, и немного расширил пример чтобы было понятнее
В данном примере кода нельзя использовать выделения файлов с Ctrl и Shift (т.е. сразу несколько) для этого надо изменить немного

По поводу точки/запятой может быть надо проверять версию Excel (русская/английская)

7. ВВ , 31.10.2005 09:14
Спасибо за ответы!

V3
1. Решил пойти всё же первым варинатом — открыть и оттуда скопировать.

2.

Хотел только ещё указать каталог в котором открывать через ChDir, но неполучилось

3. как вариант добавить макрос на открытие книги чтобы искал и точку заменял на запятую (ИМХО может есть проще)

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

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

9 ответов

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

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

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

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

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

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

обратите внимание, что» RegistrationList » — это имя вкладки в книге. Есть несколько учебников, плавающих в интернете с подробностями того, что вы можете и не можете сделать, получая доступ к листу таким образом.

просто думаю, я добавлю. 🙂

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

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

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

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

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

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

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

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

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

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

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

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

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

Visual basic открыть файл excel

= Мир MS Excel/Открыть файл excel. (VBA) — Мир MS Excel

—> —> —> Правила форума

FAQНовости сайтаНовые сообщенияУчастникиRSS
Отметить все сообщения прочитанными и перейти на главную страницу форума

—>

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Открыть файл excel. (VBA) (Задача вроде простая, но. )

Открыть файл excel. (VBA)

Michael_SДата: Пятница, 15.03.2013, 11:18 | Сообщение № 1

ЯД: 41001136675053
WM: R389613894253

Ответить

nervДата: Пятница, 15.03.2013, 11:29 | Сообщение № 2

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

VitaltsДата: Пятница, 15.03.2013, 11:47 | Сообщение № 3

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
Dim fn As String

With ActiveWorkbook
fn = Dir(.Path & «*.xls*»)
Do Until fn = «»
If fn <> .Name Then: _
Debug.Print fn
fn = Dir
Loop
End With


PS: что-то код при каждом релоаде по разному кажет, пофиксил форматирование

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
Dim fn As String

With ActiveWorkbook
fn = Dir(.Path & «*.xls*»)
Do Until fn = «»
If fn <> .Name Then: _
Debug.Print fn
fn = Dir
Loop
End With


PS: что-то код при каждом релоаде по разному кажет, пофиксил форматирование Vitalts

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
Dim fn As String

With ActiveWorkbook
fn = Dir(.Path & «*.xls*»)
Do Until fn = «»
If fn <> .Name Then: _
Debug.Print fn
fn = Dir
Loop
End With


PS: что-то код при каждом релоаде по разному кажет, пофиксил форматирование Автор — Vitalts
Дата добавления — 15.03.2013 в 11:47

nervДата: Пятница, 15.03.2013, 11:58 | Сообщение № 4

Зачем же такие извороты? не проще воспользоватся многострочным If?

мой велосипед. Особо не тестировал, но должен работать )

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Example()
Set Folder = GetFileList(«d:Contacts»)
End Sub

‘ —————————————-
‘ Returns collection files of folder

‘ @param Path The path to folder
‘ @param [Filter] The file filter
‘ @return FileList
‘ —————————————-
Private Function GetFileList(ByVal Path As String, _
Optional ByVal Filter As String = «*») As Collection
Static List As New Collection
Static FSO As Object
Static Deep As Integer
Dim SubFolder As Object
Dim Folder As Object
Dim File As Object

If FSO Is Nothing Then
Set FSO = CreateObject(«Scripting.FileSystemObject»)
End If

If FSO.FolderExists(Path) Then
Set Folder = FSO.GetFolder(Path)

For Each File In Folder.Files
If File.Name Like Filter Then
List.Add File
End If
Next

For Each SubFolder In Folder.SubFolders
Deep = Deep + 1
GetFileList SubFolder.Path, Mask
Next

Deep = Deep — 1
End If

If Deep = -1 Then
Set GetFileList = List
Set List = Nothing
Set FSO = Nothing
Deep = 0
End If
End Function

Зачем же такие извороты? не проще воспользоватся многострочным If?

мой велосипед. Особо не тестировал, но должен работать )

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Example()
Set Folder = GetFileList(«d:Contacts»)
End Sub

‘ —————————————-
‘ Returns collection files of folder

‘ @param Path The path to folder
‘ @param [Filter] The file filter
‘ @return FileList
‘ —————————————-
Private Function GetFileList(ByVal Path As String, _
Optional ByVal Filter As String = «*») As Collection
Static List As New Collection
Static FSO As Object
Static Deep As Integer
Dim SubFolder As Object
Dim Folder As Object
Dim File As Object

If FSO Is Nothing Then
Set FSO = CreateObject(«Scripting.FileSystemObject»)
End If

If FSO.FolderExists(Path) Then
Set Folder = FSO.GetFolder(Path)

For Each File In Folder.Files
If File.Name Like Filter Then
List.Add File
End If
Next

For Each SubFolder In Folder.SubFolders
Deep = Deep + 1
GetFileList SubFolder.Path, Mask
Next

Deep = Deep — 1
End If

If Deep = -1 Then
Set GetFileList = List
Set List = Nothing
Set FSO = Nothing
Deep = 0
End If
End Function

Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина — самый громкий звук

YM 41001156540584 / WM WMR R21924176233

Зачем же такие извороты? не проще воспользоватся многострочным If?

мой велосипед. Особо не тестировал, но должен работать )

200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub Example()
Set Folder = GetFileList(«d:Contacts»)
End Sub

‘ —————————————-
‘ Returns collection files of folder

‘ @param Path The path to folder
‘ @param [Filter] The file filter
‘ @return FileList
‘ —————————————-
Private Function GetFileList(ByVal Path As String, _
Optional ByVal Filter As String = «*») As Collection
Static List As New Collection
Static FSO As Object
Static Deep As Integer
Dim SubFolder As Object
Dim Folder As Object
Dim File As Object

If FSO Is Nothing Then
Set FSO = CreateObject(«Scripting.FileSystemObject»)
End If

If FSO.FolderExists(Path) Then
Set Folder = FSO.GetFolder(Path)

For Each File In Folder.Files
If File.Name Like Filter Then
List.Add File
End If
Next

For Each SubFolder In Folder.SubFolders
Deep = Deep + 1
GetFileList SubFolder.Path, Mask
Next

Deep = Deep — 1
End If

If Deep = -1 Then
Set GetFileList = List
Set List = Nothing
Set FSO = Nothing
Deep = 0
End If
End Function

Читать еще:  Vba excel поиск в столбце
Ссылка на основную публикацию
Adblock
detector