Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Как правильно задать значение перезаписи ячейки? IF - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как правильно задать значение перезаписи ячейки? IF (Макросы/Sub)
Как правильно задать значение перезаписи ячейки? IF
Amon Дата: Среда, 25.04.2018, 10:48 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброе утро форумчане
У меня есть код тест, да\ нет\ отмена, сохрянается значение на другой лист в пересечение строки и столбца с датой за что спасибо огромное "Mikael"
Как мне правильно написать проверку пустая конечная ячейка для сохранения или нет, если нет то спрашивать перезаписать ли значение, а он почему-то вместо перезаписи возвращает 6 и 7 то есть да или нет)

[vba]
Код

Sub MfoMacro1()
Dim rCell As Range
Dim a
    a = MsgBox("************* ?", vbYesNoCancel, "**********")
        Dim Message, Title, Default, MyValue
            Message = "Введите описание "
            Title = "Данные "
            Default = "Введите"
With Results
    If .Cells.Find(test.[c2]) Is Nothing Then
        .Columns("D").Insert xlRight, xlFormatFromRightOrBelow
            .Range("D8:D21").Interior.Color = RGB(120, 7, 7)
                .[d6].Value = "Фактический результат"
                    .[d4].Value = test.[a4]
                        .[d5].Value = test.[a6]
                    .[d3].Value = test.[a8]
                .[d4].Resize(2).Borders.Weight = xlMedium
            .[d7].Value = test.[c2]
    End If
        Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn)
End With
If IsEmpty(rCell) = True Then
    With rCell
        If a = vbYes Then
                        With shp1.Fill
                    .ForeColor.RGB = RGB(12, 110, 45)
                        End With
            .Value = "Ошибок нет"
            .Interior.Color = vbGreen
                    shp2.Visible = msoCTrue
                    arrow2.Visible = msoCTrue
                    arrow3.Visible = msoCTrue
                    shp15.Visible = msoCTrue
                    shp16.Visible = msoCTrue
        ElseIf a = vbNo Then
            MyValue = inputbox(Message, Title, Default)
            If MyValue = "" Then
            Exit Sub
        End If
                With shp1.Fill
            .ForeColor.RGB = RGB(120, 7, 7)
                End With
                    shp2.Visible = msoFalse
                    arrow2.Visible = msoFalse
                    arrow3.Visible = msoFalse
                    shp15.Visible = msoFalse
                    shp16.Visible = msoFalse
                    .Value = MyValue
                    .Interior.Color = 65535
        Else
        End If
End With
Else
b = MsgBox("Результат тестирования данного пункта по этой дате уже есть, Перезаписать?", vbYesNo, "Внимание")
If b = vbYes Then
With rCell
.Value = a
End With
Else
Exit Sub
End If
End If
End Sub
[/vba]
 
Ответить
СообщениеДоброе утро форумчане
У меня есть код тест, да\ нет\ отмена, сохрянается значение на другой лист в пересечение строки и столбца с датой за что спасибо огромное "Mikael"
Как мне правильно написать проверку пустая конечная ячейка для сохранения или нет, если нет то спрашивать перезаписать ли значение, а он почему-то вместо перезаписи возвращает 6 и 7 то есть да или нет)

[vba]
Код

Sub MfoMacro1()
Dim rCell As Range
Dim a
    a = MsgBox("************* ?", vbYesNoCancel, "**********")
        Dim Message, Title, Default, MyValue
            Message = "Введите описание "
            Title = "Данные "
            Default = "Введите"
With Results
    If .Cells.Find(test.[c2]) Is Nothing Then
        .Columns("D").Insert xlRight, xlFormatFromRightOrBelow
            .Range("D8:D21").Interior.Color = RGB(120, 7, 7)
                .[d6].Value = "Фактический результат"
                    .[d4].Value = test.[a4]
                        .[d5].Value = test.[a6]
                    .[d3].Value = test.[a8]
                .[d4].Resize(2).Borders.Weight = xlMedium
            .[d7].Value = test.[c2]
    End If
        Set rCell = Intersect(.Rows(8), .Cells.Find(test.[c2]).EntireColumn)
End With
If IsEmpty(rCell) = True Then
    With rCell
        If a = vbYes Then
                        With shp1.Fill
                    .ForeColor.RGB = RGB(12, 110, 45)
                        End With
            .Value = "Ошибок нет"
            .Interior.Color = vbGreen
                    shp2.Visible = msoCTrue
                    arrow2.Visible = msoCTrue
                    arrow3.Visible = msoCTrue
                    shp15.Visible = msoCTrue
                    shp16.Visible = msoCTrue
        ElseIf a = vbNo Then
            MyValue = inputbox(Message, Title, Default)
            If MyValue = "" Then
            Exit Sub
        End If
                With shp1.Fill
            .ForeColor.RGB = RGB(120, 7, 7)
                End With
                    shp2.Visible = msoFalse
                    arrow2.Visible = msoFalse
                    arrow3.Visible = msoFalse
                    shp15.Visible = msoFalse
                    shp16.Visible = msoFalse
                    .Value = MyValue
                    .Interior.Color = 65535
        Else
        End If
End With
Else
b = MsgBox("Результат тестирования данного пункта по этой дате уже есть, Перезаписать?", vbYesNo, "Внимание")
If b = vbYes Then
With rCell
.Value = a
End With
Else
Exit Sub
End If
End If
End Sub
[/vba]

Автор - Amon
Дата добавления - 25.04.2018 в 10:48
_Boroda_ Дата: Среда, 25.04.2018, 11:27 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Все просто - у Вас в самом начале кода написано
[vba]
Код
a = MsgBox("************* ?", vbYesNoCancel, "**********")
[/vba]
Другими словами - Вы присваиваете переменной "а" результат ответа на MsgBox - "Да" или "Нет"
А в самом конце у Вас написано
[vba]
Код
With rCell
.Value = a
End With
[/vba]
Другими словами - Вы присваиваете ячейке те самые "Да" или "Нет". А Вам нужно присвоить то значение, которое нужно - или MyValue, или "Ошибок нет"

Без файла довольно сложно, но общий принцип такой


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВсе просто - у Вас в самом начале кода написано
[vba]
Код
a = MsgBox("************* ?", vbYesNoCancel, "**********")
[/vba]
Другими словами - Вы присваиваете переменной "а" результат ответа на MsgBox - "Да" или "Нет"
А в самом конце у Вас написано
[vba]
Код
With rCell
.Value = a
End With
[/vba]
Другими словами - Вы присваиваете ячейке те самые "Да" или "Нет". А Вам нужно присвоить то значение, которое нужно - или MyValue, или "Ошибок нет"

Без файла довольно сложно, но общий принцип такой

Автор - _Boroda_
Дата добавления - 25.04.2018 в 11:27
StoTisteg Дата: Среда, 25.04.2018, 11:36 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код

Else
Exit Sub
[/vba]
лишние строки, там и так ничего не делается.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение[vba]
Код

Else
Exit Sub
[/vba]
лишние строки, там и так ничего не делается.

Автор - StoTisteg
Дата добавления - 25.04.2018 в 11:36
Amon Дата: Среда, 25.04.2018, 11:42 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Другими словами - Вы присваиваете ячейке те самые "Да" или "Нет". А Вам нужно присвоить то значение, которое нужно - или MyValue, или "Ошибок нет"

в этом и проблема, как одно значение присвоить я понимаю, а как сделать так чтобы он если да возвращал "ошибок нет" а если нет то возвращал мое значение из Inputbox'a , да/нет я имею ввиду в первом MsgBox'e .
 
Ответить
Сообщение
Другими словами - Вы присваиваете ячейке те самые "Да" или "Нет". А Вам нужно присвоить то значение, которое нужно - или MyValue, или "Ошибок нет"

в этом и проблема, как одно значение присвоить я понимаю, а как сделать так чтобы он если да возвращал "ошибок нет" а если нет то возвращал мое значение из Inputbox'a , да/нет я имею ввиду в первом MsgBox'e .

Автор - Amon
Дата добавления - 25.04.2018 в 11:42
StoTisteg Дата: Среда, 25.04.2018, 11:47 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код

With rCell
.Value = IIf(a=vbYes,"ошибок нет",MyValue)
End With
[/vba]


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение[vba]
Код

With rCell
.Value = IIf(a=vbYes,"ошибок нет",MyValue)
End With
[/vba]

Автор - StoTisteg
Дата добавления - 25.04.2018 в 11:47
_Boroda_ Дата: Среда, 25.04.2018, 11:49 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Без файла довольно сложно
. И Ваша последняя фраза не совсем понятна. По крайней мере мне
Попробую догадаться. Вы про это?
[vba]
Код
If b = vbYes Then
rCell.Value = "Ошибок нет"
Else
rCell.Value = MyValue
End If
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Без файла довольно сложно
. И Ваша последняя фраза не совсем понятна. По крайней мере мне
Попробую догадаться. Вы про это?
[vba]
Код
If b = vbYes Then
rCell.Value = "Ошибок нет"
Else
rCell.Value = MyValue
End If
[/vba]

Автор - _Boroda_
Дата добавления - 25.04.2018 в 11:49
Amon Дата: Среда, 25.04.2018, 12:00 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
With rCell
.Value = IIf(a=vbYes,"ошибок нет",MyValue)
End With

и так
[vba]
Код

If b = vbYes Then
rCell.Value = "Ошибок нет"
Else
rCell.Value = MyValue
End If
[/vba]
Так InputBox не появляется и возвращает ""


Сообщение отредактировал Amon - Среда, 25.04.2018, 12:05
 
Ответить
Сообщение
With rCell
.Value = IIf(a=vbYes,"ошибок нет",MyValue)
End With

и так
[vba]
Код

If b = vbYes Then
rCell.Value = "Ошибок нет"
Else
rCell.Value = MyValue
End If
[/vba]
Так InputBox не появляется и возвращает ""

Автор - Amon
Дата добавления - 25.04.2018 в 12:00
_Boroda_ Дата: Среда, 25.04.2018, 12:04 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16666
Репутация: 6478 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я не понимаю Ваших хотелок. Может, так?
[vba]
Код
rCell.Value = IIf(a=vbYes,"ошибок нет",inputbox(Message, Title, Default))
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЯ не понимаю Ваших хотелок. Может, так?
[vba]
Код
rCell.Value = IIf(a=vbYes,"ошибок нет",inputbox(Message, Title, Default))
[/vba]

Автор - _Boroda_
Дата добавления - 25.04.2018 в 12:04
Amon Дата: Среда, 25.04.2018, 12:11 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я не понимаю Ваших хотелок. Может, так?

Прошу прощения за то что я выражаюсь очень скудно. Нужно чтобы если я нажимаю в первом боксе да или нет была проверка пустая ячейка или нет, если нет то бокс второй спрашивает перезаписать или нет
Если да то тогда он копируется ответ первого бокса ( или ошибок нет или значение из инпут бокса) А получается пока что или возвращает 6\7, или при нажатии нет в первом боксе не появляется инпут бокс
Все равно спасибо вам большое. Буду искать дальше.
 
Ответить
Сообщение
Я не понимаю Ваших хотелок. Может, так?

Прошу прощения за то что я выражаюсь очень скудно. Нужно чтобы если я нажимаю в первом боксе да или нет была проверка пустая ячейка или нет, если нет то бокс второй спрашивает перезаписать или нет
Если да то тогда он копируется ответ первого бокса ( или ошибок нет или значение из инпут бокса) А получается пока что или возвращает 6\7, или при нажатии нет в первом боксе не появляется инпут бокс
Все равно спасибо вам большое. Буду искать дальше.

Автор - Amon
Дата добавления - 25.04.2018 в 12:11
StoTisteg Дата: Среда, 25.04.2018, 12:44 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Так InputBox не появляется и возвращает ""

Значит не выполняется условие [vba]
Код
IsEmpty(rCell) = True
[/vba]полагая, что Вы не сделали элементарной ошибки, ответив на первый запрос "Да", предлагаю написать просто [vba]
Код
rCell.Value=""
[/vba].

Любой кусок кода нужно сувать в теги. Поправил Вам
Борода


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Среда, 25.04.2018, 16:25
 
Ответить
Сообщение
Так InputBox не появляется и возвращает ""

Значит не выполняется условие [vba]
Код
IsEmpty(rCell) = True
[/vba]полагая, что Вы не сделали элементарной ошибки, ответив на первый запрос "Да", предлагаю написать просто [vba]
Код
rCell.Value=""
[/vba].

Любой кусок кода нужно сувать в теги. Поправил Вам
Борода

Автор - StoTisteg
Дата добавления - 25.04.2018 в 12:44
Amon Дата: Среда, 25.04.2018, 13:46 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
(вариант, что Вы настолько глупы, что на первый запрос отвечаете "Да", я исключил). Не извращайтесь, пишите просто

Простите, я вас не понял.
 
Ответить
Сообщение
(вариант, что Вы настолько глупы, что на первый запрос отвечаете "Да", я исключил). Не извращайтесь, пишите просто

Простите, я вас не понял.

Автор - Amon
Дата добавления - 25.04.2018 в 13:46
Pelena Дата: Среда, 25.04.2018, 13:51 | Сообщение № 12
Группа: Админы
Ранг: Местный житель
Сообщений: 19167
Репутация: 4412 ±
Замечаний: ±

Excel 365 & Mac Excel
StoTisteg, прошу Вас выражаться более политкорректно. Не надо переходить на личности


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеStoTisteg, прошу Вас выражаться более политкорректно. Не надо переходить на личности

Автор - Pelena
Дата добавления - 25.04.2018 в 13:51
StoTisteg Дата: Среда, 25.04.2018, 14:15 | Сообщение № 13
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Простите, я вас не понял.

[vba]
Код
rCell.Value=""
[/vba]
точно проверяет, что в ячейке нет никакого значения, а вот
[vba]
Код
IsEmpty(rCell)
[/vba]
даст False в самых неожиданных вариантах вроде гиперссылки, например...


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
Простите, я вас не понял.

[vba]
Код
rCell.Value=""
[/vba]
точно проверяет, что в ячейке нет никакого значения, а вот
[vba]
Код
IsEmpty(rCell)
[/vba]
даст False в самых неожиданных вариантах вроде гиперссылки, например...

Автор - StoTisteg
Дата добавления - 25.04.2018 в 14:15
Amon Дата: Среда, 25.04.2018, 15:26 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 65
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
rCell.Value=""

точно проверяет, что в ячейке нет никакого значения, а вот
IsEmpty(rCell)

даст False в самых неожиданных вариантах вроде гиперссылки, например...


Спасибо большое я вас понял.
 
Ответить
Сообщение
rCell.Value=""

точно проверяет, что в ячейке нет никакого значения, а вот
IsEmpty(rCell)

даст False в самых неожиданных вариантах вроде гиперссылки, например...


Спасибо большое я вас понял.

Автор - Amon
Дата добавления - 25.04.2018 в 15:26
StoTisteg Дата: Среда, 25.04.2018, 16:25 | Сообщение № 15
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
StoTisteg, прошу Вас выражаться более политкорректно. Не надо переходить на личности

Прошу прощения, исправил.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
StoTisteg, прошу Вас выражаться более политкорректно. Не надо переходить на личности

Прошу прощения, исправил.

Автор - StoTisteg
Дата добавления - 25.04.2018 в 16:25
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как правильно задать значение перезаписи ячейки? IF (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!