Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Объекты и свойства - помогите чайнику!

3.3K
30 апреля 2004 года
Татьяна
17 / / 23.01.2004
Как сделать PageSetup одной рабочей книги таким же, как PageSetup другой книги?
258
30 апреля 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Татьяна
Как сделать PageSetup одной рабочей книги таким же, как PageSetup другой книги?



Хм.. например так:

 
Код:
With Workbooks("Книга2").Worksheets("Лист1")
  .PageSetup.LeftMargin = Workbooks("Книга1").Worksheets("Лист1").PageSetup.LeftMargin
  .PageSetup.HeaderMargin = Workbooks("Книга1").Worksheets("Лист1").PageSetup.HeaderMargin
  .PageSetup.LeftFooter = Workbooks("Книга1").Worksheets("Лист1").PageSetup.LeftFooter
..........
и т.д.
End With
3.7K
02 мая 2004 года
dedtolya
41 / / 12.10.2003
Цитата:
Originally posted by SergeySV


Хм.. например так:
 
Код:
With Workbooks("Книга2").Worksheets("Лист1")
  .PageSetup.LeftMargin = Workbooks("Книга1").Worksheets("Лист1").PageSetup.LeftMargin
  .PageSetup.HeaderMargin = Workbooks("Книга1").Worksheets("Лист1").PageSetup.HeaderMargin
  .PageSetup.LeftFooter = Workbooks("Книга1").Worksheets("Лист1").PageSetup.LeftFooter
..........
и т.д.
End With




Можно создать и использовать шаблон.
успехов.

3.3K
06 мая 2004 года
Татьяна
17 / / 23.01.2004
А как сделать, чтобы установить все параметры страницы сразу, а то длинноватый код получается?
И еще вопросик. Моя прога формирует много файлов. Как ускорить ее работу?
258
06 мая 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Татьяна
А как сделать, чтобы установить все параметры страницы сразу, а то длинноватый код получается?
И еще вопросик. Моя прога формирует много файлов. Как ускорить ее работу?



На первый вопрос - по короче никак. Заковырка именно в слове "ВСЕ", потому как можно перебрать ВСЕ своства объекта PageSetup, но кроме нужных тебе, там будут присутствовать что всякие служебно вспомогательные, типа: Parent(ссылка на род. объект), Application (ссылка на объект Application) и т.д.. Поэтому тут по всякому придется поработать. Либо ты сама перечисляешь токо нужные тебе свойства(это нагляднее), либо устраиваешь цикл For Each по все свойствам и выкидываешь из него не нужные свойства. Вообще-то не вижу особой проблемы перечислить один раз все нужные тебе свойства (что тебя смущает? или ты думаешь что чем меньше в коде строк, тем быстрее он выполняется?!). Или ты думаешь что это код придется писать для каждой книги? ну это не проблема, оформи весь код в функцию и передавай туда книги/листы по ссылке By Ref. А в самом коде будешь уже токо писать - OdinakovPage(worksheets("Лист1"),worksheets("Лист2"))

Ye и наконеНу сли ты создаешь новые книги/листы, может более удобным вариантом будет создавать их на основе шаблона - это можно делать программно.

258
06 мая 2004 года
SergeySV
1.5K / / 19.03.2003
На счет второго вопроса: ты код то покажи, а то пока у нас здесь мало кто может телепатить
3.3K
07 мая 2004 года
Татьяна
17 / / 23.01.2004
Цитата:
Originally posted by SergeySV
На счет второго вопроса: ты код то покажи, а то пока у нас здесь мало кто может телепатить


Моя прога создает новую рабочую книгу, копирует на нее содержимое листа исходной книги (Через Cells.Select - Copy - Paste. А может, можно как-то по другому? Скопировать нужно весь лист). редактирует содержимое некоторых ячеек, затем сохраняет файл. И так раз 500. Так вот, как сделать, чтобы это побыстрее работало?

258
07 мая 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Татьяна

Моя прога создает новую рабочую книгу, копирует на нее содержимое листа исходной книги (Через Cells.Select - Copy - Paste. А может, можно как-то по другому? Скопировать нужно весь лист). редактирует содержимое некоторых ячеек, затем сохраняет файл. И так раз 500. Так вот, как сделать, чтобы это побыстрее работало?



Без кода трудно определить что у тебя там тормозит так что могу дать токо общие рекомендации:

1. Копирование можно делать и без всякого Select, а прям сразу указываешь нужный диапазон:

 
Код:
Worksheets("Sheet1").Range("A1:D4").Copy _
    destination:=Worksheets("Sheet2").Range("E5")

2. В твоем случае можно еще быстрее, копировать не диапазон а весь лист:
 
Код:
Workbooks("Книга1").Worksheets("Лист1").Copy After:=Workbooks("Книга2").Worksheets("Лист3")

но самое приятно в это методе то, что можно писать даже так
 
Код:
Workbooks("Книга1").Worksheets("Лист1").Copy

тогда Excel сам создаст новую книгу и скопирует туда лист "Лист1". Чтобы не потерять открытую новую книгу можно написать так:
 
Код:
Dim wr As Workbook

Workbooks("Книга1").Worksheets("Лист1").Copy
Set wr = ActiveWorkbook


2. Чтобы процесс выполнения макроса шел быстрее надо отключать разную фоновую обработку, например перерисовку экрана, вычисление формул и т.д.:
 
Код:
With Application
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
  .CalculateBeforeSave = False
  .EnableAnimations = False
  .ErrorCheckingOptions.BackgroundChecking = False
End With

Соответсвенно после работы макроса не забываем включить все обратно, особенно ScreenUpdating = True и .Calculation = xlCalculationAutomatic

3. Ну и третий самый главный момент, для того чтобы оптимизировать код надо выяснить какая его часть большего всего тормозит (а то может и осталные части по сравнее с этой и оптимизировать не будет никакого смысла). Для этого создай модуль и включи в него такую строку: Public Declare Function timeGetTime Lib "winmm.dll" () As Long

После этого ты можешь использовать эту функцию timeGetTime, которая возвращает текущее время в миллисекундах.
Код:
Dim lTimeBegin As Long
' в начале кода
lTimeBegin = timeGetTime
....
тут код
....
MsgBox "Первый кусок: " & timeGetTime - lTimeBegin
lTimeBegin = timeGetTime
....
тут вторая часть кода
....
MsgBox "Второй кусок: " & timeGetTime - lTimeBegin
lTimeBegin = timeGetTime
....
тут третья часть кода
....
MsgBox "Третий кусок: " & timeGetTime - lTimeBegin
lTimeBegin = timeGetTime
и т.д.

т.е. разбиваем код на смысловые куски и засекаем время выполнения каждого куска и уже потом анализируем полученную информацию.
3.3K
11 мая 2004 года
Татьяна
17 / / 23.01.2004
Спасибо,SergeySV! Как только стала копировать лист, все заработало раза в 3 быстрее.:)
258
11 мая 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Татьяна
Спасибо,SergeySV! Как только стала копировать лист, все заработало раза в 3 быстрее.:)



Всегда пожалуйста,... если что интересное и нужное не только тебя но и другим сварганишь, выкладывай в разделе "Исходники", пополним так сказать народную коллекцию. :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог