Как открыть файл в vba access

Обновлено: 06.07.2024

Как я могу открыть диалоговое окно открытого файла (или выбора файла) в Access VBA?

Я попытался использовать Application.GetOpenFileName, как в Excel, но эта функция не существует в Access.

спросил(а) 2009-07-07T13:12:00+04:00 12 лет, 4 месяца назад

Мои комментарии по поводу ответа Рено Бумпуса перепутались.

На самом деле вы можете использовать позднюю привязку, и ссылка на библиотеку объектов 11.0 не требуется.

Следующий код будет работать без каких-либо ссылок:

Как следует из примера, просто убедитесь, что у вас есть ссылка на библиотеку объектов Microsoft Access 12.0 (в меню VBE IDE > Инструменты > Ссылки).

ответил(а) 2009-07-08T06:19:00+04:00 12 лет, 4 месяца назад

Дополнение к тому, что сказал Альберт:

Этот код (mashup различных образцов) предоставляет возможность иметь диалоговое окно SaveAs

ответил(а) 2011-07-07T04:28:00+04:00 10 лет, 4 месяца назад

У меня есть аналогичное решение выше, и оно работает для открытия, сохранения, выбора файла. Я вставляю его в свой собственный модуль и использую во всех создаваемых БД доступа. Как говорится в коде, для него требуется библиотека объектов Microsoft Office 14.0. Предположим, еще один вариант:

ответил(а) 2015-03-19T00:58:00+03:00 6 лет, 8 месяцев назад

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

Примечание: значение varfile останется таким же, поскольку multiselect false (выбирается только один элемент). Я использовал его значение за пределами цикла с равным успехом. Однако, вероятно, лучше было сделать это, как это сделал Джон М. Кроме того, вы можете выбрать папку для выбора выбранной папки. Я всегда предпочитаю позднюю привязку, но я думаю, что объект является родным для библиотеки доступа по умолчанию, поэтому здесь может не понадобиться


HXT выдаёт ошибку если указать полный путь к файлу
Задумал я приделать к своей проге xml-конфиг. module.

Как указать полный путь к файлу в директории приложения из библиотеки классов
Следующая ситуация есть dll библиотека в ней хранится метод загрузки данных из файла и файл xml.


Правильный указать путь к файлу стилей относительно корневого каталога
Приветствую. Если есть на хосте папка, то чтобы со странице перейти к странице, которая в папке.

Файл: Получить полный путь к файлу и записать этот путь в отдельную переменную.
Доброго времени суток.Столкнулся с проблемой в ходе выполнения задачи. Мне нужно получить полный.

Добавлено через 2 минуты
По второму вопросу: можно искать рядом с программой
По второму вопросу: можно искать рядом с программой
Код Visual Basic
1
FileName:=app.path & "\1.doc" На этой строке выдает ошибку:
run-time error 424
object required

А есть файл рядом с программой?

Добавлено через 3 минуты
Сорри не APP надо

Без app ищет файл в C:\windows\system32

Добавлено через 2 минуты
А как можно получить путь от куда запускается макрос?

Решение

Добавлено через 1 минуту
APP это в бейсике. Проморгал, что не тот раздел Бывает Главное что помог. Спасибо файл открывает
Только вот, все равно в свернутом окне
Что написал так и делает!
Я же просто перечислил варианты состояния. Надо выбрать нужный
открывает word в свернутом состоянии, а мне нужно открывать не в свернутом. Я наверное не правильно сформулировал вопрос) Я смоделировал ситуацию (правда из ексел, но это не важно)
И выполнил в пошаговом режиме
Я смоделировал ситуацию (правда из ексел, но это не важно)
И выполнил в пошаговом режиме Понял)) Я пробовал вставлять только одну строку, когда вставил все три - Заработало) а как сделать чтоб открываемый файл запускался поверх всех окон а как сделать чтоб открываемый файл запускался поверх всех окон

Добавлено через 2 минуты

Добрый день всем,
Помогите пожалуйста, тоже самое повторить только со слиянием. Есть форма "Запросы" с кнопкой открытия файла Word, все открывается и работает, но вот не задача, нужно чтобы было слияния еще с таблицей "Запросы". Подскажите пожалуйста

Добавлено через 15 секунд
Добрый день всем,
Помогите пожалуйста, тоже самое повторить только со слиянием. Есть форма "Запросы" с кнопкой открытия файла Word, все открывается и работает, но вот не задача, нужно чтобы было слияния еще с таблицей "Запросы". Подскажите пожалуйста

Здравствуйте! Использовала для запуска Word макрос, который предложил автор темы:
Но возникла проблема. Файлы Word содержат слияние с базой данных. По кнопке мне нужно их просто открыть с сохранением слияния. Но, к сожалению, слияние сбрасывается и в открывшемся файле снова приходится открывать источник записей. Помогите, пожалуйста, как сделать чтобы слияние при открытие из Access сохранялось в файлах Word. Помогите, пожалуйста, как сделать чтобы слияние при открытие из Access сохранялось в файлах Word.

а зачем вам слияние, если запускаете из аксесс

в аксессе сделайте ленточную форму
--для поиска и фильтрации по нескольким полям
--в шаблон ворда поместите закладки(или поля замены) , чтобы показать, куда делать вставки
--небольшой код для вывода данных выбранной строки в шаблон word(вариантов более 10)

выложите пример базы и шаблона(со слиянием)
+сколько примерно у вас шаблонов

Добавлено через 2 минуты

глаза боятся а руки делают
переделывать --это одноразовая работа
а выбор и запуск на выполнение --десятки-сотни раз

Как правильно указать путь к Word файлу?
Есть программа ,которая меняет текст в word файле на текст из textBox, но для этого нужно указывать.

Как из Access открыть файл, используя диалоговое окно "Открыть файл"?
Из базы данных в Access нужно открыть файл Exsel. причем пользователь должен выбрать его сам. то.


Получить полный путь к файлу из диалога открытия файла из js
Нужно кроссбраузерное решение. Сам файл мне не нужен, нужен только полный путь к нему. Запуск.


Сохранение файла Word при экспорте из Access в нужном месте и с именем из поля Access
Добавлено через 5 минут Нужна помощь знатоков. Имеется вот такой код для слияния данных из Access.


Как правильно указать путь к файлу Word-шаблону чтобы проект можно было запускать с других компьютеров?
Подскажите пожалуйста. Как правильно указать путь к файлу Word-шаблону(по которому строится отчет.

Доброе утро!
Помогите пожалуйста разобраться с кодом, который написа в Access. При нажатии на кнопку на форме Access, у меня открываетя книга excel, а вот потом все неработает, не могу понять почему.

Доброе утро!
Помогите пожалуйста разобраться с кодом, который написа в Access. При нажатии на кнопку на форме Access, у меня открываетя книга excel, а вот потом все неработает, не могу понять почему.

[/vba] Автор - A_3485
Дата добавления - 05.10.2012 в 10:59

Эта строчка неправильная, без неё нормально открывается
.Workbooks("sFullPath").Activate

ИМХО: с обработчиками ошибок перемудрили

Эта строчка неправильная, без неё нормально открывается
.Workbooks("sFullPath").Activate

ИМХО: с обработчиками ошибок перемудрили Pelena

ИМХО: с обработчиками ошибок перемудрили Автор - Pelena
Дата добавления - 05.10.2012 в 13:28

Да это так, но мне нужно, чтобы Книга стала активной и отобразился Лист1 Да это так, но мне нужно, чтобы Книга стала активной и отобразился Лист1 A_3485
Как же он отобразится, если вы его в этом коде скрываете?
Как же он отобразится, если вы его в этом коде скрываете? Pelena
Как же он отобразится, если вы его в этом коде скрываете? Автор - Pelena
Дата добавления - 05.10.2012 в 14:38 Я наверное не совсем правильно выразился в постановке задачи. Мне хтелось бы, чтобы после пыполнения указанного кода, стал активен excel, т.е автоматически произошло переключение на активную книгу. Я наверное не совсем правильно выразился в постановке задачи. Мне хтелось бы, чтобы после пыполнения указанного кода, стал активен excel, т.е автоматически произошло переключение на активную книгу. A_3485 Поскольку при помощи CreateObject("Excel.Application") создается новый экземпляр (сессия) Excel (в отличие от GetObject), то открываемая книга будет в нём единственная, а, значит, и активная. Поэтому дополнительно ее активировать не надо (тем более таким ошибочным оператором).
Поскольку при помощи CreateObject("Excel.Application") создается новый экземпляр (сессия) Excel (в отличие от GetObject), то открываемая книга будет в нём единственная, а, значит, и активная. Поэтому дополнительно ее активировать не надо (тем более таким ошибочным оператором).
Gustav По мне так вот такой код вполне может открыть нужный файл на первом листе
[vba] По мне так вот такой код вполне может открыть нужный файл на первом листе
[vba] [/vba] Автор - Pelena
Дата добавления - 05.10.2012 в 16:58 Все бы ничего если бы. открывался именно файл "заявление" не как файл для чтения(при сохранения пишет замеить существующий), а сам по себе и при открытии можно было снять пароли, отобразить Листы, и сделать книгу активной. Все бы ничего если бы. открывался именно файл "заявление" не как файл для чтения(при сохранения пишет замеить существующий), а сам по себе и при открытии можно было снять пароли, отобразить Листы, и сделать книгу активной. A_3485

Может, Вам лучше будет открыть как шаблон, т.е. не через Open, а через Add ?

Может, Вам лучше будет открыть как шаблон, т.е. не через Open, а через Add ?

[/vba] Автор - Gustav
Дата добавления - 05.10.2012 в 17:27

Я, конечно, не вижу Ваш файл. Создала свой. Но у меня он открывается с возможностью редактирования и сохраняется обычным образом.

Может Вы несколько раз уже эту кнопку нажали, и файл уже был открыт, тогда, конечно, ТОЛЬКО ДЛЯ ЧТЕНИЯ

Я, конечно, не вижу Ваш файл. Создала свой. Но у меня он открывается с возможностью редактирования и сохраняется обычным образом.

Может Вы несколько раз уже эту кнопку нажали, и файл уже был открыт, тогда, конечно, ТОЛЬКО ДЛЯ ЧТЕНИЯ Pelena

Может Вы несколько раз уже эту кнопку нажали, и файл уже был открыт, тогда, конечно, ТОЛЬКО ДЛЯ ЧТЕНИЯ Автор - Pelena
Дата добавления - 05.10.2012 в 17:29

Одной из важнейших составляющих любого языка программирования является способность считывать и записывать информацию из файлов. Стандартно это называется функциями низкого уровня (Low Level) и в полном объеме представлено в VBA. Кстати, именно эта особенность и является основой опасности макросов.

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

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

P.S.! Завершение переработки материалов разработчика приводит к совершенно неутешительным выводам. Материала по этой теме всегда было очень мало, да и качество оставляло желать лучшего. Теперь же он стал «обструганным» под непонятный стандарт, разорванным в несвязанное словоизвержение и напичканным примерами, половина из которых только запутывает ситуацию, а вторая — ничего не иллюстрирует. Ну, или почти так.

Работа с файлами, дисками и папками, путь

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

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

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

CurDir

Определение текущей папки.

Из синтаксиса можно понять (или нет) достаточно многое.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Перечисленное не дает однозначного ответа на возникающие вопросы, но является основой для таковых. Частичные решения есть в разделе Примеры.

ChDrive

Инструкция для смены текущего диска (ChDrive) работает довольно примитивно. Так, вариант

определит текущим диском диск «D:». Из примера видно, что приводится только литерал, без двоеточия.

ChDir

Изменяет текущий каталог или текущую папку

Внимание! Изменяется текущая папка на указываемом диске, а не сам диск. Для смены диска потребуется команда ChDrive.

В значении пути можно использовать обозначения относительного перемещения. Например,

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Функция возвращает строку (String) с именем обнаруженных на диске файла, папки или подпапки. Если объект файловой системы обнаружен не будет, возвратится пустая строка.

В имени можно использовать знаки подстановки маски файла (* и ?).

Передача в качестве аргумента пустой строки возвращает список всех файлов и папок.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Атрибуты (копия из справки)

КонстантаЗначениеОписание
vbNormal0 Файлы без атрибутов (Значение по умолчанию.)
vbReadOnly1В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения
vbHidden2В дополнение к файлам без атрибутов определяет скрытые файлы
vbSystem4В дополнение к файлам без атрибутов определяет системные файлы
vbVolume8Определяет метку тома, то есть имя логического диска (не букву!). Если указан какой-либо другой атрибут, параметр vbVolume игнорируется
vbDirectory16В дополнение к файлам без атрибутов определяет каталоги (папки)

Из контекста описания понятно, что атрибуты могут суммироваться.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Оператор Name переименовывает файл или папку и/или перемещает их в новое место.

Name <oldpathname> As <newpathname>

  • Обрабатываются только уже существующие объекты.
  • Файл может быть перемещен на другой диск.
  • Файлы, открытые низкоуровневыми процедурами, надо предварительно закрыть.
  • Перемещение папок и подпапок возможно только в пределах логического диска.

MkDir

Создает новый каталог или папку.

Если диск не указан, новые каталог или папка создаются на текущем диске. Имя присваивается с учетом регистра символов.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

RmDir

Удаляет существующую директорию или папку.

Невозможно удалить папку, содержащую файлы, так что следует вначале удалить их, используя команду Kill. Также этой командой нельзя удалить файл.

Удаляет файлы с диска.

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

В имени можно использовать знаки подстановки маски файла (* и ?).

Так как команда удаляет только файлы, для удаления папок следует воспользоваться командой RmDir.

SetAttr

Устанавливает атрибуты файла.

SetAttr <имя файла>, <атрибуты>

Оба параметра являются обязательными. Имя файла может содержать путь.

Нельзя изменять атрибуты у открытых файлов!

Атрибуты:

КонстантаЗначениеОписание
vbNormal0Без атрибутов (по умолчанию)
vbReadOnly1Только для чтения (Read-only)
vbHidden2Скрытый файл (Hidden)
vbSystem4Системный файл (System)
vbArchive32Файл изменен после последнего резервного копирования

Атрибуты при указании могут суммироваться.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Низкоуровневые функции

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

Идентификатор файла

Его должен задать программист, но делать это вручную допустимо только для простых ситуаций. Лучше воспользоваться следующей функцией

где RangeNumber — 0 (1–255) или 2 (256–511).

Простейший вариант обращения (запроса) к функции выглядит так:

Далее по тексту будет использоваться именно выделенная красным переменная, содержащая получаемый ID (для упрощения записи). Если не будет заявлено другое или использовано явное указание.

Открывает файл для операций ввода/вывода (input/output, I/O).

Если указываемый на запись файл отсутствует, то он будет создан. Естественно, попытка чтения несуществующего файла закончится ошибкой (см. Dir).

Описание команды упрощено!

После завершения работы файл должен быть закрыт. Иначе какой-либо доступ к нему может быть заблокирован (в примитивном понимании и без дополнительного обсуждения). Для этого используется следующая команда:

В качестве параметра передается номер файла, номера файлов через запятую или ничего. В последнем случае закроются все открытые файлы.

Reset

Закрывает все файлы, открытые с помощью оператора Open, записывая содержимое их буферов на диск.

По существу, дублирует команду Close без атрибутов.

Чтение и запись

  • Последовательный (Sequential) доступ (режимы Input, Output и Append) используется для записи в текстовые файлы, например, журналы ошибок и отчеты.
  • Прямой или произвольный доступ (Random) используется для считывания и записи данных в файле без его закрытия. Файлы с прямым доступом сохраняются данные в записях, что ускоряет нахождение требуемой информации.
  • Двоичный доступ (режим Binary) используется для считывания или записи любого байта в файле, например, при сохранении или отображении растрового рисунка.

Записывает данные в последовательный файл в структурированном виде.

Необязательный параметр OutputList представляет одно или несколько числовых, или строковых выражений через запятую, которые нужно записать в файл. В переводе на обыденный язык, каждая строка подобного результирующего файла является перечнем значений с разделителем, каждое из которых записано по строгим правилам. Фактически мы получаем известный большинству CSV-файл. Чтобы не возникало неожиданностей при считывании, следует очень четко придерживаться правил.

Отсутствие OutputList (запятая в команде остается!) приводит к записи пустой строки.

В подобном файле крайне удобно хранить настройки для работы проекта, которые пользователь может изменить в соответствии со своими потребностями. Для передачи подобных макросов на сторону следует предусматривать (встраивать) возможности восстановления файлов, если пользователь их удалит или отредактирует вручную.

С другой стороны, набор множества таких строк представляет собой своего рода таблицу базы данных.

Записывает отформатированные данные в последовательный файл.

OutputList — выражение или список выражений, которые необходимо вывести.

Его синтаксис

С учетом специфического применения оператора, детали его действия опущены.

Параметр n указывает, сколько пробелов будет возвращено. При переполнении строки, излишек переходит на следующую.

Если не умничать, то функция будет работать только с моноширинным шрифтом.

Вставляет табулятор. Если параметр не указан, печать смещается к следующей позиции (шаг равен 14 символам). Наличие параметра перемещает к позиции с указанным номером. А если она уже была, то на эту позицию, но следующей строки.

Если значение width равно 0, длина строки является неограниченной. Оно используется по умолчанию.

Читает строку со структурированными данными из открытого последовательного файла и сохраняет эти данные в переменных.

Параметр VarList представляет собой перечисленный список переменных, в которые сохраняются считываемые данные.

Считывает одну строку из открытого последовательного файла и присваивает ее переменной типа String или Variant.

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

Считывает данные из открытого файла на диске в переменную.

Необязательный параметр RecNumber типа Variant (Long) указывает на номер записи (для файлов, открытых в режиме Random) или байтовое число (для файлов, открытых в режиме Binary), с которого начинается считывание. При его отсутствии, запятая сохраняется Результат сохраняется в переменную VarName.

Записывает данные из переменной в файл на диске.

  1. Параметр Len, задаваемый при открытии файла, играет ключевую роль. Во-первых, длина записи не может его превышать. Во-вторых, если запись меньше, то она дополняется пробелами до размера Len.
  2. Если записываемая переменная является строкой переменной длины, оператор Put записывает 2-байтовый дескриптор c длиной строки, а затем переменную. То есть длина записи, указанная предложением Len в операторе Open, должна быть по крайней мере на 2 больше, чем фактическая длина строки записываемых данных.
  3. Если записываемая переменная имеет числовой подтип Variant, оператор Put записывает дополнительно 2 байта, указывающие на тип. См. п.2.
  4. Если записываемая переменная имеет строковый подтип Variant, оператор Put записывает дополнительно 2 байта, указывающие на тип и еще 2 — на длину. Соответственно, значение Len должно быть увеличено на 4.
  5. Если записываемая переменная является динамическим массивом пользовательского типа, Put записывает дескриптор, длина которого равна 2 плюс в 8 раз больше числа измерений, то есть 2 + 8 * число измерений. То есть, для одномерного массива — 10 (2+8*1), для двумерного — 18 (2+8*2) и т.д. Плюс размер массива, описать который нормально сотрудники Microsoft не удосужились.
  6. Если записываемая переменная является массивом фиксированного размера, оператор Put записывает только данные, без дескриптора.
  7. При любом другом типе переменной все также, как и в п.6.
  • Параметр Len, задаваемый при открытии, не действует. Значения переменных записываются последовательно, без заполнителя.
  • Для любого другого массива, чем массив типа, определяемого пользователем, оператор Put записывает только данные, без дескриптора.
  • Оператор Put записывает строки переменной длины, не являющиеся элементами типов, определяемых пользователем, с числом байтов равных числу знаков в строке.

Параметр position указывает начальную точку чтения и должен располагаться в диапазоне 1—2 147 483 647.

По существу, оператор назван неудачно, так как ничего не ищет, а просто перемещается по команде.

Примеры

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

Также не будет полноценных примеров для бездумного копирования.

Многие ситуации содержат схожие требования, но идеальное решение должно состоять из множества функций. Сейчас их делать не очень хочется, но это запланировано в перспективе.

В любом случае, все примеры полностью работоспособны.

Принципиально важен факт документирования функции с точки зрения возвращаемых значений. Равно как и описание передаваемых параметров.

  • Путь должен содержать литерал диска (C. ).
  • Путь не должен заканчиваться косой чертой: «C:\a\b».
  • Если путь и файл передаются отдельно, то имя файла не должно содержать пути.
  • Все параметры являются обязательными и не могут быть пустыми. Последнее обстоятельство не проверяется.

Создание файла

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

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Ещё один момент. Добавим программу (фрагмент), которая будет запускать процесс.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Проверка существования файла

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

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Запись информации в новый файл

Разумеется, что в этой ситуации файл нужно не открыть, а создать.

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Добавление информации в существующий файл

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

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Построчное считывание файла

Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

Назначение текущей папки

Если работа с проектами так или иначе связана с файлами, хранящимися в одной папке, самым простым вариантом будет назначение ее текущей.

Представленный пример имеет формат глобальной функции (доступной для любого проекта), производящей множество проверок.

Доступ к размещенным в этом месте материалам ограничен и предоставляется следующим категориям:
1. Студент I/II курса ВХК РАН. 2. Бывший студент ВХК РАН. 3. Подготовка к ОГЭ. 4. Подготовка к ЕГЭ. 5. VIP-пользователь. 6. Благотворитель.

В принципе, возможна как оптимизация программы, так и ее модернизация или приспособление для других нужд.


Copyright © 1993–2021 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.

Читайте также: