Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.07.2008, 12:43   #1
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию проверка диапазона

Подскажите, как можно проверить диапазон ячеек на предмет наличия значений. Т.е. если все ячейки в диапазоне заполнены - то выполняется то-то, а если нет -другое то-то. Причем диапазон явно не задан.
Bezdar вне форума
Старый 29.07.2008, 14:07   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно, например, так:
Код:
Dim rng As Range
    Set rng = [A1:B3] ' Пусть это контролируемый диапазон
    If Intersect(rng, Cells.SpecialCells(xlCellTypeBlanks)) Is Nothing Then _
        MsgBox "Весь диапазон заполнен" Else MsgBox "Диапазон заполнен не полностью"
Естественно, что вместо MsgBox Вы вставите код, который должен выполняться в одном и в другом случае соответственно.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 29.07.2008 в 14:11.
SAS888 вне форума
Старый 29.07.2008, 14:23   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

подробности - проверять в формуле или в макросе?
Наличие значений - пробел - это есть значение или нет?
а формула =ЕСЛИ(2>3;"";"чудо!") - это пустая ячейка или нет?
Больше конкретики, возможно примерчик в файле...
Тогда у Вас Гораздо больше шансов получить ответ.

hint.
СЧЕТ - подсчитывает количество ячеек, содержащих числа
СЧЕТЗ - подсчитывает количество непустых ячеек
Serge_Bliznykov вне форума
Старый 29.07.2008, 16:17   #4
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

Спасибо всем, кто откликнулся!

SAS888
СПАСИБО ОГРОМНО!!!
Хотя ничего не поняла, но все получилось.
Не пойму как работает Intersect применимо к считыванию значений, буду разбираться.

А есть ли что-то похожее, применимое не к Range, а к Control-ам на форме? А то я вручную прописываю: если это равно false and это равно false and...
Bezdar вне форума
Старый 29.07.2008, 16:48   #5
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

опросить контролы на форме, на предмет наличия в них значений, можно следующим кодом
Код:
n = 10 'пусть это кол-во контролов Label
For lb = 1 To n
       valLb = Me.Controls("Label" & lb).Caption
Next n
а теперь можно решать, что с этим делать
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума
Старый 29.07.2008, 17:22   #6
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Восклицание Скрипач... то-есть Intersect не нужен!

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Код:
    Dim rng As Range
    Set rng = [A1:B3] ' Пусть это контролируемый диапазон
    If Intersect(rng, Cells.SpecialCells(xlCellTypeBlanks)) Is Nothing Then _
        MsgBox "Весь диапазон заполнен" Else MsgBox "Диапазон заполнен не полностью"
Sorry, но если пустых ячеек в диапазоне нет, то Intersect генерит ошибку
Run-time error '5':
Invalid procedure call or argument


, не считая того, что SpecialCells генерит ошибку
Run-time error '1004'
Не найдено ни одной ячейки, удовлетворяющей указанным условиям


Если контролируемый диапазон наверняка состоит более, чем из одной ячейки, то просто

Код:
Function HasBlanks(Rng As Range) As Boolean
    Dim r As Range
    On Error Resume Next
    Set r = Rng.SpecialCells(xlCellTypeBlanks) 'If no blanks, Err 1004
    On Error GoTo 0
    HasBlanks = Not r Is Nothing
End Function

Последний раз редактировалось дмидми; 29.07.2008 в 17:31.
дмидми вне форума
Старый 29.07.2008, 17:48   #7
Bezdar
Форумчанин
 
Регистрация: 03.06.2008
Сообщений: 213
По умолчанию

дмидми
У меня тоже генерил ошибку, но я с этим заморачиваться не стала, а прописала в else: if not Intersect(). Вроде работает. И потом у меня единичный диапазон - только один столбец, а там все работает безупречно.
Bezdar вне форума
Старый 30.07.2008, 05:33   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

дмидми, Bezdar.
Откуда ошибка? Почему?
Intersect - это диапазон пересечения его аргументов (которые заданы как Range). В моем коде ищется пересечение "нашего" диапазона (rng) и всех пустых ячеек листа. В результате, если между этими диапазонами нет общих ячеек (Is Nothing), значит весь "наш" диапазон заполнен. Ошибка возможна только тогда, когда нет ни одной пустой ячейки на листе. Вы можете это представить?
И еще. Автор вопроса говорит
Цитата:
Причем диапазон явно не задан.
дмидми а Вы пробовали выполнить код
Цитата:
Set r = Rng.SpecialCells(xlCellTypeBlanks) 'If no blanks, Err 1004
Где Rng - диапазон. По-моему, в данном случае, возможно только явное объявление диапазона Rng.

P.S Если не затруднит, приложите кусок файла с моим кодом, где генерируется ошибка. Я не могу ее получить никакими "выпендриваниями".
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 30.07.2008 в 07:39. Причина: Добавлено
SAS888 вне форума
Старый 30.07.2008, 07:42   #9
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Радость Если поблизости запахнет серой...

...то мы просто обязаны наладить производство святой воды в промышленных масштабах. ©
Цитата:
Сообщение от SAS888 Посмотреть сообщение
Ошибка возможна только тогда, когда нет ни одной пустой ячейки на листе. Вы можете это представить?
Могу
Цитата:
Сообщение от SAS888 Посмотреть сообщение
в данном случае, возможно только явное объявление диапазона Rng
Я привёл код функции, значение диапазона задаётся при вызове.
Цитата:
Сообщение от SAS888 Посмотреть сообщение
приложите кусок файла с моим кодом, где генерируется ошибка
Лист без пустых ячеек многовато весит

P.S. Строка On Error GoTo 0, кажется, лишняя. Но я всегда считаю, что лучше перебдеть...
дмидми вне форума
Старый 30.07.2008, 07:54   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Т.е. Вашу функцию можно использовать только вызвав из ячейки листа? А если ей требуется воспользоваться в основном коде? Как ее вызвать из макроса с явно заданным диапазоном?
И все-таки. Почему у Вас, при выполнении предложенного мной кода возникает ошибка. Я не могу смоделировать такую ситуацию (заполнять все ячейки листа не буду, считаю такую ситуацию невероятной).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
формула ЕСЛИ, из диапазона valerij Microsoft Office Excel 21 18.04.2008 17:38
Выход из диапазона. Паскаль Punk_tir Помощь студентам 3 03.12.2007 10:09
Имя диапазона CAMyM Microsoft Office Excel 8 09.11.2007 10:16
Выбор Диапазона Дат Chepa БД в Delphi 2 02.02.2007 10:25
Ccылка в функции на два диапазона Python Microsoft Office Excel 1 28.11.2006 03:21