Счетчик в Excel

Счетчик в 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);"")

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

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

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

решение1

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

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

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

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

решение2

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

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

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

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

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

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

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

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

PrintOut , , , True

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

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

Связанный контент