powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Производительность и правильность кода.
7 сообщений из 7, страница 1 из 1
Производительность и правильность кода.
    #35727542
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос к гурам нашего форума наверно :)

Какой код считается более правильным и производительным?
Например можно сделать так:
Worksheets("Sheet2").Range("A2").value = 1

либо:
dim ws as worksheet
set ws = worksheets("Sheet2")
dim rng as range
set rng = ws.range("A2")
rng.value = 1

Второй способ удобен тем, что работает intellisense или как он называется в VBA. Первый короче, но зачастую в длинном коде оказывается длиннее.
Насчет производительности мне интересно правильно ли я понимаю что
dim ws as worksheet
set ws = worksheets("Sheet2")
создает ссылку на лист, которая в принципе занимает немного памяти, но освобождается ли эта память по окончании процедуры?
...
Рейтинг: 0 / 0
Производительность и правильность кода.
    #35727546
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также код типа
rng.item(1,1)
либо
rng(1,1)

Есть ли какая-то разница между ними?
...
Рейтинг: 0 / 0
Производительность и правильность кода.
    #35727712
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nporaMep, а просто проверить? :)
...
Рейтинг: 0 / 0
Производительность и правильность кода.
    #35727750
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_, по моим опытам второй способ быстрее:
на 9999 вызовов дает 9.75с против 10.27с
...
Рейтинг: 0 / 0
Производительность и правильность кода.
    #35727764
_slan_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_slan_,а если использовать worksheets(1)..
...
Рейтинг: 0 / 0
Производительность и правильность кода.
    #35727975
nporaMep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну мне кажется интуитивно, что при использовании
set ws = Worksheets("Sheet2")/set ws = Worksheets(2)

ws.range...
ws.range...
ws.range...
ws.range...
ws.range...

Задержка будет только в 1-й строке.

Если использовать
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...
Worksheets("Sheet2").range...

задержка будет на каждой строке.
...
Рейтинг: 0 / 0
Производительность и правильность кода.
    #35728501
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nporaMep,

Все правильно.
При каждом вызове Worksheets("Sheet2").Range(...) Эксель будет пробегать по списку листов, поэтому если надо обращаться к одному и тому-же листу несколько раз - эффективнее будет сделать переменную типа Worksheet и работать через нее. То же самое касается и вообще всех коллекций.

nporaMep
dim ws as worksheet
set ws = worksheets("Sheet2")
создает ссылку на лист, которая в принципе занимает немного памяти, но освобождается ли эта память по окончании процедуры?Да, освобождается.

nporaMepТакже код типа
rng.item(1,1)
либо
rng(1,1)

Есть ли какая-то разница между ними?Есть конечно, но до тех пор пока ты пишешь на VBA ты ее не увидишь совсем.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Производительность и правильность кода.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]