#vba #excel
#vba #excel
Вопрос:
Я хочу создать динамическую область печати в Excel 2010, которая будет состоять из двух диапазонов ячеек.
Например, первый диапазон ячеек A1:J50
равен, а второй диапазон равен A100:J150
. Они должны печататься на двух страницах, игнорируя ячейки, которые находятся между этими двумя диапазонами.
Четыре ячейки, показанные в приведенных выше примерах диапазонов, должны быть динамическими, а не жестко запрограммированными как простые диапазоны Print_Area. Поэтому в моем рабочем листе я использовал ячейки AA1
, AB1
, AC1
и AD1
для хранения значений "A1"
, "J50"
, "A100"
и "J150"
соответственно.
(Ячейки AA1, AB1, AC1 и AD1 фактически используют формулы для определения того, какой адрес ячейки будет использоваться, но для этого вопроса давайте просто предположим, что значения установлены, как указано выше).
Затем я использовал диспетчер имен и ввел следующую формулу в поле Print_Area:
=INDIRECT(Sheet1!$AA$1):INDIRECT(Sheet1!$AB$1);INDIRECT(Sheet1!$AC$1):INDIRECT(Sheet1!$AD$1)
Результат этой формулы — это именно то, что мне нужно, и он действительно работает при первой печати диапазонов. Однако, как только я это сделал, Excel автоматически заменяет формулу фактическим диапазоном ячеек, который был вычислен. Поэтому, когда я проверяю область печати в диспетчере имен после печати один раз, она содержит что-то вроде:
=Sheet1!$A$1:$J$50,Sheet1!$A$100:$J$150
Есть ли способ запретить Print_Area преобразовывать мою формулу в вычисляемые значения и вместо этого использовать формулу при каждой печати? Я бы хотел не использовать макросы, если это вообще возможно (если нет, я тоже попробую макросы)
Ответ №1:
Я протестировал это, и, похоже, это сработало.
Создайте новое имя с именем Test и установите его значение равным (обратите внимание, что я использовал запятую, а не точку с запятой, которая у вас была. У меня установлен язык США)
=INDIRECT(Sheet1!$AA$1):INDIRECT(Sheet1!$AA$2),INDIRECT(Sheet1!$AA$3):INDIRECT(Sheet1!$AA$4)
Задайте для вашего имени Print_Area значение
=TEST
Удачи!
Редактировать
Для меня это работает, но кажется ненужным. Я просто попытался воспроизвести проблему и не смог. Когда у меня для Print_Area установлена формула с КОСВЕННЫМ, она не заменяется после печати.
Посмотрите этот связанный файл. https://www.dropbox.com/s/pgm0iv19u6igdm5/Book1.xlsx
Комментарии:
1. Вы тоже пытались выполнить печать во второй раз? Я действительно попробовал именно то, что вы предложили мне, но с тем же результатом. Это сработало только один раз, а затем формула (в данном случае тест имени) заменяется фактическим диапазоном, который был вычислен.
2. Да, сделал. Я напечатал, изменил значения ячеек, визуально увидел, что диапазон изменился, напечатал снова, и он захватил новый диапазон. «ТЕСТ» по-прежнему имеет КОСВЕННУЮ формулу. (Запуск Excel 2010, все исправлено)
3. Спасибо, у ТЕСТА тоже есть КОСВЕННАЯ формула с моей стороны, но имеет ли ваша область печати ТЕСТ, установленный после второго раза? Я бы предположил, что, поскольку вы увидели, что диапазон визуально изменился, ответ будет «да», что указывает на то, что с моей установкой Excel 2010 что-то не так (хотя я попробовал это с Excel 2007 и получил ту же проблему).).
4. Спасибо за отправку файла. Я немного поиграл с диапазонами, вводящими разные значения ячеек, и получил несколько неоднозначных результатов. Я попытаюсь разобраться в этом и вернусь со своими выводами. Хотя мне все еще кажется, что это какая-то проблема с установкой.
5. Что ж, загруженный мной рабочий лист работал безупречно с различными диапазонами, которые я ввел, оставив меня в некотором замешательстве. Единственное различие, которое я смог найти (между вашим листом и моим), заключалось в том, что содержимое для печати было на листе, а ячейки, используемые в формуле, на другом (в моем случае все было на одном листе). Так что, я думаю, сейчас я просто буду использовать ячейки на другом листе для моей формулы Print_Area. У меня мало времени, поэтому, к сожалению, я не могу продолжать экспериментировать с воссозданием проблемы. Еще раз спасибо, Кен, ты спасаешь жизнь!