В моем файле 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()
вызов, но работать более плавно, или - на самом деле копируйте все данные на лист печати всякий раз, когда вы вносите изменения .
Formnn
M1
Вы можете подсчитать изменения, написав Worksheet_Change
процедуру VBA.
Я не знаю способа, чтобы логика листа могла подсчитывать/определять, когда вы его печатаете. Однако, вы можете достичь желаемого эффекта, написав процедуру печати в VBA. A
PrintOut , , , True
оператор распечатает лист для вас; добавьте любые другие действия, которые вы хотите (например, увеличение счетчика). (Вам просто нужно не забыть распечататьиспользуя этот макрос.) Четвертый параметр — PrintOut
этоПредварительный просмотр, установите значение, True
чтобы Microsoft Excel вызывал предварительный просмотр перед печатью листа (что дает вам возможность отменить операцию) или False
(или опустите) для немедленной печати листа без каких-либо условий.
ВидетьКак добавить VBA в MS Office? для получения информации о, ну, вы знаете.