Счетчик в Excel

В моем файле 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 ответа

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

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

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

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

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

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

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

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

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

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

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

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

PrintOut , , , True

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

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

Другие вопросы по тегам