Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: использование именновах диапазонов Добавлено: 30.06.06 15:03  

Автор вопроса:  APS | ICQ: 234458121 
Господа!
Бьюсь пол-дня, и справку читал, и книжку, и инет рыл, понять не могу.
В общем, есть диапазон, которому присвоено имя. Как пролистать все ячейки этого диапазона?

Ответить

  Ответы Всего ответов: 23  

Номер ответа: 1
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #1 Добавлено: 30.06.06 18:57
Точно тем же, достопочтенный, способом, которым вы листаете ячейки диапазонов неименованных!

Ответить

Номер ответа: 2
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #2 Добавлено: 30.06.06 20:41
Бьюсь пол-дня, и справку читал, и книжку, и инет рыл, понять не могу.
ИМХО: ЧЁ-ТО НЕ ВЕРИТСЯ, ЧТО РЫЛ!!!
http://www.firststeps.ru/vba/excel/r.php?66

Хотя по тексту в ссылке
Для того, чтобы можно было произвести работу с этой ячейкой ее надо выделить c.Select.
Действительно не обязательно применять Select.

Ответить

Номер ответа: 3
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #3 Добавлено: 30.06.06 22:25
Простите, Господа!
Видать не там рыл. Сами понимаете: конец недели - пятница - ступор.
На самом деле никак не мог разобраться как имя диапазона указывать.
Дома все получилось. Надеюсь, на работе тоже получится.

Незнайка, ты мне помогаешь уже не первый раз. За это огромный респект, готов напоить тебя пивом.

Ответить

Номер ответа: 4
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #4 Добавлено: 03.07.06 13:49
Вот какой теперь образовался затор.
Делаю так:
Private Sub ButtonForm_Click()
    For Each c In Range("Quantity";)
        MsgBox c
    Next
End Sub

Получаю на выходе значения каждой ячейки диапазона "Quantity". А как вытащить адрес этой ячейки? c.Address не катит...

Ответить

Номер ответа: 5
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #5 Добавлено: 03.07.06 15:31
Сорри, c.Address работает нормально.

Ответить

Номер ответа: 6
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #6 Добавлено: 03.07.06 15:46
Итого. Я достиг цели. Вдруг кому-то интересно.
На листе есть диапазон ячеек, причем диапазон с разрывами. Необходимо определять какие ячейки это диапазона пусты или содержат ноль и удалять строку, содержащую такую ячейку. Получилось очень компактно.
    For Each c In Range("Quantity";)
        If c = 0 Or c = "" Then
            Range(c.Address).EntireRow.Delete
        End If
    Next

Ответить

Номер ответа: 7
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #7
Добавлено: 03.07.06 20:38
____ Компактно-то компактно, а работать будет быстрее (даже при выключенном экране) если сначала создать ещё один range, состоящий только из тех строк, которые следует удалить и удалить сразу весь range (одной командой).

Ответить

Номер ответа: 8
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #8 Добавлено: 04.07.06 15:43
А примерчик такого решения можно?
Хотя строк у меня немного: 200-300, работает быстро.

Ответить

Номер ответа: 9
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #9 Добавлено: 04.07.06 18:31
7:
а работать будет быстрее (даже при выключенном экране)
При выключенном всегда быстрее :))
сначала создать ещё один range, состоящий только из тех строк, которые следует удалить и удалить сразу весь range (одной командой).
И что произойдет для перекрывающихся дипазонов - писец - все сломалось!!!??? Зачем это нужно!!! Это плохое ограничение!!! Проверять, чтобы строки были уникальными - криво!!!
8:
Отключай обновление экрана, отключай пересчет. Удаляй. Но если будут доставать тормоза - лучше подумать о том, чтобы в принципе не удалять пустые строки - наверняка можно обойтись без удаления. Зависит от контекста задачи.

Ответить

Номер ответа: 10
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #10
Добавлено: 04.07.06 20:38
работает быстро /APS/

____ Быстро это как? Менее секунды или более?

____ Прошу прощенья — я несколько был неточен. Я не удалял строки, а скрывал, а потом печатал видимую часть. Однако, думаю, что это почти ничего не меняет.

____ У меня уже года два (или более) сделан в Excel шаблон сметы на материалы и работы. Некоторая часть работ считается на основании информации по служебным столбцам (вне печати). Создана toolbar с двумя кнопками: "Показать", "Скрыть". Скрыть, естественно, надо было те строки, в которых отсутствует сумма.
____Я сделал сначала "в лоб". получил очень долгое мелькание экрана. Потом я убрал обновление экрана и стало всё работать быстрее, но скорость работы сильно напрягала. Скорее всего, происходит процесс обновления всех данных в памяти. И всё это — в моём цикле поиска пустых строк. Вот тогда я и решил не скрывать отдельные строки а формировать из них range, а скрытие сделать ВНЕ цикла. Стало работать так, что не успеваю моргнуть.
____ Два кусочка из текста:


'   Анализ стоимости (ячейка H)
          If .Cells(i, 9).Value = 0 Then    'Стоимость равна 0;
'   Формирование объединённого диапазона строк для скрытия
            If Диапазон Is Nothing Then
              Set Диапазон = Rows(i)
            Else
              Set Диапазон = Union(Диапазон, Rows(i))
            End If
          End If

.................

'   Скрытие объединённого диапазона, если он существует
      If Диапазон Is Nothing Then
      Else
        Диапазон.EntireRow.Hidden = True
        Set Диапазон = Nothing
      End If



____ Я думаю, что при удалении range, в перекрывающихся диапазонах произойдёт соответствующее обновление, вплоть до Nothing.

Ответить

Номер ответа: 11
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #11 Добавлено: 04.07.06 20:49
10: не более секунды

Ответить

Номер ответа: 12
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #12 Добавлено: 04.07.06 22:11
10:
Я думаю, что при удалении range, в перекрывающихся диапазонах произойдёт соответствующее обновление, вплоть до Nothing.
Увы и ах, но будет Error.
11:
Ну и нормально.

Ответить

Номер ответа: 13
Автор ответа:
 APS



ICQ: 234458121 

Вопросов: 38
Ответов: 107
 Профиль | | #13 Добавлено: 05.07.06 10:40
10: Все-таки переделал я, как ты сказал. Проблема была не в скорости. При пролистывании диапазона и моментальном удалении скрипт проскакивал следующую ячейку. А так все супер работает.
Спасибо.

Ответить

Номер ответа: 14
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #14
Добавлено: 05.07.06 13:18
____ "Проскакивание" я проходил. После удаления строки "перенумеровываются" и на это уходит время, а цикл сбивается: на место удалённой строки встаёт следующая и принимает её номер.

Ответить

Номер ответа: 15
Автор ответа:
 Незнайка



Вопросов: 7
Ответов: 188
 Профиль | | #15 Добавлено: 05.07.06 14:56
и на это уходит время
Господа не надо хохлить бабушку - там все индексировано - это ОЧЧЕНЬ мало времени. А при удалении шаг уменьшают на единичку.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам