Vba excel выбрать файл для открытия - IT Справочник
Llscompany.ru

IT Справочник
19 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel выбрать файл для открытия

Vba excel выбрать файл для открытия

Есть файлы *.htm их надо открывыть в Excel2000 для последующей автоматической обработки посредствам VBA.
Если открывать Workbooks.Open Filename:= _»имя файла» из существующего документа exсel то файл открывается в новом автоматически создающемся документе excel. Возможно ли сделать так, чтобы файл открывался не в новом созданном документа, а на второй странице существующего?
Мне в голову приходит только такой вариант: открыть файл из текущего документа , затем из нового созданной документа excel скопировать данные этого файла в старый документ exсel и закрыть новый созданный. — Может есть какой нибудь более правильный/умный способ?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо за ответы!

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

2.

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

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

Если я поставлю макрос полсе того как открою: Workbooks.Open Filename:= , то он уже непоможет, так как уже будут даты. А как его поставить на открытие книги?

Добавление от 31.10.2005 09:28:

да я и ошибки то незаметил, опечатка только strig вместо string

Диалоговое окно выбора файлов/папки

Часто при работе с файлами и написании кодов начинающие «кодить» в VBA сталкиваются с необходимостью предоставить пользователю возможность самостоятельного выбора файлов: либо всех в указанной папке, либо каких-то отдельных. Конечно, можно жестко в коде написать нечто вроде: «C:DocumentsFilesКнига1.xls» , но это требует не только наличия именно диска С, но и полной структуры папок и имен файлов. Это очень неудобно в большинстве случаев и куда чаще необходимо дать пользователю возможность самому указать имя файла. Записывать в ячейку листа полный путь и имя весьма непрактично и часто для неискушенного пользователя вызывает только «отторжение» от программы. В статье Просмотреть все файлы в папке я приводил пример кода, который просматривает все файлы в указанной папке и папка при этом выбирается сами пользователем из привычного по работе с Windows диалога. Там используется диалог выбора папок. Именно на этом я и хочу сделать акцент в этой статье — рассказать про некоторые способы вызова подобных диалогов для выбора файлов или папки. Так же обращу внимание на некоторые вещи, которые следует учитывать при использовании того или иного типа диалогов.

  • Диалог выбора файлов Applicaton.GetOpenFileName
  • Диалог выбора файлов FileDialog(msoFileDialogFilePicker)
  • Диалог выбора папки FileDialog(msoFileDialogFolderPicker)
  • Диалог выбора папки через Shell
  • Диалог сохранения файла SaveAs
Читать еще:  Нелицензированный продукт word что делать

Если рассматривать наиболее простые варианты, то их два. Выбрать файлы можно через Applicaton.GetOpenFileName или через Application.FileDialog. Отличия в них есть, но я заострю внимание на главном: GetOpenFileName будет работать в любой версии Excel, а класс FileDialog только начиная с Excel 2002, т.к. именно в этой версии впервые был использован класс FileDialog. Это стоит учитывать при разработке.

Диалог выбора файлов Applicaton.GetOpenFileName
Параметры:
Application.GetOpenFilename([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])
По сути я часто использую именно его, т.к. это универсальный метод и в нем есть все, что лично мне необходимо: выбрать определенные типы файлов позволяет, возможность запрета выбора нескольких файлов сразу есть.

avFiles = Application.GetOpenFilename _ («Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt», 2, _ «Выбрать текстовые или Excel файлы», , True)

  • True — можно будет выбрать более одного файла для обработки(через Shift или Ctrl или простым выделением мышью внутри окна)
  • False — можно будет выбрать только один файл

По умолчанию принимает значение False
Выбора только одного файла:

avFiles = Application.GetOpenFilename _ («Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt», 2, _ «Выбрать текстовые или Excel файлы», , False)

Выбор нескольких файлов:

avFiles = Application.GetOpenFilename _ («Excel files(*.xls*),*.xls*,Text files(*.txt),*.txt», 2, _ «Выбрать текстовые или Excel файлы», , True)

Пример применения диалога Application.GetOpenFilename

Sub ShowGetOpenDialod() Dim avFiles ‘по умолчанию к выбору доступны файлы Excel(xls,xlsx,xlsm,xlsb) avFiles = Application.GetOpenFilename _ («Excel files(*.xls*),*.xls*», 1, «Выбрать Excel файлы», , False) If VarType(avFiles) = vbBoolean Then ‘была нажата кнопка отмены — выход из процедуры Exit Sub End If ‘avFiles — примет тип String MsgBox «Выбран файл: ‘» & avFiles & «‘», vbInformation, «www.excel-vba.ru» End Sub

В данном случае совершенно неважно указан ли выбор только одного файла или нескольких. Может поменяться только способ обработки полученного результата. Если параметр MultiSelect установлен в False, то переменная avFiles примет тип String, т.е. это будет одна строка. Предположим, что была выбрана книга Excel. Тогда открыть её можно будет как обычно это делается при использовании переменной:

Если же параметр MultiSelect установлен в True, то переменная avFiles примет тип Array — массив строк, в котором будут записаны все пути и имена выбранных файлов. Обрабатывать в таком случае следует циклом:

‘avFiles — примет тип Array For Each x In avFiles Workbooks.Open x Next

В приложенном к статье файле приведены две процедуры с использованием этого типа диалога и обработкой файлов с параметром MultiSelect , установленным в True и False.

Диалог выбора файлов FileDialog(msoFileDialogFilePicker)

У этого диалога тоже есть параметры и они очень схожи с таковыми в Application.GetOpenFilename:
Ниже в статье примера кода с применением всех описанных параметров

  • True — можно будет выбрать более одного файла для обработки(через Shift или Ctrl или простым выделением мышью внутри окна)
  • False — можно будет выбрать только один файл

  • Description — описание типа файлов. Произвольный текст, указывающий тип файлов. Например «Рисунки» или «Файлы Excel».
  • Extensions — расширения файлов. Непосредственно перед расширением обязательно должна стоять звездочка и точка: *.xls . Иначе диалог выдаст ошибку. Для перечисления нескольких расширений используется разделитель в виде точки-с-запятой: «*.xls*;*.xla*» или «*.xls;*.xlsx;*.xlsm» . Звездочка после расширения заменяет любой набор символов или ни одного. Например, при указании «*.xls*» будет возможным выбрать любые файлы, расширение которых начинается на .xls: .xls,.xlsx,.xlsm,.xlsb и т.д. , но нельзя будет выбрать файлы с расширением .xla,.xlam и тем более .doc или .txt . Если необходимо осуществить выбор любого типа файлов, то необходимо просто очистить фильтр и не добавлять никакие типы: .Filters.Clear
  • Position — указывает, каким по счету в списке будет тип файлов. На рисунке ниже первым идет тип «Excel files», а вторым «Text files»:

Тип файлов, который будет показан по умолчанию при вызове диалога определяется свойством FilterIndex диалога FileDialog.
Важный момент: диалог, вызванный в одном сеансе Excel сохраняет добавленные ранее типы файлов. Поэтому перед назначением новых типов необходимо выполнить очистку фильтра:
.Filters.Clear

Каждый новый тип файлов добавляется новым Add:

Объект FileSystemObject для работы с файлами. С примерами на VBA

Объект FileSystemObject

Ниже приведен справочник по объекту FileSystemObject, который умеет работать с файлами, каталогами, файловыми потоками. Данный объект позволяет читать файлы, писать в файлы, получать информацию о файлах и др. Данный объект используется в ОС Windows, в некоторых скриптовых языках.

1. Создание объекта

2. Свойства

2.1. Drives

Возвращаемое значение: объект-коллекция «Drives».

Замечание: только чтение.

3. Методы

3.1. CreateFolder

Назначение: создаёт каталог с указанным именем.

  • — строка, путь к каталогу. Если такой каталог уже существует, произойдёт ошибка.

3.2. CopyFile

Назначение: копирует один или несколько файлов.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).
  • — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).

3.3. CopyFolder

Назначение: рекурсивно копирует каталог.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).
  • — необязательный, булево (число). Перезаписывать существующие файлы, или нет. По умолчанию — True (перезаписывать). Если файл, который нужно перезаписать, имеет атрибут read-only, возникнет ошибка (независимо от установки этого параметра).

Описание: процесс копирования прерывается после первой возникшей ошибки.

3.4. MoveFile

Назначение: перемещает один или несколько файлов.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).

Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый файл уже существует или является папкой в Destination, возникнет ошибка.

3.5. MoveFolder

Назначение: рекурсивно перемещает один или несколько каталогов.

  • — строка, путь к источнику копирования (что копировать). В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — строка, путь назначения (куда копировать).

Описание: процесс перемещения прерывается после первой возникшей ошибки. Если перемещаемый каталог уже существует или является файлом в Destination, возникнет ошибка.

3.6. DeleteFile

Назначение: удаляет указанный файл.

  • — строка, путь к файлу. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).

3.7. DeleteFolder

Назначение: удаляет указанную папку.

  • — строка, путь к папке. В последнем компоненте параметра можно использовать групповые символы «*» и «?».
  • — необязательный, булево (число). Определяет, удалять или нет файлы с атрибутом read-only. По умолчанию — False (не удалять).

3.8. BuildPath

Назначение: добавляет к заданному пути новое имя. Если необходимо, вставляется «».

— строка, путь.

  • — строка, имя файла.
  • 3.9. GetAbsolutePathName

    Назначение: возвращает полный путь для заданного относительного пути (из текущего каталога).

    — строка, относительный путь.

    3.10. GetBaseName

    Назначение: возвращает имя (без расширения) последнего компонента в заданном пути.

    3.11. GetExtensionName

    Назначение: возвращает расширение последнего компонента в заданном пути.

    3.12. GetFileName

    Назначение: возвращает имя (с расширением) последнего компонента в заданном пути.

    3.13. GetParentFolderName

    Назначение: возвращает путь к последнему компоненту в заданном пути (его каталог).

    3.14. GetDriveName

    Назначение: возвращает имя диска в заданном пути.

    3.15. DriveExists

    Назначение: возвращает True, если указанный диск сущесвтвует, и False в противном случае.

    3.16. FileExists

    Назначение: возвращает True, если указанный файл сущесвтвует, и False в противном случае.

    3.17. FolderExists

    Назначение: возвращает True, если указанный каталог сущесвтвует, и False в противном случае.

    3.18. GetDrive

    Назначение: возвращает объект «Drive» по указанному имени или пути.

    • — строка, имя диска или путь к корневому каталогу диска, возможно UNC-путь.

    3.19. GetFile

    Назначение: возвращает объект «File» по указанному пути.

    Описание: если файл не существует, произойдёт ошибка.

    3.20. GetFolder

    Назначение: возвращает объект «Folder» по указанному пути.

    Описание: если каталог не существует, произойдёт ошибка.

    3.21. GetSpecialFolder

    Назначение: возвращает объект «Folder» для некоторых специальных папок Windows.

    • — число, определяет специальную папку. Возможные значения:
      • 0 — Каталог Windows.
      • 1 — Системный каталог библиотек и драйверов.
      • 2 — Каталог временных файлов, путь к которому хранится в переменной среды «TMP».

    Описание: если каталог не существует, произойдёт ошибка.

    3.22. GetTempName

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

    3.23. CreateTextFile

    Назначение: создаёт новый текстовый файл и возвращает объект «TextStream», указывающий на него.

    • — строка, путь к файлу.
    • — необязательный, булево (число). Перезаписывать файл, если он существует (True), или нет (False). По умолчанию — False. Если указано False и файл существует — произойдёт ошибка.
    • — необязательный, булево (число). Файл в формате Unicode (True), или ASCII (False). По умолчанию — False.

    3.24. OpenTextFile

    Бесплатный видеокурс по SQL

    Vba excel выбрать файл для открытия

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

    И как потом править сию книгу? Ведь если её откроешь — покажется форма.

    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Не очень понятно про форму. (это форма VBA или просто отдельный лист Excel. )

    На кнопки нужно повесить следующие строки:
    1. Excel.ActiveWorkbook.Close — закрытие документа
    2. Application.Quit — выход из Excel

    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Felix
    Отдельная форма VBA. Не на листе. Сервис->Макрос->Редактор Visual Basic и уже там создаём форму Insert->UserForm. Пока растянул на листе одну большую панельку и на её нажатие приделал вызов Show для формы. Но как-то это через одно место.

    Угу, tnx. Заработало.
    KEY

    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору 2All
    Вы чего, у любого листа экселя и книги есть свойство Activate.
    (А у книги еще есть св-во Open)
    KEY

    Дурак вы боцман.(c)

    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 1. Что бы автоматом запустить форму UserForm1 в Excele
    нужно обработать событие Open

    Private Sub Workbook_Open()
    UserForm1.Show
    End Sub

    чтобы выйти из формы нужно
    вставить на кнопку CommandButton1
    Private Sub CommandButton1_Click()
    Me.Hide
    End Sub

    Кстати в Word-e это выглядит почти также

    2. Насчет программирования в VBA (Access, Word, Excel, Outlook)
    Идея MS Office как средства для разработки очень хороша:
    Есть база данных, есть электронная таблица, текстовый процессор и организатор.
    но внутренние объектные модели каждого из этих приложений очень сложны (или
    запутаны). Я реально попробовал только совместную работу Access+Word.

    Открыть файл 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 скройте книги и сохраните их как скрытые. Когда ваше приложение загружает их, они не будут отображаться.

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

    Ссылка на основную публикацию
    ВсеИнструменты 220 Вольт
    Adblock
    detector