Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Использование ReDim - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Использование ReDim (Макросы/Sub)
Использование ReDim
Roman777 Дата: Пятница, 05.12.2014, 13:27 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Сделал макрос, для удаления q-кол-ва листов
использвал функцию reDim по аналогии с примера другого совсем.
Вроде всё работает как мне надо, но я совсем не пойму принципа работы.
Может кто-нибудь пояснить три вопроса по коду?
[vba]
Код
Sub УдалениеПочтиВсехЛистов()
    Dim sheet As Worksheet: ReDim GroupIndex(1 To 1)                    '1
     Application.DisplayAlerts = False  
       For Each sheet In ActiveWorkbook.Worksheets
       q = sheet.Index
          If q <= 273 Then
             ReDim Preserve GroupIndex(1 To q): GroupIndex(q) = sheet.Index  '2
             Sheets(GroupIndex).Select                    '3
          End If
       Next
   ActiveWindow.SelectedSheets.Delete
   Application.DisplayAlerts = True  
End Sub
[/vba]

1) Dim sheet As Worksheet: ReDim GroupIndex(1 To 1) :Вот тут, что именно обозначает ReDim дословно, и что значит 1to 1?
2) ReDim Preserve GroupIndex(1 To q): GroupIndex(q) = sheet.Index :Что означает Redim Perserve?
3) Sheets(GroupIndex).Select :мне казалось, что данная функция работает с перечнем листов, то есть все индексы листов должны быть записаны через ",", чтобы выделить диапазон,
поэтому, я рассчитывал при выводе в MgsBox (GroupIndex) увидеть запись последовательности чисел через запятую, но такого не получается. Не пойму почему.


Много чего не знаю!!!!
 
Ответить
СообщениеСделал макрос, для удаления q-кол-ва листов
использвал функцию reDim по аналогии с примера другого совсем.
Вроде всё работает как мне надо, но я совсем не пойму принципа работы.
Может кто-нибудь пояснить три вопроса по коду?
[vba]
Код
Sub УдалениеПочтиВсехЛистов()
    Dim sheet As Worksheet: ReDim GroupIndex(1 To 1)                    '1
     Application.DisplayAlerts = False  
       For Each sheet In ActiveWorkbook.Worksheets
       q = sheet.Index
          If q <= 273 Then
             ReDim Preserve GroupIndex(1 To q): GroupIndex(q) = sheet.Index  '2
             Sheets(GroupIndex).Select                    '3
          End If
       Next
   ActiveWindow.SelectedSheets.Delete
   Application.DisplayAlerts = True  
End Sub
[/vba]

1) Dim sheet As Worksheet: ReDim GroupIndex(1 To 1) :Вот тут, что именно обозначает ReDim дословно, и что значит 1to 1?
2) ReDim Preserve GroupIndex(1 To q): GroupIndex(q) = sheet.Index :Что означает Redim Perserve?
3) Sheets(GroupIndex).Select :мне казалось, что данная функция работает с перечнем листов, то есть все индексы листов должны быть записаны через ",", чтобы выделить диапазон,
поэтому, я рассчитывал при выводе в MgsBox (GroupIndex) увидеть запись последовательности чисел через запятую, но такого не получается. Не пойму почему.

Автор - Roman777
Дата добавления - 05.12.2014 в 13:27
Hugo Дата: Пятница, 05.12.2014, 13:43 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Про ReDim Statement читайте помощь - там всё написано.
GroupIndex у Вас будет массив - никакого перечня через запятую там нет, это "набор" чисел.

1. Выделять листы внутри цикла - лишняя трата сил и времени.
2. Если в книге будут ещё и другие листы - код выпадет в ошибку.
3. Если в книге листов будет меньше 274 - код выпадет в ошибку.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПро ReDim Statement читайте помощь - там всё написано.
GroupIndex у Вас будет массив - никакого перечня через запятую там нет, это "набор" чисел.

1. Выделять листы внутри цикла - лишняя трата сил и времени.
2. Если в книге будут ещё и другие листы - код выпадет в ошибку.
3. Если в книге листов будет меньше 274 - код выпадет в ошибку.

Автор - Hugo
Дата добавления - 05.12.2014 в 13:43
Hugo Дата: Пятница, 05.12.2014, 14:21 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Вот такому варианту не страшно наличие других листов:
[vba]
Код
Sub УдалениеПочтиВсехЛистов()
     Dim sheet As Worksheet, flag As Boolean: ReDim GroupIndex(1 To 1)                    '1
     Application.DisplayAlerts = False
     For Each sheet In ActiveWorkbook.Worksheets
         q = sheet.Index
         If q <= 273 Then
             flag = True
             GroupIndex(UBound(GroupIndex)) = q    '2
             Sheets(GroupIndex).Select
             ReDim Preserve GroupIndex(1 To UBound(GroupIndex) + 1):    '3
         End If
     Next
     If flag Then ActiveWindow.SelectedSheets.Delete
     Application.DisplayAlerts = True
End Sub
[/vba]
Выделение в цикле оставил - некогда усложнять код :(


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВот такому варианту не страшно наличие других листов:
[vba]
Код
Sub УдалениеПочтиВсехЛистов()
     Dim sheet As Worksheet, flag As Boolean: ReDim GroupIndex(1 To 1)                    '1
     Application.DisplayAlerts = False
     For Each sheet In ActiveWorkbook.Worksheets
         q = sheet.Index
         If q <= 273 Then
             flag = True
             GroupIndex(UBound(GroupIndex)) = q    '2
             Sheets(GroupIndex).Select
             ReDim Preserve GroupIndex(1 To UBound(GroupIndex) + 1):    '3
         End If
     Next
     If flag Then ActiveWindow.SelectedSheets.Delete
     Application.DisplayAlerts = True
End Sub
[/vba]
Выделение в цикле оставил - некогда усложнять код :(

Автор - Hugo
Дата добавления - 05.12.2014 в 14:21
Roman777 Дата: Пятница, 05.12.2014, 14:58 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Hugo, Спасибо. Я не очень понял, что значит "другие листы"?


Много чего не знаю!!!!
 
Ответить
СообщениеHugo, Спасибо. Я не очень понял, что значит "другие листы"?

Автор - Roman777
Дата добавления - 05.12.2014 в 14:58
RAN Дата: Пятница, 05.12.2014, 15:21 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я не очень понял, что значит "другие листы"?

Если в книге листов будет меньше 274 - код выпадет в ошибку.

[vba]
Код
Sub мяу()
     Dim arr, Sheets_count&
     Sheets_count = 273
     If Sheets_count >= Sheets.Count Then Exit Sub
     ReDim arr(1 To Sheets_count)
     For i = 1 To UBound(arr)
         arr(i) = i
     Next
     Application.DisplayAlerts = False
     Sheets(arr).Delete
     Application.DisplayAlerts = True
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 05.12.2014, 15:34
 
Ответить
Сообщение
Я не очень понял, что значит "другие листы"?

Если в книге листов будет меньше 274 - код выпадет в ошибку.

[vba]
Код
Sub мяу()
     Dim arr, Sheets_count&
     Sheets_count = 273
     If Sheets_count >= Sheets.Count Then Exit Sub
     ReDim arr(1 To Sheets_count)
     For i = 1 To UBound(arr)
         arr(i) = i
     Next
     Application.DisplayAlerts = False
     Sheets(arr).Delete
     Application.DisplayAlerts = True
End Sub
[/vba]

Автор - RAN
Дата добавления - 05.12.2014 в 15:21
Hugo Дата: Пятница, 05.12.2014, 15:50 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Другие листы - листы графиков, макросов, диалогов. Ну актуальны иногда бывают графики.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДругие листы - листы графиков, макросов, диалогов. Ну актуальны иногда бывают графики.

Автор - Hugo
Дата добавления - 05.12.2014 в 15:50
Roman777 Дата: Пятница, 05.12.2014, 16:22 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
RAN, Спасибо, тоже интересный вариант. Понял некоторые ошибки.
Hugo, я просто ни разу не пользовался другими листами, видимо потому и не в курсе...)


Много чего не знаю!!!!
 
Ответить
СообщениеRAN, Спасибо, тоже интересный вариант. Понял некоторые ошибки.
Hugo, я просто ни разу не пользовался другими листами, видимо потому и не в курсе...)

Автор - Roman777
Дата добавления - 05.12.2014 в 16:22
Hugo Дата: Пятница, 05.12.2014, 16:44 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3254
Репутация: 707 ±
Замечаний: 0% ±

2019
Понятно.
В любом случае можно пользоваться вариантом Андрея - он не разбирает листы :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПонятно.
В любом случае можно пользоваться вариантом Андрея - он не разбирает листы :)

Автор - Hugo
Дата добавления - 05.12.2014 в 16:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Использование ReDim (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!