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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2011, 15:17   #1
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию type mismatch T_T

люди добрые, помогите еще пожалуйста!
с типами переменных не могу разобраться Т_Т

надо: чтобы макрос сверял значение ячейки с заданным диапазоном: входит-не входит в диапазон
и если без "красного", то почему-то у меня "3" не входит в диапазон, вообще ничего не входит, а если с "красным", то выдает "type mismatch" Т_Т

Код:
Sub a__a()
    Dim arrCondition() As Integer, vCondition As String
    
    vCondition = "2-4"
    arrCondition = Split(vCondition, "-")
    
    If Selection.Cells.Value >= arrCondition(0) And _
       Selection.Cells.Value <= arrCondition(1) Then
        MsgBox Selection.Cells.Value & " в диапазоне " & arrCondition(0) & "-" & arrCondition(1)
    Else
        MsgBox Selection.Cells.Value & " НЕ в диапазоне " & arrCondition(0) & "-" & arrCondition(1)
    End If
End Sub
Bape}l{ka вне форума Ответить с цитированием
Старый 31.10.2011, 15:21   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Dim arrCondition() As Integer, vCondition As String
Если я правильно помню нельзя в одном и том же DIМ указывать разнотипные переменные.
Разнеси их в разные описания, на разных строках.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.10.2011, 15:25   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Split возвращает текстовый массив, поэтому arrCondition должен быть объявлен или "arrCondition() As String", или никак, т.е."As Variant".
Если Вы хотите превратить текст в числа, то As String не пройдет, и надо добавить цикл:
Код:
    Dim arrCondition, vCondition As String, i as long
    
    vCondition = "2-4"
    arrCondition = Split(vCondition, "-")
    for i=0 to ubound(arrcondition):arrcondition(i)=cdbl(arrcondition(i)):next
Не проверял.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 31.10.2011, 15:32   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Такой подход (будет ошибка на нецифрах):
Код:
Sub a__a_b()
    Dim arrCondition, vCondition As String
    
    vCondition = "2-4"
    arrCondition = Split(vCondition, "-")
    
    Select Case --Selection.Cells.Value
    Case --arrCondition(0) To --arrCondition(1)
        MsgBox Selection.Cells.Value & " в диапазоне " & arrCondition(0) & "-" & arrCondition(1)
    Case Else
        MsgBox Selection.Cells.Value & " НЕ в диапазоне " & arrCondition(0) & "-" & arrCondition(1)
    End Select
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.10.2011, 15:40   #5
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Кстати, все это будет работать, только если выбрана одна ячейка.
Если выбран диапазон, то Selection.Cells.Value - массив, и опять будет несовпадение типов. Надо делать цикл по массиву или использовать формулу листа с Evaluate.

Попробуйте в окне Immediate
Код:
?evaluate("AND(A1:B6>=1,A1:B6<=4)")
Вместо A1:B6 подставьте Selection.Address, вместо 1 и 4 - arrCondition(0) и arrCondition(1).
В этом случае превращать текст в числа не нужно.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 31.10.2011 в 15:49.
Казанский вне форума Ответить с цитированием
Старый 31.10.2011, 16:01   #6
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

Hugo121, спасибо, работает! )) правда я не понимаю, что это:
Код:
--Selection.Cells.Value
но оно работает! )))

Казанский
, вобщем я так и думала, что split разбивает как текст, только не знала, как записать, чтобы переводилось в числа. Ваш способ не работает, к сожалению
Bape}l{ka вне форума Ответить с цитированием
Старый 31.10.2011, 16:28   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

"--" - это бинарное отрицание, погуглите. Превращает текст в число, FALSE в 0 и т.д.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 31.10.2011, 17:31   #8
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

>Ваш способ не работает, к сожалению
Да, действительно, не хочет тип менять. Однако, так:
Код:
Sub a__a()
    Dim arrCondition() As String, vCondition As String, frm As String
    
    vCondition = "2-4"
    arrCondition = Split(vCondition, "-")
    frm = Replace$("AND(~>=@,~<=#)", "~", Selection.Areas(1).Address)
    frm = Replace$(frm, "@", arrCondition(0))
    frm = Replace$(frm, "#", arrCondition(1))
    MsgBox IIf(Evaluate(frm), "в диапазоне", "НЕ в диапазоне")
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 01.11.2011, 12:17   #9
Bape}l{ka
Форумчанин
 
Аватар для Bape}l{ka
 
Регистрация: 25.05.2011
Сообщений: 249
По умолчанию

спасибо, Казанский! подсмотрела для себя несколько интересных штук)))
Bape}l{ka вне форума Ответить с цитированием
Старый 01.11.2011, 13:09   #10
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

до кучи
Код:
Private Const j As String = "2-4"

Sub io()
Dim v, x(1) As Integer
v = Split(j, "-")
x(0) = v(0): x(1) = v(1)
With ActiveCell
    If .Value >= x(0) Then
        If .Value <= x(1) Then
            MsgBox "Ячейка " & .Address & " в диапазоне " & j: Exit Sub
        End If
    End If
    MsgBox "Ячейка " & .Address & " НЕ в диапазоне " & j
End With
End Sub
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Type mismatch in expression SlavaSH БД в Delphi 24 02.05.2012 09:19
type mismatch in reduclaration Monomah Помощь студентам 2 14.03.2011 18:13
Ошибка 26 Type mismatch. Mambakremen Помощь студентам 4 04.12.2010 18:30
Data type mismatch???!!! b.grigorev Помощь студентам 17 16.08.2010 08:37
Эта надоедливая ошибка: Type mismatch expresion :( artemavd БД в Delphi 8 25.06.2009 17:21