1

В моем файле 50 листов, каждый лист - стандартная форма. Позволяет назвать как Form1, Form2, Form3.

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

Что я делал до сих пор? Я создал эту формулу, где M1 - выпадающий список с именами форм. Поэтому, если я хочу увидеть Form2, я выбираю Form2 в раскрывающемся списке, и формула отображает весь лист Form2.

=IF($M$1="Form1";IF('Form1'!A1="";"";'Form1'!A1);"")&IF($M$1="Form2";IF('Form2'!A1="";"";'Form2'!A1);"")&IF($M$1="Form3";IF('Form3'!A1="";"";'Form3'!A1);"")

Работает нормально, потому что все формы стандартизированы.

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

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

2 ответа2

1

Все ваши запросы могут быть учтены. Но я боюсь только с помощью VBA.

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

В макросе прочитайте ячейку с раскрывающимся списком и отправьте соответствующий лист на печать. Затем обновите соответствующий счетчик, который может быть в наборе ячеек на той же странице, что и раскрывающийся список и кнопка.

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

0

Несколько более чистый способ создания «печатного листа», который будет показывать содержимое одного из других 50 листов, состоит в том, чтобы установить ячейку A1 в

=INDIRECT($M$1 & "!A1")

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

  • Это может привести к тому, что Excel выполнит большую работу (т. Е. Потратит много времени), «пересчитывая» эти косвенные ячейки всякий раз, когда что-то меняется (не только M1).  Я не уверен, будет ли это хуже, чем сейчас.
  • Обязательно избегайте искушения изменить данные или ввести новые данные в «лист печати», когда вы хотите обновить Form42 .  (Конечно, у вас есть эта проблема сейчас.)  Вы можете защитить себя от таких несчастных случаев, защитив печатный лист.

Существуют и другие способы построения печатного листа; например, используя VBA для

  • создать пользовательскую функцию, которая может заменить вызов INDIRECT() , но работать более плавно, или
  • фактически копируйте все данные из Formnn на лист для печати при каждом изменении M1 .

Вы можете посчитать изменения, написав подпрограмму Worksheet_Change VBA.

Я не знаю, каким образом логика листа могла бы подсчитывать / обнаруживать при его печати.  Однако вы можете достичь желаемого эффекта, написав процедуру печати в VBA.

PrintOut , , , True

заявление распечатает лист для вас; добавить любые другие действия, которые вы хотите (например, увеличение счетчика).  (Вы просто должны помнить, чтобы печатать, используя этот макрос.)  Четвертый параметр PrintOut - это Preview, для которого установлено значение True чтобы Microsoft Excel вызывал предварительный просмотр перед печатью листа (что дает вам возможность отменить), или False (или опускал) для немедленной печати листа без каких-либо условий.

См. Как добавить VBA в MS Office? для информации, ну, вы знаете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .