2013-02-25 11 views
1

В настоящее время у нас есть приложение Excel VBA, которое состоит из 25-30 листов Excel (и все эти листы скрыты, и мы выполняем фоновую обработку на них и отображаем его на пользовательский интерфейс форм VBA) и мы разработали пользовательский интерфейс с использованием форм VB. Но проблема, которую мы сталкиваемся, когда мы нажимаем на кнопку Сохранить, используя этот код:Сохранение отдельного листа в Excel VBA

ThisWorkbook.Save

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

Мой вопрос: есть ли способ сохранить «только один лист в специальном листе Excel», а не весь файл Excel?

Примечание: Я разработчик Java, и раньше я работал над VBA, но это были годы назад, и я забыл бит. Любые рекомендации будут оценены. Или любые указатели на то, как справиться с этой ситуацией, будут оценены. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, я могу отредактировать этот вопрос.

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

+0

Нет, нет. – enderland

ответ

2

Я думаю, вы должны рассмотреть возможность разделения приложения на несколько книг:

  1. Учебное пособие, которое содержит всю логику, пользовательские формы и программный код. Эта книга обрабатывает все другие книги, а также ее отображение. Потенциально это может быть даже «Application Specific Addin», который остается бездействующим, но активируется, как только открываются все последующие книги. Для этого подхода к архитектуре см. Раздел «Адресация конкретных приложений» в this link.

    Этот workobook/add-in может также скрыть другие книги, чтобы пользователь не заметил, что это несколько книг.
  2. Одна или несколько книг данных: в зависимости от того, как взаимосвязаны данные, вы можете отделить это, например.в книге «Данные о продажах», которая содержит большую базу данных, как книгу «Базовые данные», которая содержит все меньшие данные (например, продукты или таблицы магазинов).

Таким образом, вы можете уменьшить сохранение на «соответствующие» листы. Однако, конечно, это требует довольно много перепрограммирования - но это стоит усилий, например, он также позволяет предоставлять обновления/исправления ошибок, не передавая данные между версиями, поскольку вам нужно только распространять файл с помощью программирования логика. :-)

+0

Хорошо, спасибо, я попробую –

4

Короткий ответ - нет. Вы не можете сохранить один рабочий лист за раз.

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

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

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

+0

У меня около 1000-2000 строк на листе excel, и можно ли открыть книгу в фоновом режиме, т.е. без видимого открытия нескольких книг? –

+0

Можете ли вы хранить данные на листах в разных книгах, а затем во время работы открывать книги с данными, которые вам нужны, вносить изменения, а затем закрывать их? К сожалению, я не знаю, есть ли другое решение для вашей проблемы, кроме как сохранить только тогда, когда это абсолютно необходимо. – Ripster

+1

У меня все в порядке с несколькими книгами, но пользователь не должен их видеть, поскольку мы скрывали все листы и манипулировали только с VBA от –

3

Предполагая, что активный рабочий лист, который вы хотите сохранить, то вы могли бы сделать что-то вроде этого:

ActiveSheet.Copy 
ActiveWorkbook.Close True, "path" 

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

Смежные вопросы