Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как заменить многочисленное If на Switch?

248
19 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Есть такая проверка наличия дока:
Цитата:
Sub IsDoc()
Dim i, iPath, iFName As String
iPath = "E:\123\"
iFName = Dir(iPath & "*.doc")
Do While iFName <> "" And Not InStr(iFName, "+") [COLOR="Green"]'т.е. если с плюсиком,
'значит он уже обработан, и его не трогать[/COLOR]
If InStr(LCase(iFName), "алког") Then i = "A3": GoTo Colorize
[COLOR="Green"]'тут я присваиваю по названию документа номер ячейке,
в которой сидит его название и хочу перекрасить шрифт в белый цвет
(проверяю наличие документа в папке и если есть делаю цвет названия этого документа в табличке Екселя ярким цветом.[/COLOR]
...
If InStr(LCase(iFName), "химия") Then i = "A33": GoTo Colorize

GoTo skipp
Colorize:
Range(i).Select
Selection.Font.ColorIndex = 2
skipp:
iFName$ = Dir
Loop
End Sub



Может быть вместо 30-ти If'ов лучше использовать один Switch (должно быстрее работать), но не соображу как тогда надо записать.

251
20 декабря 2007 года
SkyMаn
1.7K / / 31.07.2007
[COLOR=Red]GoTo - это ЗЛО!!!!!!![/COLOR]
Можно сделать через индексацию.
Код:
Sub IsDoc()
    Dim Cnt, iPath, iFName As String
    Dim arrThing(10,1) As String
   
    arrThing(1,1) = "A3": arrThing(1,0) = "алког"
    arrThing(2,1) = "A33": arrThing(2,0) = "химия"
    arrThing(3,1) = "C2": arrThing(3,0) = "наркот"
    '...
    arrThing(10,1) = "B1": arrThing(10,0) = "женщ"
    ' :)
   
    iPath = "E:\123\"
    iFName = Dir(iPath & "*.doc")
    Do While iFName <> "" And Not InStr(iFName, "+") 'т.е. если с плюсиком, значит он уже обработан, и его не трогать
        For Cnt=1 To UBound(arrThing)-1'при Option Base 0
            If InStr(LCase(iFName))=arrThing(Cnt,0)) Then  Range((arrThing(Cnt,1))).ColorIndex = 2
        Next
        iFName$ = Dir
    Loop
End Sub
248
20 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
[COLOR=Red]GoTo - это ЗЛО!!!!!!![/COLOR]


Помню, помню. :o

Цитата: SkyM@n

arrThing(3,1) = "C2": arrThing(3,0) = "наркот"
'...
arrThing(10,1) = "B1": arrThing(10,0) = "женщ"


А вот про это подзабыл, надо вспомнить как, что и куда, чтобы не запутаться. :D

Кстати, строчка
If InStr(LCase(iFName))=arrThing(Cnt,0)) Then Range((arrThing(Cnt,1))).ColorIndex = 2
высвечена красным. Что-то не так.
А может быть еще проще использовать оператор like?
Т.е. если название файла like текст в ячейке, то красить.

251
20 декабря 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: Dmitry2064

Кстати, строчка
If InStr(LCase(iFName))=arrThing(Cnt,0)) Then Range((arrThing(Cnt,1))).ColorIndex = 2
высвечена красным. Что-то не так.


А что не так? Где высвечена красным?
На счет like - то вряд ли.

Кстати, а почему вы свегда используете такой синтаксис:
'Выделить область:
[COLOR=Blue] Range(i).[/COLOR]Select
Работать с выделением
Selection[COLOR=Blue].Font.ColorIndex = 2[/COLOR]
а можно жн сразу рабоать с областью:
[COLOR=Blue] Range(i).Font.ColorIndex = 2[/COLOR]

248
20 декабря 2007 года
Dmitry2064
590 / / 06.12.2006
Красным такая строка:
[COLOR="Red"]If InStr(LCase(iFName))=arrThing(Cnt,0)) Then Exit Sub[/COLOR]
или без одной скобки
[COLOR="Red"]If InStr(LCase(iFName)=arrThing(Cnt,0)) Then Exit Sub[/COLOR]
А ткая нормально:
[COLOR="Navy"]If InStr(LCase(iFName), "алко") Then Exit Sub[/COLOR] 'для краткости хвост заменил на Exit Sub
Наверное не нравится, что внутри Instr сидит знак равенства.

Про то, что сразу можно работать с областью понял. Просто для тренировки навыков программирования хочется сначала выделить, что бы увидеть, что "оно" работает, а потом уже что-то с выделением делать. С like'ом тоже понял.

Пока читал свой же ответ увидел, что надо написать так:
[COLOR="Navy"]If InStr(LCase(iFName), arrThing(Cnt, 0)) Then Exit Sub[/COLOR]
И все станет нормально.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог