IT Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Excel vba pagesetup

VBA optimization for .PageSetup code

Dr. Demento



Excel Ninja

I don’t see why the code you have posted should take minutes to execute.

One improvement that can be done is to put the following statement outside the loop :

Within the loop , change the first few statements as follows :

If you wish , even the multiplication by 2 and 3 can be stored in intermediate variables outside the loop , and within the loop , just assign those variable values to the margins.

Dr. Demento


Narayan — thank you; that’s slick. I forget about doing it like that.

I just thought of this — as I’m on a work machine and macros are by default disabled, perhaps there are other imposed restrictions that I’m not aware of that could be causing the sludge-like behavior.

One other question — using the Excel switches (&P, &N, . . . ) wouldn’t be causing this, would it? Should I be using native VBA parameters instead?


New Member

Dr. Demento


Well, that helped quite a bit on my home machine. I’ll have to give it a try at work.


Excel Ninja

More information is available here :

Dr. Demento


Speedy / Narayan — I turned off the PrintCommunication for the duration of the macro and it’s significantly faster; however, I don’t get the outcome I used to — The filename prints but not the sheetname, the page number prints but not the total number of pages, and the date prints but not the time. When I take out the PrintCommunication lines, those «missing fields» come back but then I’m stuck with the long latency again.

A similar issue was reported here and their solution was to delete the PrintCommunication flags 😐 I’m running Excel 2010, so it shouldn’t be a version issue.

Just curious if you have any additional insights. Thanks much.


Excel Ninja

If you can upload a workbook with enough data in it , as well as the code , it will probably easier to debug the problem.

Dr. Demento


My apologies — I’m still picking gravel out of my roadrash from work so I didn’t have time to respond.

I’ve attached an example of the issue that highlights the issue that including PrintCommunication is causing with the Header/Footer macro.

When I comment out Application.PrintCommunication, it takes a long while, but the print output is what I would expect (worksheet: Initial).

When I include Application.PrintCommunication, the speed of execution is markedly better, but there’s only 1/2 of the header/footer info (worksheet: Final).

I’m hoping to achieve a happy melding — quick and complete.

Excel VBA set print area

This Excel VBA tutorial explains how to set print area, page width, Print Title, Orientation in Excel VBA.

Excel VBA set print area

To set Print Area in Excel spreadsheet, first select (highlight) Cells that we want to set as Print Area, and then navigate to ribbon Page Layout > Print Area > Set Print Area

To set Print Area in Excel VBA, we have to use PageSetup.PrintArea Property.

For example, in order to set Print Area A1:N21, we can write

Excel VBA set page width and height

After we have defined the Print Area, the next step is to set the page width and height.

For most of the time, we want the page Width to be 1 page, while the height is Automatic, meaning we let Excel decide how many pages to print depending on how many rows are in the data, we just need to ensure all the field headers are displayed in one page.

Читать еще:  Основные команды excel

While the above code would work perfectly, in fact, it is more correct to set the FitToPagesTall = 0 to make it Automatic, but this command would generate an error

Run-time error ‘1004’: Unable to set the FitToPagesTall property of the PageSetup class

The error is generated when we have not turned on the communication to the printer. To avoid this error, we can temporarily turn off the communication using Application.PrintCommunication Property.

Excel VBA set Print Title

In case the number of records (rows) is so large that it takes more than 1 page to print all the data, we need to ensure all pages contain the field headers on top of each page. In Excel spreadsheet, we set it under Page Layout > Print Titles > Rows to repeat at top

In VBA, we set this using PrintTitleRows Property.

Excel VBA set Orientation

Sometimes we want to rotate the paper by 90 degree to Landscape when there are too many fields to display in Portrait layout.

In VBA, we can either set Orientation = xlPortrait or Orientation = xlLandscape

Other Properties

I have introduced the most commonly used properties in this article, in fact, there are more than 50 properties for PageSetup Object. If you want to learn other properties, click here.

Wyman is human resources professional specialized in implementation of HR information system.

He is also a:
— Microsoft Most Valuable Professional (Excel)
— Microsoft Community Contributor
— Microsoft Office Specialist in Access / Excel
— Microsoft Specialist in MS Project
— Microsoft Technical Associate
— Microsoft Certified Professional
— IBM SPSS Specialist

VBA-Урок 1. Что такое VBA. Основные понятия.

В данном разделе мы рассмотрим что такое VBA, посколько именно на нем и пишутся макросы.

Что такое VBA?

VBA — язык (расшифровывается как Visual Basic for Application) был разработан компанией Microsoft. Данный язык не является самостоятельным, а предназначен для автоматизации процессов в пакете MS Office. VBA широко используется в Excel, а также в Access, Word и других программах пакета.

VBA — простой язык программирования, которому может научиться любой желающий. Изучив его, вы сможет предоставлять команды Excel, что делать с колонками, строками, значениями в ячейках, перемещать/добавлять/сортировать листы, выводить заранее запрограммированные сообщения, писать свои формулы и функции и т.д. Суть языка заключается в оперировании объектами (что относит его к объектно-ориентированному программированию).

Чтобы работать с VBA кодом, нам нужен редактор, который уже установлен по умолчанию. Вы можете открыть его, нажав комбинацию клавиш » ALT + F11 «.

Объекты (Objects)

Давайте разберем, что же такое объект. Объект — это элемент, структурная частица Excel, а именно: книга, лист, диапазон, ячейка. Данные объекты имеют иерархию, т.е. подчиняются друг другу. Схематично структуру иерархии Excel можно изобразить следующим образом:

Главный объект это Application, что соответствует самой программе Excel. Далее следует Workbooks (книга), Worksheets (лист), Range (диапазон, или отдельная ячейка). Например, чтобы обратиться к ячейке «A1» на листе нам нужно будет прописать следующий путь с учетом иерархии:


Таким образом, мы научились обращаться до наименьшего объекта в Excel — ячейки.

Коллекции (Collections)

В свою очередь объекты имеют «коллекции». Коллекция — это группа объектов одинакового класса. Отдельные элеметы коллекции являются также объектами. Так, объекты Worksheets являются элементами коллекции объекта Worksheet, который содержит также и другие коллекции и объекты:

  • ChartObjects (элемент коллекции объекта ChartObject)
  • Range
  • PageSetup
  • PivotTables (элемент коллекции объекта PivotTable).

Свойства (Properties)

Каждый объект имеет свойства . Например, объект Range имеет свойство Value или Formula.

Worksheets(“Sheet1”).Range(“A1”).Value або Worksheets(“Sheet1”).Range(“A1”).Formula

В данном примере, свойство отображает значение, которое введено в ячейку или введенную формулу.

Также, через свойство Formula можно не только получить формулу, но и записать ее:

MsgBox Range(“A1”).Formula — получим сообщение с формулой в ячейке «А1«;

Range(“B12”).Formula = “=2+6*100” — вписываем формулу =2+6*100 в ячейку B12.

Методи (Methods)

Теперь давайте рассмотрим, каким образом мы можем управлять содержимым диапазона или ячейки. Для этого в VBA существуют, так-называемые методы (команды «что сделать»). При написании кода методы отделяются от объекта точкой, например:

Range(«A1»).Select или Cells(1, 1).Select

Данный метод указывает выбрать (Select) ячейку «A1».
Далее, давайте, удалим значение в данной ячейке. Для этого напишем следующий код:


Здесь программа «берет» то, что мы выделили (Selection) и удаляет его содержимое (ClearContents ).

excel vba не экспортирует pagesetup в pdf правильно

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

Если я вручную экспортирую и сохраняю его как pdf, то он использует правильную настройку страницы, создавая одну страницу PDF, которая находится в альбомной ориентации. Однако тот же самый экспорт, выполненный VBA, производит PDF, который имеет длину в несколько страниц и в портрете.

я не могу понять, почему он это делает. я пробовал различные решения, такие как выбор рабочего листа перед его экспортом, но все безрезультатно.

Любая помощь будет оценена по достоинству.

Код выглядит примерно так:

Код, используемый для форматирования pagesetup (так как он довольно длинный, я добавляю только соответствующий раздел этого Суба)

3 Ответа

Я нашел то, что кажется решением проблемы:

Мне нужно было добавить часть Application.PrintCommunication в уравнение. По какой-то причине Excel перезаписал бы настройки, которые я ставил, если бы я запустил код без него.

Я думаю, что проблема заключается в том, что вам нужно добавить .Zoom = False в код настройки страницы:

Из того, что я попробовал, это должно решить ее для вас.

Дайте мне знать, как это происходит!

EDIT: может быть, вам нужно:

EDIT2: что делать, если вы изменились:

Да. У меня была та же проблема: я не смог экспортировать лист с настройками настройки страницы, уже примененными на нем.

Прежде чем попробовать Application.PrintCommunication, я протестировал команды ожидания и сна без успеха. Наконец, я пропустил эту проблему, используя метод CopyPicture, добавив страницу диаграммы и затем экспортировав ее в pdf, но разрешение в моем pdf было не очень хорошо, и я не смог играть с полями.

Поэтому просто добавьте Application.PrintCommunication=false перед вашим кодом, в настройках pagesetup, таких как CaptainABC, и самое главное: закройте с помощью Application.PrintCommunication=true после кода.

Спасибо вам за этот полезный пост.

Похожие вопросы:

Я использую Excel 2007 для создания сложной книги с несколькими вкладками (лист). Я хотел бы сохранить это как PDF из VBA. Я пытаюсь использовать ExportAsFixedFormat. Конечно же, этот вызов.

Я хочу экспортировать данные таблицы в Excel с помощью Displaytag. Изначально он экспортирует все данные в Excel, однако по умолчанию displaytag использует формат CSV для экспорта в Excel. Это.

Я пытаюсь экспортировать jasper как pdf, но он не показывает значения кириллицы. Когда я экспортирую его как excel, он действительно показывает, и результат в порядке, но когда я пытаюсь.

У меня не так много знаний о VBA. Но у меня есть проблема, которую, я думаю, можно решить с помощью VBA. У меня есть файл PDF из 400 страниц. У меня есть excel с номерами страниц и некоторым.

Я новичок в vba , и я пытался открыть файл PDF с MS word 2016 для того , чтобы скопировать данные и заполнить ячейки в Excel , я был в состоянии открыть PDF и скопировать данные, но я нашел его.

Можно ли сохранить объект PageSetup, который будет использоваться для установки параметров печати рабочего листа? Я пробовал с этим кодом, но я получаю ошибку, которая говорит: объектная переменная.

У меня есть файл excel, созданный с помощью DevExpress из моей программы. Мне нужно добавить горизонтальную страницу разрыва в этот файл, но я не могу, потому что моя версия DevExpress не.

Я получил VBscript для преобразования всех файлов xls в папке (c:folder) в pdf файлы. Все столбцы также устанавливаются в соответствии с одной страницей и с альбомной ориентацией. Сценарий отлично.

Я немного запутался. Экспорт из листа excel в файл pdf фактически работает нормально. но после того, как я добавил новое предложение в нижней части листа, он не копирует это предложение в файле pdf.

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

Excel vba pagesetup



I’m having difficulty with setting the paper size in a Excel 2010 macro. The Excel Object Model indicates the «Name» for the PaperSize property that I am using is = «xlPaper11x17» and the «Value» = 17 (found under xlPaperSize Enumeration in Office 2010 ) . When referring to PageSetup.PaperSize property do you use the «Name» which is a String value or «Value» which appears to be an integer value?

VBA Code Producing a Type Mismatch Error:

I’m using a variable to store the PageSetup.PaperSize property value.

Dim strPaperSize As String

Sheets(1).PageSetup.PaperSize = strPaperSize ‘ I’m getting a «Type Mismatch Error at this point

  • Edited by ConstPM Tuesday, July 10, 2012 3:05 PM Clarification


It is a constant.You use it directly.

Constants are easy way to access data.

VB Interpreter parses token once.When it sees your string,it evaluates to a string with value xlPaper11x17.But it will not again parse to get the actual data (Which is 17)

Please do not forget to click “Vote as Helpful” if any post helps you and Mark as Answer if it solves the issue.

  • Marked as answer by ConstPM Thursday, July 12, 2012 4:31 AM

All replies

It is a constant.You use it directly.

Constants are easy way to access data.

VB Interpreter parses token once.When it sees your string,it evaluates to a string with value xlPaper11x17.But it will not again parse to get the actual data (Which is 17)

Please do not forget to click “Vote as Helpful” if any post helps you and Mark as Answer if it solves the issue.

  • Marked as answer by ConstPM Thursday, July 12, 2012 4:31 AM

I’m not getting a TypeMismatch error. I’m getting a 1004 «Unable to set the PaperSize property of the PageSetup class» error.

Problem is I can’t use the constant directly because the different constant values are used by the macro, so I need to be able to put these constant names or constant values in a variable.

Don’t quite understand the VB Interpreter token parsing. I assume the token is the xlPaper11x17 and a token can’t be used by storing the token in a variable then using the variable to retrieve the token? It will only intrepret the token if used directly with the PaperSize property? Wish I understood this better but I think I get part of it.

Ссылка на основную публикацию