Подбить сумму

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

550953, что ж, не буду Вас переубеждать. Хотя IMHO
Всеже проще делать тупо ручками
это вряд ли. А второй выложенный файл ПодбитьСумму.zip решает полностью Вашу проблему. Попробуйте :rolleyes:
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

550953,

.... Однажды, при регистрации на одном из сайтов,
требования к логину и паролю перечислялись в виде предложения,
а когда не выполнялось одно из условий - то соответствующие слова в предложении выделялись красным цветом...

в коде ниже попытка повторить это решение,
выделите диапазон ячеек с выражениями и выполните макрос.
и результаты, где неправильно произведено вычисление - станут красные, а которые правильные - синие.

1500+90=1590-600=990-501=490+


код является черновым прошу не пинать :)
... и только проверяет выражение, не исправляя его.

Код: Выделить всё

Private Sub CommandButton1_Click()

Dim Len_str As Integer
Dim Start_exp As Integer
Dim End_exp As Integer


Dim iCell As Range
Dim r1 As Range

'1500+90=1590-600=990-500=490-
For Each iCell In Selection

Set r1 = iCell

Len_str = Len(r1.Value)

'Очистка цвета всего теста
r1.Characters(Start:=1, Length:=Len_str).Font.ColorIndex = 0

Start_exp = 1

For i = 1 To Len_str

    'Поиск очередного выражения
    If Mid(r1.Value, i, 1) = "=" Then
    
            'Поиск конца выражения
            For j = i To Len_str
                If Mid(r1.Value, j, 1) = "+" Or Mid(r1.Value, j, 1) = "-" Then
                    End_exp = j - 1
                    GoTo 1
                End If
            Next j
            End_exp = Len_str 'когда конец выражения не определен знаком действия [1500+90=1590-600=990-500=490]

1:
    
        'Проверка выражения
        dfdf = Mid(r1.Value, Start_exp, End_exp - Start_exp + 1)
        d = Application.Evaluate(Mid(r1.Value, Start_exp, End_exp - Start_exp + 1))
        
        'Выделение результата
        If d = True Then
                r1.Characters(Start:=i + 1, Length:=End_exp - i).Font.ColorIndex = 5
                    Else
                r1.Characters(Start:=i + 1, Length:=End_exp - i).Font.ColorIndex = 3
        End If
        Start_exp = i + 1
    
    End If



Next i


Next

End Sub
Ответить