Страницы: 1
RSS
Изменение размера страницы макросом
 
Знатоки, подскажите пжл возможно ли средствами VBA в Excel изменить с помощью макроса размер страницы (смотрел PageSetup.PaperSize, при помощи которого не получилось установить свой произвольный размер страницы)?  
Или возможно настроить принтер на необходимый (нестандартный) размер страницы при помощи допустим Win32 API (или чего иного)?
 
Макрорекодер хорошо прописывает все свойства страницы при изменении свойств разметки страницы. Попробуйте выполнить две записи макроса с разными настройками страницы и посмотрите какие свойства за что отвечают. Удачи...
 
Влад, произвольный размер листа нужен. У меня, например, нет такого пункта среди предлагаемых вариантов.
 
Макрорекодером конечно же пытался высмотреть это. Меняется многое (поля, заголоки и тд.), но не сам размер страницы.  
Вручную это сделать можно, но как макросом?
 
Из справки  
Worksheets("Sheet1").PageSetup.PaperSize = xlPaperLegal  
XlPaperSize can be one of these XlPaperSize constants.    
xlPaper11x17. 11 in. x 17 in.    
xlPaperA4. A4 (210 mm x 297 mm)    
xlPaperA5. A5 (148 mm x 210 mm)    
xlPaperB5. A5 (148 mm x 210 mm)    
xlPaperDsheet. D size sheet    
xlPaperEnvelope11. Envelope #11 (4-1/2 in. x 10-3/8 in.)    
xlPaperEnvelope14. Envelope #14 (5 in. x 11-1/2 in.)    
xlPaperEnvelopeB4. Envelope B4 (250 mm x 353 mm)    
xlPaperEnvelopeB6. Envelope B6 (176 mm x 125 mm)    
xlPaperEnvelopeC4. Envelope C4 (229 mm x 324 mm)    
xlPaperEnvelopeC6. Envelope C6 (114 mm x 162 mm)    
xlPaperEnvelopeDL. Envelope DL (110 mm x 220 mm)    
xlPaperEnvelopeMonarch. Envelope Monarch (3-7/8 in. x 7-1/2 in.)    
xlPaperEsheet. E size sheet    
xlPaperFanfoldLegalGerman. German Legal Fanfold (8-1/2 in. x 13 in.)    
xlPaperFanfoldUS. U.S. Standard Fanfold (14-7/8 in. x 11 in.)    
xlPaperLedger. Ledger (17 in. x 11 in.)    
xlPaperLetter. Letter (8-1/2 in. x 11 in.)    
xlPaperNote. Note (8-1/2 in. x 11 in.)    
xlPaperStatement. Statement (5-1/2 in. x 8-1/2 in.)    
xlPaperUser. User-defined    
xlPaper10x14. 10 in. x 14 in.    
xlPaperA3. A3 (297 mm x 420 mm)    
xlPaperA4Small. A4 Small (210 mm x 297 mm)    
xlPaperB4. B4 (250 mm x 354 mm)    
xlPaperCsheet. C size sheet    
xlPaperEnvelope10. Envelope #10 (4-1/8 in. x 9-1/2 in.)    
xlPaperEnvelope12. Envelope #12 (4-1/2 in. x 11 in.)    
xlPaperEnvelope9. Envelope #9 (3-7/8 in. x 8-7/8 in.)    
xlPaperEnvelopeB5. Envelope B5 (176 mm x 250 mm)    
xlPaperEnvelopeC3. Envelope C3 (324 mm x 458 mm)    
xlPaperEnvelopeC5. Envelope C5 (162 mm x 229 mm)    
xlPaperEnvelopeC65. Envelope C65 (114 mm x 229 mm)    
xlPaperEnvelopeItaly. Envelope (110 mm x 230 mm)    
xlPaperEnvelopePersonal. Envelope (3-5/8 in. x 6-1/2 in.)    
xlPaperExecutive. Executive (7-1/2 in. x 10-1/2 in.)    
xlPaperFanfoldStdGerman. German Legal Fanfold (8-1/2 in. x 13 in.)    
xlPaperFolio. Folio (8-1/2 in. x 13 in.)    
xlPaperLegal. Legal (8-1/2 in. x 14 in.)    
xlPaperLetterSmall. Letter Small (8-1/2 in. x 11 in.)    
xlPaperQuarto. Quarto (215 mm x 275 mm)    
xlPaperTabloid. Tabloid (11 in. x 17 in.)    
Note  Some printers may not support all of these paper sizes.
 
Да, спасибо справку видел еще до обращения на форум. Но необходимо установить нестандартный размер, т.е. не предусмотренный PaperSize.  
 
Возможно при помощи Win312 API можно настроить принтер? Пока пытаюсь что-нибудь сделать через DEVMODE, но результат тоже ... пока не умею ))
 
А, если варьировать поля страницы  
With Worksheets(1).PageSetup  
   .LeftMargin = Application.InchesToPoints(0.5)  
   .RightMargin = Application.InchesToPoints(0.75)  
   .TopMargin = Application.InchesToPoints(1.5)  
   .BottomMargin = Application.InchesToPoints(1)  
   .HeaderMargin = Application.InchesToPoints(0.5)  
   .FooterMargin = Application.InchesToPoints(0.5)  
End With
 
Этим тоже можно, но ... не достаточно.  
 
Мне нужно вывести на печать в MicOf Document Image Writer (в файл) определенный блок ячеек (явно меньше формата А4). В данном случае выводится рисунок размером А4, на котором небольшим пятном получается нужный блок, а остальное - большое белое поле.    
Пробовал вручную уменьшить размер листа и получался рисунок под размер блока (как нужно). Макрорекордер не помог узнать как это сделать макросом.
 
А масштабом не пробовали подогнать?
 
Пробовал. Покажу что получается.
 
Например так (4 столбца по ширине страницы на лист А4)  
Sub Макрос2()  
'  
' Макрос2 Макрос  
'  
 
'  
   Columns("A:D").Select  
   Selection.ColumnWidth = 21.86  
End Sub
 
из-за расширения не пускает файл  
<EM><STRONG>Файл удален</STRONG> - велик размер - 1,2М! [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Я сейчас выделил 12 ячеек (стандартная ширина/высота). Установил масштаб 200%, отправил на принтер - получил на бумаге большие цифири :-)
 
Проблема-промблемой, но Правила никто не отменял.  
Чем не подходит масштаб? Разве нет увеличения?
 
Кто же спорит - цифры большие. Но идея в том, что получаемый рисунок должен иметь минимум пустого места (должен быть под размер блока), потому что потом используя его в документе получается до фига пустого места.
 
А сам рисунок, вставленный в документ, кто мешает растянуть/сжать? Не очень Вас понимаю:    
"выводится рисунок размером А4, на котором небольшим пятном получается нужный блок".  
А увеличение масштаба (когда "пятно" большое) - не подходит.
 
по 1 стороне (ширине) можно конечно растянуть (хоть в книжном, хоть в альбомном формате), но блок по своим пропорциям не совпадает со стандартным A4  
 
представьте как можно квадратом или кругом заполнить почти весь A4?
 
Так, если, квадратом или кругом нельзя (не изменяя пропорций), что же Вы хотите сделать с "неправильным" блоком применительно к А4?
 
A4 переделать в нужный мне размер.
 
Берём ножницы и... :-) По вопросу: конечная цель вставить в некий документ рисунок, где его поля сведены к минимуму? Обрезка рисунка не спасает?
 
Обрезка рисунка при помощи макроса? это возможно?
 
Так
 
Вот нашел в справочнике программиста  
Option Explicit  
Sub SetUpPage()  
Dim oPS As PageSetup  
' получить объект PageSetup для листа  
Set oPS = ActiveSheet.PageSetup  
' настроить страницу  
With oPS  
' установить размер страницы в соответствии с  
' принятыми требованиями  
   .PaperSize = fnLocalPaperSize  
   .Orientation = xlPortrait  
   .LeftMargin = Application.InchesToPoints(1.5)  
   .RightMargin = Application.InchesToPoints(1.5)  
   .TopMargin = Application.InchesToPoints(2.5)  
   .BottomMargin = Application.InchesToPoints(2.5)  
   .HeaderMargin = Application.InchesToPoints(0.5)  
   .FooterMargin = Application.InchesToPoints(0.5)  
   ' и т.д.  
End With  
End Sub  
 
Function fnLocalPaperSize() As XlPaperSize  
' сохранить размер листа при чтении  
Static iPaperSize As XlPaperSize  
' размер установлен?  
   If iPaperSize = 0 Then  
   ' нет, поэтому создать новую книгу и считать размер листа  
       With Workbooks.Add  
           iPaperSize = .Worksheets(1).PageSetup.PaperSize  
           .Close False  
       End With  
   End If  
   ' вернуть размер листа  
   fnLocalPaperSize = iPaperSize  
End Function
 
{quote}{login=Сергей М}{date=19.01.2011 10:45}{thema=}{post}Обрезка рисунка при помощи макроса? это возможно?{/post}{/quote}  
Рекордер записывает.
 
Ну раз записывает, то показали бы как изменить РАЗМЕР листа (не поля какие-нибудь).  
 
Нужную для себя задачу решил, но другим способом. Путем изменения размера листа не получается ПОКА.  
 
Всем не равнодушным БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО.
 
Сергей, Вы спросили про обрезку рисунка - я ответил. И не нужно передёргивать.
 
Юрий, извините что не понял Вас.  
А обрезать в Worde или в Excel?
 
Да ладно... В Excel. Я проверил - записывается обрезка, значит и самому написать можно :-) Тогда будет без "лишних" полей. Я так понимаю, что Вам именно они и мешают - перекрывают полезную площадь.
 
Блин, и как раньше не заметил эту обрезку :), и действительно получается записать.    
Ну теперь знаю еще 1 способ получить нужное, пригодится.  
 
Юрий, еще раз спасибо.
Страницы: 1
Читают тему
Наверх