Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проверка по трём критериям / 17 сообщений из 17, страница 1 из 1
05.11.2009, 12:46
    #36291894
GioCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Задача такая на Excel 2003- есть три дистрибутора у которых имеются свои водители, по три водителя на каждого. При оформлении заказа в бланк вводится фамилия дистрибутора и фамилия водителя, надо макросом проверить соответствует ли фамилия водителя своему дистрибутору, если нет то месиджбоксом вывести сообщение об не соответствии. Я хотел сделать так - If distr="name" then if driver<> "drname1" or "drname2" or "drname3" then msgbox("Проверте соответствые")
я точно не знаю как правильно записать это условие т.е. все водители проверялись на соответствие с дистрибутором макросом.
Спасибо!
...
Рейтинг: 0 / 0
05.11.2009, 13:08
    #36291988
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
а зачем макросом?... если же все таки хотите макросом, просто приделайте каждому водителю в конце цифру, соответствующую номеру дистрибъютора (которому тоже можете пределать цифру) и дальше сверяйте цифры в конце.
Например:
Дистрибъюторы:
Петров = Петров1
Иванов = Иванов2
...
Водители:
Иванченко = Иванченко1
Сидоров = Сидоров1
...

Код: plaintext
If right(distributor, 1 ) = right(voditel, 1 ) then
...
Рейтинг: 0 / 0
05.11.2009, 14:43
    #36292339
GioCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Отдельно проверять водителя не пойдёт, потому что если заказ выписан например на второго водителя или на третьего тогда проверка уже на первого водителя выдаст сообщение об ошибке ввода.
Надо проверить всех "сразу" - или водител1 или водител2 или водител3 и так для других дстрибуторов.
Если код пойдёт для одного дстрибутора то она будет работать и на других.
...
Рейтинг: 0 / 0
05.11.2009, 15:08
    #36292423
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Ну так а я что говорю:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
dim voditel
dim disributor
dim  aD( 1  to  3 )
dim aV( 1  to  9 )
dim i as integer

aD( 1 ) = "Петров1"
aD( 2 ) = "Иванов2"
...

aV ( 1 ) = "Иванченко1"
aV ( 2 ) = "Сидоров1"
aV ( 4 ) = "Зеленый2"
...

voditel = cells(r,c).value
distributor = cells(r,c).value

For i =  1  to ubound(aD)
if voditel = mid(aV(i), 1 ,len(aV(i)- 1 )) then voditel = aV(i) exit for
next i

For i =  1  to ubound(aV)
if disributor = mid(aD(i), 1 ,len(aD(i)- 1 )) then voditel = aD(i) exit for
next i

If right(distributor, 1 ) <> right(voditel, 1 ) then
msgbox "Несовподение"
end if

код не проверял, но идея должна быть понятной
...
Рейтинг: 0 / 0
05.11.2009, 15:51
    #36292559
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Другой вариант - меняем validation E4 в зависимости от значения ячейки D4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
 Select Case [D4]
 Case "mmm"

    With [E4].Validation
    .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="m1,m2,m3"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "please"
        .ErrorTitle = "stop"
        .InputMessage = "input drivers!"
        .ErrorMessage = "unknown driver"
        .ShowInput = True
        .ShowError = True
    End With

Case "hhh"
    With [E4].Validation
    .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="h1,h2,h3"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "please"
        .ErrorTitle = "stop"
        .InputMessage = "input drivers!"
        .ErrorMessage = "unknown driver"
        .ShowInput = True
        .ShowError = True
    End With

Case Else
    With [E4].Validation
    .Delete
    End With
    [E4].Delete
End Select

End Sub
Т.е. дистрибюторы - mmm, hhh
водители - m1, m2, m3, h1, h2, h3
Добавить третью третию третюю третьую тьфу группу №3 :)...
Других вариантов быть не может (если только copy-paste)...
Подправить по вкусу :)
...
Рейтинг: 0 / 0
05.11.2009, 15:56
    #36292579
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Да, на D4 тоже можно проверку навесить, тогда заполнить можно всё выбирая из выпадающего списка.
...
Рейтинг: 0 / 0
05.11.2009, 16:49
    #36292803
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
только что еще придумал, наверное самый простой
идея в том, что бы объеденить имя дистрибъютора и водителя а затем просто проверить в массиве:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
dim bChecker as boolean
dim sJoin as string
dim i as integer
dim  aА( 1  to n)

aA( 1 ) = "ПетровИванченко"
aD( 2 ) = "ИвановСидоров"
...
aD( 4 ) = "ИвановЗеленый"
...

bChecker = False
join = cells(r,c).value & cells(r,c).value

for i =  1  to n
if checker = aA(i) then bChecker = true 
next i

if bChecker = False then msgbox "Халепа :)"
...
Рейтинг: 0 / 0
05.11.2009, 18:23
    #36293110
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Вроде получилось удобно - добавил ещё примочку - если кликнуть по дистрибютору, водила сразу пропадает :) Т.е. больше нельзя заменить дистрибютора, но оставить прежнего чужого водилу.
Ну и список дистрибюторов и водителей легко редактировать - они в таблице.
Вариант рабочий, см. нижнюю часть.
...
Рейтинг: 0 / 0
05.11.2009, 18:25
    #36293116
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
В первом файле осталось удаление водилы при смене листа, лучше см. этот файл
...
Рейтинг: 0 / 0
06.11.2009, 10:12
    #36293924
GioCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Спасибо всем!
Я сделал так - добавил счётчик, если несовпадение имени водителя то счётчик=счётчик+1,
в конце если счётчик=3 (т.е. не совпали все три имени) то выходит сообщение об ошибке ввода.
Ваши варианты посмотрю, Спасибо!
...
Рейтинг: 0 / 0
06.11.2009, 10:28
    #36293971
GioCH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Можно и так, более компактно
If distr = "name" Then If (driver <> "водит1") And (driver <> "Водит2") And (driver <> "Водит3") Then MsgBox ("Проверьте имя водителя")
...
Рейтинг: 0 / 0
16.11.2009, 09:52
    #36311757
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Можно и так, без VBA :)
...
Рейтинг: 0 / 0
16.11.2009, 09:59
    #36311770
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
viktturМожно и так, без VBA :) ??? А где Ваш вариант? Спасибо, что в моём красоту навели, конечно....
...
Рейтинг: 0 / 0
16.11.2009, 10:03
    #36311777
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
-Вставка-Имя-Присвоить
Для F13:
-Данные-Проверка-Список
-Условное форматирование
...
Рейтинг: 0 / 0
16.11.2009, 10:04
    #36311781
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Ах да, заметил - indirect добавилось...
...
Рейтинг: 0 / 0
16.11.2009, 10:10
    #36311803
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Да, так конечно лучше, но не кардинально, согласись...
...
Рейтинг: 0 / 0
16.11.2009, 10:12
    #36311809
vikttur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка по трём критериям
Лучше или хуже - это уже решать применительно к конкретной задаче :)
Просто как пример.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Проверка по трём критериям / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]