Как сохранить файл визуал бейсик
Несмотря на то, что во время разработки свойствам объекта можно задать значения по умолчанию, любые значения, введенные во время выполнения, будут потеряны при уничтожении объекта. С помощью сериализации можно сохранить данные объекта между экземплярами, что позволит сохранять значения и извлекать их при следующем создании экземпляра объекта.
В Visual Basic можно использовать объект My.Settings для хранения простых данных, таких как имя или число. Дополнительные сведения см. в разделе Объект My.Settings.
В этом пошаговом руководстве будет создан простой объект Loan , а его данные сохранены в файл. Затем при повторном создании объекта вы получите данные из файла.
В этом примере создается файл (если файл отсутствует). Если приложение должно создать файл, ему необходимо разрешение Create для папки. Для задания разрешений используются списки управления доступом. Если файл уже существует, приложению требуется лишь разрешение Write (с более низким уровнем). Если возможно, безопаснее создать файл во время развертывания и предоставить только разрешение Read для одного файла (вместо разрешения Create для папки). По тем же соображениям рекомендуется записывать данные в пользовательские папки, а не в коревую папку или папку Program Files.
В этом примере данные сохраняются в двоичном формате. Эти форматы не следует использовать для конфиденциальных данных, таких как пароли или сведения о кредитных картах.
Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска. Чтобы изменить параметры, выберите в меню Сервис пункт Импорт и экспорт параметров . Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки Visual Studio.
Создание объекта Loan
Первым шагом является создание класса Loan и тестового приложения, которое использует класс.
Создание класса Loan
Создайте проект библиотеки классов и назовите его LoanClass. Дополнительные сведения см. в разделе Создание проектов и решений.
В обозревателе решений щелкните правой кнопкой мыши файл Class1 и выберите команду Переименовать. Измените имя файла на Loan и нажмите клавишу ВВОД. При переименовании файла класс также будет переименован в Loan .
Добавьте в класс следующие открытые члены:
Также потребуется создать простое приложение, которое использует класс Loan .
Создание тестового приложения
Чтобы добавить проект приложения Windows Forms в существующее решение, щелкните в меню Файл пункт Добавить, а затем Новый проект.
В диалоговом окне Добавление нового проекта выберите Приложение Windows Forms и введите LoanApp в качестве имени проекта, а затем нажмите кнопку ОК, чтобы закрыть диалоговое окно.
В обозревателе решений выберите проект LoanApp.
В меню Проект выберите команду Назначить запускаемым проектом.
В меню Проект выберите Добавить ссылку.
В диалоговом окне Добавление ссылки откройте вкладку Проекты и выберите проект LoanClass.
В конструкторе добавьте на форму четыре элемента управления TextBox.
В редакторе кода добавьте следующий код:
Добавьте в форму обработчик события для события PropertyChanged , воспользовавшись следующим кодом:
Теперь можно собрать и запустить приложение. Обратите внимание, что в текстовых полях отображаются значения по умолчанию из класса Loan . Попробуйте изменить значение процентной ставки с 7,5 на 7,1, затем закройте приложение и запустите его снова — будет восстановлено заданное по умолчанию значение 7,5.
В реальной жизни процентная ставка время от времени меняется, но не при каждом запуске этого приложения. Чтобы не заставлять пользователя обновлять процентную ставку при каждом запуске приложения, рекомендуется сохранять самое последнее значение процентной ставки между экземплярами приложения. На следующем шаге для этого в класс Loan будет добавлена сериализация.
Использование сериализации для хранения объекта
Чтобы сохранить значения для класса Loan, прежде всего необходимо отметить класс атрибутом Serializable .
Отметка класса как сериализуемого
Измените объявление класса для класса Loan следующим образом:
Атрибут Serializable сообщает компилятору, что все находящееся в классе может быть сохранено в файле. Поскольку событие PropertyChanged обрабатывается в объекте Windows Form, его невозможно сериализовать. Атрибут NonSerialized используется для пометки членов класса, которые не следует сохранять.
Предотвращение сериализации членов
Измените объявление события PropertyChanged следующим образом:
Следующим шагом будет добавление кода сериализации в приложение LoanApp. Чтобы выполнить сериализацию класса и записать данные в файл, используйте пространства имен System.IO и System.Xml.Serialization. Во избежание ввода полных имен можно добавить ссылки на необходимые библиотеки классов.
Добавление ссылок на пространства имен
Добавьте в начало файла Form1 следующие инструкции:
В этом случае используется двоичный модуль форматирования для сохранения объекта в двоичном формате.
Следующим шагом является добавление кода для десериализации объекта из файла при создании объекта.
Десериализация объекта
Добавьте в класс константу для имени файла сериализованных данных.
Измените код процедуры события Form1_Load следующим образом:
Прежде всего убедитесь, что файл существует. Если он существует, создайте класс Stream для чтения двоичного файла и класс BinaryFormatter для преобразования файла. Кроме того, необходимо преобразовать тип потока в тип объекта Loan.
Далее необходимо добавить код для сохранения данных, введенных в текстовые поля класса Loan , а затем сериализовать класс в файл.
Сохранение данных и сериализация класса
В процедуру события Form1_FormClosing добавьте следующий код:
Теперь можно снова собрать и запустить приложение. Первоначально в текстовых полях отображаются значения по умолчанию. Попробуйте изменить их и ввести имя в четвертое текстовое поле. Закройте приложение, а затем снова запустите его. Обратите внимание, что теперь в текстовых полях отображаются новые значения.
Привет, сейчас мы рассмотрим ситуацию, когда у Вас возникла необходимость в Excel сохранять файл с определенным названием, которое необходимо сформировать из значения ячейки или даже нескольких. В этой заметке я приведу простой пример реализации данной задачи.
Исходные данные
Сначала давайте разберем исходные данные, которые я буду использовать в примерах. Пусть это будет некая абстракция марок автомобилей с указанием их VIN номера.
Примечание! Я использую Excel 2013.
В зависимости от конкретных требований и условий, задачу можно реализовать по-разному, хотя принцип будет один и тот же, в этой статье мы рассмотрим несколько вариаций реализации.
Начнем мы с самой простой ситуации, когда заранее известна ячейка, на основе которой будет сформировано имя файла, и адрес этой ячейки изменяться не будет.
Итак, данные у нас есть, теперь необходимо написать процедуру на VBA (макрос), которая брала бы значение из конкретной ячейки, в данном случае это будет ячейка B14, и присваивала бы это значение имени файла.
Если нужно сохранять макрос в каждом файле, т.е. файлы с поддержкой макросов (расширение .xlsm), то необходимо просто указать другой тип файла при сохранении, а именно xlOpenXMLWorkbookMacroEnabled, в процедурах в комментариях я это указываю.
Открываем в Excel редактор Visual Basic, и вставляем код следующей процедуры в исходный код этой книги (ЭтаКнига, открыть двойным кликом) или в модуль, который Вы предварительно должны создать.
Примечание! Для того чтобы открыть редактор Visual Basic в Excel, необходимо перейти на вкладку «Разработчик» и нажать на кнопку «Visual Basic». Файл Excel с кодом процедуры необходимо сохранить с типом «Книга Excel с поддержкой макросов».
Код процедуры
После сохранения файла запустите макрос («Макросы -> Выполнить -> SaveFile»).
Добавление кнопки в Excel для запуска макроса
Каждый раз открывать окно с макросами и выбирать нужный макрос не очень удобно, поэтому можно легко добавить кнопку где-нибудь рядом с данными и просто нажимать ее. Это делается следующим образом «Вкладка Разработчик -> Вставить -> Кнопка (элемент управления формы)».
Затем выберите место, где вставить кнопку, и нажмите туда. После этого появится окно назначения действия, т.е. нужно выбрать, какой макрос запускать при нажатии этой кнопки, выбираем наш макрос, т.е. SaveFile, и нажимаем «ОК».
В итоге появится кнопка с названием «Кнопка», это название лучше изменить, например, на «Сохранить файл». Для этого нажмите правой кнопкой мыши на кнопку и выберите настройки «Изменить текст». В итоге у Вас должно получиться что-то вроде этого.
Теперь давайте представим, что заранее мы не можем определить, какая именно ячейка будет формировать название файла (может B14, а может и нет), поэтому мы можем немного скорректировать алгоритм таким образом, чтобы он брал значение из ячейки, которая является активной, но в этом случае Вы, конечно же, предварительно, должны выбрать ее (т.е. встать на нее).
Замените код процедуры следующим кодом, который совсем немного, но изменен.
Проверяем работу, становимся на нужную ячейку, и запускаем макрос (в процедуре я добавил проверку, если выбрана пустая ячейка, возникнет ошибка).
Как видим, все отработало.
Сохранение файла Excel с названием, которое сформировано из значений двух ячеек
Теперь представим, что нам нужно сформировать файл с названием из значений двух ячеек. Например, в нашем случае это может быть «Марка Авто – VIN Номер», в качестве разделителя я указал символ – (дефис), но им может выступать любой символ или вовсе отсутствовать.
В этом примере я покажу, как можно это реализовать с привязкой к конкретным ячейкам, в нашем случае B14 и D14.
Код процедуры в данном случае будет выглядеть следующим образом.
Все ОК, файл создан.
Если вдруг нужно реализовать без привязки к конкретным ячейкам, например, значения хранятся в определённых столбцах, но конкретная строка неизвестна Вам заранее. Например, у меня несколько строк со значениями, и какие конкретно значения взять за основу названия файла, я хочу указывать самостоятельно, непосредственно перед сохранением, но при этом не редактировать код процедуры.
Для этого мы снова внесем изменения в нашу процедуру, которая будет работать от активной ячейки (смещение от активной ячейки), только с условием того, что выбран столбец с теми значениями, которые необходимо использовать.
Код процедуры
Становитесь на любую ячейку со значением в столбце B, и запускайте макрос.
Если вы часто пользуетесь Microsoft Excel, вы должны использовать в нем функцию «Сохранить как», которая позволяет сохранять открытую в настоящий момент книгу с другим именем или другим форматом (Excel Macro-enabled, CSV, PDF и т. Д.). Вы также можете сохранить файл в другой папке, используя этот метод. Однако возможно ли использовать ту же функцию под VBA? Ответ абсолютный Да! У нас также есть функция «Сохранить как» в VBA, которая помогает нам выполнять все вышеупомянутые задачи наряду с некоторыми дополнительными преимуществами (очевидно, автоматизация - одно из преимуществ). В этой статье мы рассмотрим различные примеры функции VBA SAVE AS.
Формула для функции Сохранить как в Excel VBA
Давайте посмотрим ниже формулу для функции Сохранить как в VBA.
- FileName - имя книги, которую нужно сохранить.
- FileFormat - формат файла, в котором файл должен быть сохранен (напр. Pdf, CSV и т. Д.)
- Пароль - пароль для защиты рабочей книги (рабочая книга не может быть доступна без пароля)
- WriteResPassword - Напишите пароль бронирования для книги.
- ReadOnlyRecommended - распознает, сохранена ли книга в формате только для чтения или нет.
- CreateBackup - определяет, создан ли файл резервной копии для книги.
- AccessMode - распознает режим доступа к книге .
- ConflictResolution - распознает конфликты, возникающие, когда рабочая книга является общей и используется более чем одним пользователем.
- AddToMru - проверяет, добавлена ли рабочая книга в недавно использованный файл или нет.
- Локальный - Проверяет, сохранена ли рабочая книга с законами Excel (местный язык) или с законами VBA (США - английский).
Тише! Много аргументов, верно? Но что, если я скажу вам, все эти аргументы являются необязательными и могут быть пропущены при использовании функции VBA SAVE AS. Однако верно то, что именно эти аргументы делают VBA SaveAs более гибкой в использовании функцией. «Выражение» в начале синтаксиса - не что иное, как выражение, против которого можно использовать эту функцию. Like Workbook - это выражение, с которым можно использовать SaveAs.
Примеры сохранения файла Excel с помощью функции VBA Save As
Ниже приведены различные примеры сохранения файла Excel с использованием функции VBA Save As.
Вы можете скачать этот шаблон VBA Сохранить как Excel здесь - VBA Сохранить как шаблон Excel
Пример № 1 - Как сохранить копию рабочей книги с другим именем?
Давайте посмотрим, как мы можем сохранить текущую книгу под другим именем.
Чтобы использовать функцию «Сохранить как» в Excel VBA, выполните следующие действия:
Шаг 1. Добавьте новый модуль в редактор Visual Basic (VBE). Перейдите на Вставить и затем выберите Модуль.
Шаг 2: Определите новую подпроцедуру, которая может хранить макрос.
Код:
Шаг 3: Определите новую переменную, которая может содержать имя, под которым будет сохранен файл.
Код:
Шаг 4: Теперь используйте оператор присваивания, чтобы присвоить имя этой переменной, используя который текущий файл может быть сохранен как.
Код:
Шаг 5: Теперь используйте функцию SaveAs с аргументом FileName, чтобы сохранить файл с именем «Example1».
Код:
Шаг 6: Вот и все, теперь запустите этот код, нажав F5 или вручную, используя кнопку Run, и посмотрите вывод.
Вы можете видеть, что файл с именем « Пример1 » сохраняется в Документах .
Если бы вы могли записать, файл сохраняется как Macro-Enabled File, потому что исходный файл, на котором я использовал функцию SaveAs, это файл с Macro-Enabled. Это означает, что эта функция в VBA автоматически проверяет формат файла предыдущего файла и сохраняет его в том же формате. Также по умолчанию файл будет сохранен в Документах на этом ПК . Это местоположение по умолчанию может быть предоставлено явно во время определения имени листа.
Пример №2 - Сохранение книги с предоставленным пользователем именем
Вместо первоначального определения имени, можно ли написать код, который позволяет пользователю сохранять рабочий лист под именем по своему выбору, так же как функция Excel Save As?
Выполните следующие шаги, чтобы использовать функцию «Сохранить как» в Excel VBA.
Шаг 1: Определите новую подпроцедуру в недавно вставленном модуле, который может хранить макрос.
Код:
Шаг 2: Определите новую переменную, которая может содержать значение пользовательского имени.
Код:
Причина, по которой эта переменная определяется как Variant, заключается в том, что этот тип данных делает соглашения об именах универсальными. Например, пользователь может добавить некоторый дополнительный специальный символ (который разрешен в соглашениях об именах) или может также добавить даты под именем файла.
Шаг 3: Теперь с помощью оператора присваивания и комбинации функций, называемой application.GetSaveAsFilename, создайте оператор, который позволит системе принять определенное пользователем имя. Посмотрите, как это было достигнуто на скриншоте ниже.
Код:
Шаг 4: Используйте условный IF, чтобы убедиться, что имя, которое вводит пользователь, является действительным согласно соглашениям об именах.
Код:
Это условие проверяет, соответствует ли имя, данное пользователем для сохранения рабочего листа, правилам именования, установленным для именования файла, или нет.
Шаг 5: Запишите утверждение, которое оценивается для данного условия IF.
Код:
Этот фрагмент кода оценивается, когда условие IF выполнено. Если это так, активная рабочая книга будет сохранена под именем, определенным в переменной Spreadsheet_Name (которая будет определяться пользователем)
Шаг 6: Завершите цикл IF и запустите этот код, чтобы увидеть результат.
Код:
Шаг 7: Как только вы запустите этот код, вы получите диалоговое окно Сохранить как, которое позволит вам ввести имя по вашему выбору и сохранить файл.
Пример № 3 - Как сохранить файл в формате PDF с помощью функции Excel VBA SaveAs?
Предположим, у вас есть данные, указанные ниже в вашей таблице Excel, и вам нужно преобразовать их в PDF.
Выполните следующие шаги, чтобы преобразовать этот файл в PDF с помощью функции VBA Сохранить как:
Шаг 1: Определите новую подпроцедуру для хранения макроса.
Код:
Шаг 2. Теперь используйте следующий код, чтобы сохранить этот файл в формате PDF.
Код:
Шаг 3: Запустите этот код, и вы увидите файл PDF, созданный в разделе «Этот ПК»> «Документы».
В этом коде ActiveSheet.SaveAs позволяет сохранить файл с тем же именем. Поскольку мы добавили расширение как .pdf в конец файла, оно экспортируется в файл PDF. Вы можете увидеть изображение выше для вашей справки.
То, что нужно запомнить
- По умолчанию местом сохранения файла, используемого в VBA SaveAs, будет Этот ПК> Документы. Тем не менее, вы можете указать каталог вручную во время определения имени файла.
- По умолчанию файл, сохраненный с помощью VBA SaveAs, будет сохранен в том же формате, что и исходный файл. Тем не менее, он также может быть определен в соответствии с требованиями пользователя во время определения переменной.
Рекомендуемые статьи
Это руководство к VBA Сохранить как. Здесь мы обсудим, как сохранить файл с помощью функции Excel VBA Save As вместе с примером и загружаемым шаблоном Excel. Ниже приведены несколько полезных статей о Excel, связанных с VBA.
Private Sub btnSave_Click(…) Handles btnSave.Click Dim filename As String Dim i As Integer filename = InputBox("Введите имя файла", "Сохранить файл") 'окно для ввода FileOpen(1, filename, OpenMode.Output) ' открываем файл для записи For i = 0 To lst.Items.Count - 1 PrintLine(1, lst.Items(i)) 'записываем в файл i-ю строку списка Next FileClose(1) End Sub
- Событие Click кнопки btnOpen («Загрузить из файла») запрограммируйте таким образом, чтобы в список помещались все строки из файла:
Private Sub btnOpen_Click(…) Handles btnOpen.Click Dim filename, CurStr As String filename = InputBox("Введите имя файла", "Загрузить файл") 'окно для ввода FileOpen(1, filename, OpenMode.Input) 'открываем файл для чтения lst.Items.Clear() While Not EOF(1) CurStr = LineInput(1) 'считываем очередную строку If CurStr <> "" Then lst.Items.Add(CurStr) 'вносим строку в список End While FileClose(1) End Sub
- Запустите приложение, внесите в список lst несколько строк и попытайтесь сохранить их в виде файла (желательно с расширением .txt: например, proba.txt). Если не написан путь к файлу, то файл сохранится в папке /bin/Debug Вашего проекта.
II. Работа с типизированными файлами
В типизированных файлах можно прочитать любую по очереди запись. Добавить новую запись в конец файла.
Задание: Хранение картотеки одинаковых по структуре карточек. Необходимо создать возможность добавления карточки и просмотра карточки по ее номеру.
Выполнение:
Разделим форму условно на две части: в первой части создадим возможность добавления карточки в картотеку, а во второй – просмотр карточки по номеру (см. рисунок):
Форма «Работа с типизированными файлами»
- Разместите на форме два элемента управления GroupBox . Установите свойство Text первой группы равным Добавление в картотеку, а второй – Просмотр картотеки.
- В группу GroupBox1 добавьте 4 элемента Label и задайте их свойствам Text значения: Имя, Фамилия, Пол, Возраст.
- В ту же группу поместите 3 элемента TextBox. Их свойствам Text задайте пустые строки. А для свойств Name укажите: для первого элемента – FirstName, второго – LastName, третьего –Age.
- Добавьте в первую группу два объекта RadioButton. Для их свойств Name укажите: для первого элемента Male, для второго –Female. Свойство Text для первого укажите – мужской, для второго – женский.
- Расположите в группе одну кнопку (button) со свойством Name равным AddButton и свойством Text равным Добавить.
- Во второй группе разместите 7 элементов типа Label и пять текстовых полей, задайте значения их свойств в соответствии с Таблицей 12:
Пояснение: чтобы дополнить некоторую строку S до длины N используется выражение: S+Space(N-Len(S)). Функция Space(K) возвращает строку, состоящую из К пробелов.
Суммарная длина записи равна 38 (15 на имя + 15 на фамилию + 1 на пол +3 на возраст)
FilePutObject(1, card, 1 + LOF(1) / 38): LOF возвращает длину файла; разделив полученное значение на размер записи (38 байт), получаем количество записей; новая запись будет иметь номер, на единицу больший.
- Теперь осталось запрограммировать кнопку Showbutton («Показать»):
Private Sub showButton_Click(…) Handles showButton.Click Dim card As String = "" FileOpen(1, "cardfile.dat", OpenMode.Random, , , 38) FileGetObject(1, card, Val(txtcardNumber.Text)) FileClose(1) txtFirstNAme.Text = Mid(card, 1, 15) txtLastName.Text = Mid(card, 16, 15) If Mid(card, 31, 1) = "м" Then txtGender.Text = "мужской" Else : txtGender.Text = "женский" End If txtAge.Text = Mid(card, 32, 3) End Sub
III. Работа с нетипизированными файлами
Нетипизированные файлы – файлы, не имеющие четкую структуру.
Задание: Перепишите программу для работы с картотекой с использованием нетипизированных файлов.
Читайте также: