PAGESETUP

Программирование на Visual Basic for Applications
DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

PAGESETUP

Сообщение DIKI » 30.09.2003 (Вт) 17:45

Есть куча листов в Wookbooks необходимо у каждого из них изменить ориентацию и еще несколько параметров если в цикле у каждого Sheet менять их это занимает очень много времени
Как можно эту задачу побыстрее решить?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.09.2003 (Вт) 17:56

Выделяешь несколько листов (удерживая Ctrl) и меняешь
Lasciate ogni speranza, voi ch'entrate.

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 01.10.2003 (Ср) 9:02

Я имел ввиду как это программно сделать

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 01.10.2003 (Ср) 9:05

Вот такой код очень долго выполняется если в книге листов 20 например
Вопрос и состоит в том как теже действия сделать побыстрее.

Dim oI As Worksheet
For Each oI In oEx.Worksheets
With oI.PageSetup
.Orientation = xlLandscape
.LeftMargin = oEx.InchesToPoints(0.354330708661417)
.RightMargin = oEx.InchesToPoints(0.354330708661417)
.TopMargin = oEx.InchesToPoints(0.393700787401575)
.BottomMargin = oEx.InchesToPoints(0.393700787401575)
End With
Next oI

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 01.10.2003 (Ср) 9:26

Может, перед этим действием отключать обновление экрана?
Код: Выделить всё
application.screenupdating=false
а потом включать?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.10.2003 (Ср) 9:34

Если надо программно, то делай программно
Код: Выделить всё
Sheets(Array("Лист1", "Лист2", "Лист3")).Select
With ActiveSheet.PageSetup
  .LeftMargin = Application.InchesToPoints(0.78740157480315)
  .RightMargin = Application.InchesToPoints(0.78740157480315)
  .TopMargin = Application.InchesToPoints(0.78740157480315)
  .BottomMargin = Application.InchesToPoints(0.78740157480315)
  .HeaderMargin = Application.InchesToPoints(0.511811023622047)
  .FooterMargin = Application.InchesToPoints(0.511811023622047)
End With
Lasciate ogni speranza, voi ch'entrate.

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 01.10.2003 (Ср) 9:52

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

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 01.10.2003 (Ср) 9:59

Меня интересует вообще глобально можно ли в PageSetup передать структуру заранее заполненную(со всеми полями т.е. чтоб в ней было Orientation,.LeftMargin,.RightMargin и т.д.) а затем дать команду применить?
Когда выполняешь такой код
.Orientation = xlLandscape
.LeftMargin = oEx.InchesToPoints(0.354330708661417)
.RightMargin = oEx.InchesToPoints(0.354330708661417)
.TopMargin = oEx.InchesToPoints(0.393700787401575)
.BottomMargin = oEx.InchesToPoints(0.393700787401575)
Это заметнее медленее чем если бы я в диалоговом окне PageSetup задал эти же параметры и нажал кнопку OK.

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 01.10.2003 (Ср) 11:25

2GSerg
У меня объект экселя невидимый, но я по пробовал всеравно поставить ScreenUpdating = False эфекта нет:(

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 01.10.2003 (Ср) 14:52

Я не знаю, что по твоим понятием долго, но этот програмный код, на 20 листах выполняется 14 секунд:

Код: Выделить всё
Sub fffff()
Dim i As Long
For i = 1 To Worksheets.Count
Worksheets(i).Activate
With ActiveSheet.PageSetup
  .LeftMargin = Application.InchesToPoints(0.78740157480315)
  .RightMargin = Application.InchesToPoints(0.78740157480315)
  .TopMargin = Application.InchesToPoints(0.78740157480315)
  .BottomMargin = Application.InchesToPoints(0.78740157480315)
  .HeaderMargin = Application.InchesToPoints(0.511811023622047)
  .FooterMargin = Application.InchesToPoints(0.511811023622047)
End With

Next i

End Sub

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 01.10.2003 (Ср) 15:07

А так можно еще чуть-чуть побыстрее, но надо знать точно количество листов, и поэтому нужноли огород городить:


Sub fffff()
dim s as string
s = "0102030405060708091011121314151617181920"
While s <> ""
Worksheets(CInt(Mid(s, 1, 2))).Activate
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.78740157480315)
.RightMargin = Application.InchesToPoints(0.78740157480315)
.TopMargin = Application.InchesToPoints(0.78740157480315)
.BottomMargin = Application.InchesToPoints(0.78740157480315)
.HeaderMargin = Application.InchesToPoints(0.511811023622047)
.FooterMargin = Application.InchesToPoints(0.511811023622047)
End With
s = Mid(s, 3)
Wend
End Sub

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 02.10.2003 (Чт) 9:18

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

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 02.10.2003 (Чт) 10:44

А параметры страницы листа задаются для пустых листов?
Может быть будет быстрее задать параметры для первого листа и сделать 19 копий?

DIKI
Начинающий
Начинающий
 
Сообщения: 16
Зарегистрирован: 30.09.2003 (Вт) 17:41

Сообщение DIKI » 02.10.2003 (Чт) 12:02

Да я так и сделал
Спасибо за помощь


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

    TopList