Столкнулся с задачей масс-форматирования схожих страниц и заметил, что код занимает весьма много времени.
Конкретней, мне надо было изменить на 11 листах ширину строк с 22 по 34 на определенные значения, удалить несколько листов или определенные строки/столбцы на 11 листах.
Ну и собственно был код в 2-х вариантах (с массивом листов и массивом названий листов):
dim wsName(1 to 11) as String
wsName(1)="Sheet1"
...
wsName(11)="Sheet11"
for j = 1 to 11
ThisWorkBook.Worksheets(wsName(j)).Rows("24").RowHeight=10
ThisWorkBook.Worksheets(wsName(j)).Rows("25").RowHeight=15
...
ThisWorkBook.Worksheets(wsName(j)).Rows("32").RowHeight=20
Next
Ну и аналогично для массива листов, было
ws(j).Rows("24").RowHeight=10 в цикле
Работало это всё медленно, нашел в хелпе обращение к массиву листов Worksheets(Array("Sheet1", "Sheet2", "Sheet3"), и нашел что оно работает с применением строкового массива типа (Worksheets(wsName))
Но, что было неудобно:
Для того, чтобы например изменить высоту строк, приходилось писать такой код:
ThisWorkBook.WorkSheets(wsName).Select
Rows("22").RowHeight=10
То есть выделение листа, и выделение строки на активном листе (ну фиг с ним с ScreenUpdating = false пользователь этого не видит), но мне кажется, что это как-то криво и должна быть возможность сделать это без Select'а.
А ещё в коде перед этим открывается другой эксель файл и чтобы заработал Select, нужно было писать ThisWorkBook.Activate.
Мне оч. сильно не нравятся методы Select/Activate, поэтому собственно и создал эту тему :)
Конкретней, мне надо было изменить на 11 листах ширину строк с 22 по 34 на определенные значения, удалить несколько листов или определенные строки/столбцы на 11 листах.
Ну и собственно был код в 2-х вариантах (с массивом листов и массивом названий листов):
dim wsName(1 to 11) as String
wsName(1)="Sheet1"
...
wsName(11)="Sheet11"
for j = 1 to 11
ThisWorkBook.Worksheets(wsName(j)).Rows("24").RowHeight=10
ThisWorkBook.Worksheets(wsName(j)).Rows("25").RowHeight=15
...
ThisWorkBook.Worksheets(wsName(j)).Rows("32").RowHeight=20
Next
Ну и аналогично для массива листов, было
ws(j).Rows("24").RowHeight=10 в цикле
Работало это всё медленно, нашел в хелпе обращение к массиву листов Worksheets(Array("Sheet1", "Sheet2", "Sheet3"), и нашел что оно работает с применением строкового массива типа (Worksheets(wsName))
Но, что было неудобно:
Для того, чтобы например изменить высоту строк, приходилось писать такой код:
ThisWorkBook.WorkSheets(wsName).Select
Rows("22").RowHeight=10
То есть выделение листа, и выделение строки на активном листе (ну фиг с ним с ScreenUpdating = false пользователь этого не видит), но мне кажется, что это как-то криво и должна быть возможность сделать это без Select'а.
А ещё в коде перед этим открывается другой эксель файл и чтобы заработал Select, нужно было писать ThisWorkBook.Activate.
Мне оч. сильно не нравятся методы Select/Activate, поэтому собственно и создал эту тему :)