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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 11:28   #1
Darkdog
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 16
По умолчанию ошибка в коде?

Добрый день! Помогите пожалуйста найти ошибку. Суть задачи: значение ячейки из второго столбца первой строки сравнивается со значениями из первого столбца (неограниченной длинны). В случае совпадений - выводится сообщение.
Код:
Sub q1()
i = 1
Do While Cells(i, 1).Value <> ""
If Cells(i, 1).Value = Cells(1, 2).Value Then
MsgBox ("Значения совпадают")
End If
i = i + 1

Loop
End Sub

Не могу понять почему не работает. Подскажите пож-та.

Последний раз редактировалось Darkdog; 26.02.2010 в 11:31.
Darkdog вне форума Ответить с цитированием
Старый 26.02.2010, 11:34   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Конечно, эту задачу можно решить по разному, более оптимально. Но в Вашем случае задан неверный выход из цикла: "Выполнять до тех пор, пока...". Т.е. нужно изменить знак "=" на знак "<>".

P.S. И смените имя макроса. "q1" - это адрес ячейки. Лучше избегать подобных совпадений.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.02.2010, 11:35   #3
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Замени
Код:
Do While Cells(i, 1).Value = ""
на
Код:
Do While Cells(i, 1).Value <> ""
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 26.02.2010, 11:51   #4
Darkdog
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 16
По умолчанию

Пробовал, на практике код отрабатывает с = без сообщений.
Darkdog вне форума Ответить с цитированием
Старый 26.02.2010, 11:57   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Пробовал, на практике код отрабатывает с = без сообщений.
Это не так. с "=" получится, что входа в цикл вообще не произойдет, т.к. при такой конструкции сначала проверяется условие. И если ="", то выход из цикла. Другими словами: проверяем условие, и если оно не совпадает, то выполняем "тело" цикла. И так до тех пор, пока не будет выполнено условие.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.02.2010, 12:05   #6
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

не знаю. у меня все работает
Вложения
Тип файла: rar совпад.rar (7.6 Кб, 8 просмотров)
Dophin вне форума Ответить с цитированием
Старый 26.02.2010, 12:08   #7
Darkdog
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 16
По умолчанию

Уважаемый SAS888! Выкладываю сам файл. Поправте пож-та, если возможно - поставьте комментарий
Darkdog вне форума Ответить с цитированием
Старый 26.02.2010, 12:13   #8
Darkdog
Пользователь
 
Регистрация: 12.02.2010
Сообщений: 16
По умолчанию

Dolphin - спасибо за пример! Подскажите пожалуйста а что за "Option Explicit"? Что это дает? Кроме этого мой код отличается от вашего Объявлением I. VBA не поддерживает автоматическое объявление переменных?
Darkdog вне форума Ответить с цитированием
Старый 26.02.2010, 12:15   #9
Dophin
Форумчанин
 
Аватар для Dophin
 
Регистрация: 13.01.2010
Сообщений: 410
По умолчанию

Вот как раз Option Explicit запрещает использование автоматического использования переменных, все переменные нужно объявлять явно.

Для новичков вроде меня - очень полезно. Да и код потом вычитывать проще.

Как видите код точь в точь как Ваш и все работает )


З.Ы. и не надо коверкать мой ник
Dophin вне форума Ответить с цитированием
Старый 26.02.2010, 12:18   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Выкладываю сам файл
Что-то не видно файла...

И вообще - зачем в данном случае макрос?
Не проще ли подсветить ячейки первого столбца, которые совпадают с ячейкой B1, при помощи условного форматирования?
Никаких макросов, и сразу видны все совпадения...
EducatedFool вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в коде Си Misha_M. Помощь студентам 2 05.02.2010 15:41
Ошибка в коде konstantinopol Общие вопросы по Java, Java SE, Kotlin 1 26.10.2009 23:21
Ошибка в коде.. NSvirus PHP 4 14.10.2009 22:57
Ошибка в коде. fanyl Паскаль, Turbo Pascal, PascalABC.NET 10 21.09.2009 12:09
Ошибка в коде nikleb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.03.2008 22:48