Страницы: 1
RSS
Запретить ввод более 2ух знаков после запятой
 
Добрый день, товарищи.
Прошу подсказать в каком направлении думать и помочь с написанием кода вроде бы простой задачи.
Необходимо запретить ввод более двух знаков после запятой в определенный столбец таблицы.
В приложенном примере необходимо, чтобы при вводе в столбец "B" более 2х знаков после запятой выводилось сообщение с ошибкой.

А также 2 дополнительных вопроса из другой области:
почему только два? Давайте уж весь список непонятностей в эту тему... Ознакомьтесь с правилами форума [МОДЕРАТОР]

Заранее благодарю за помощь и с наступившим Новым Годом всех! ;)  
 
Может лучше сразу макросом округлять до нужного кол-ва знаков?
Согласие есть продукт при полном непротивлении сторон
 
1 В проверку данных =B2*100=INT(B2*100)
2.1 - проверку данных на нужную область.
2.2 - поищите защиту от редактирования
По вопросам из тем форума, личку не читаю.
 
Макрос. Как просили в файле. В модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Columns("B")) Is Nothing And Target.Count = 1 Then
    If IsNumeric(Target) Then
        If Len(Target.Text) - Len(Int(Target)) > 3 Then
            Application.EnableEvents = False
            Target = Empty
            MsgBox "Слишком много знаков после запятой!"
        End If
    End If
End If
Application.EnableEvents = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 

Цитата
Sanja написал:
сразу макросом округлять
над пользователем надо глумится,  -  как бывает на сайтах для оплаты картой, Номер карты неверн и поле очищается :-)

По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал: над пользователем надо глумится
:D . В файле реализовано
Согласие есть продукт при полном непротивлении сторон
 
Sanja, БМВ спасибо за помощь!
Но, в приведенных вами способах при копировании диапазона в столбец B, защита от ввода знаков после запятой не срабатывает. Хотя если копировать только одну ячейку, защита работает.
Метод Sanja мне кажется все таки изящнее, за счет возможности вывода определенного сообщения, указывающего на тип ошибки.
 
Цитата
Vurrex написал:
за счет возможности вывода определенного сообщения, указывающего на тип ошибки
ну это не совсем так.
Я сообщение в проверке данных не ставил специального, хоть возможность и есть. Оставил это вам.
А вот если плюсы и минусы смотреть, то в VBA можно обработать  в том числе и вставку нескольких значений, но работает это только там где макросы разрешены. Проверка данных работает всегда и её проще настроить, перенести, для простого пользователя. Так что у каждого решения есть своя ниша.
По вопросам из тем форума, личку не читаю.
 
Цитата
Vurrex написал: при копировании диапазона в столбец B, защита от ввода знаков после запятой не срабатывает
В макросе это ограничение прописано специально, т.к. в изначальных условиях этого не звучало (вставка диапазона). Попробуйте в файле скопировать желтый диапазон в столбец B
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cl As Range, rngAddress$
On Error Resume Next
If Not Intersect(Target, Columns("B")) Is Nothing Then
    Application.EnableEvents = False
    For Each cl In Target
        If IsNumeric(cl.Value) Then
            If Len(cl.Text) - Len(Int(cl.Value)) > 3 Then
                cl.Value = Empty
                rngAddress = IIf(rngAddress = Empty, cl.Address, rngAddress & ", " & cl.Address)
            End If
        End If
    Next
End If
If rngAddress <> Empty Then MsgBox "В ячейку(и): " & rngAddress & " введено слишком много знаков после запятой!"
Application.EnableEvents = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
ну и в качестве реабилитации проверки данных
По вопросам из тем форума, личку не читаю.
 
Sanja, БМВ еще раз спасибо за доработку решения.
Буду теперь изучать их, чтобы не задавать больше такие вопросы. :)
Еще раз огромное спасибо.
 
Цитата
Vurrex написал: чтобы не задавать больше такие вопросы
Вопрос как вопрос, лучше многих на форуме. А при изучении, от них вообще никуда не денетесь :) . Так что не стесняйтесь
Согласие есть продукт при полном непротивлении сторон
 
Добрый день.
Извините за глупый вопрос.
Попробовал прикрутить макрос от Sanja под свои нужды, но выяснил, что макрос не работает ячейками в формате "числовой".
Т.е. если перевести ячейки в столбце "В" в файле из сообщения #9 в формат "числовой" то макрос не работает.

Добавил две строчки и всё заработало:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cl As Range, rngAddress$

On Error Resume Next
[B:B].SpecialCells(xlCellTypeConstants, 1).NumberFormat = "General"'добавленная строка
If Not Intersect(Target, Columns("B")) Is Nothing Then
    Application.EnableEvents = False
    For Each cl In Target
        If IsNumeric(cl.Value) Then
            If Len(cl.Text) - Len(Int(cl.Value)) > 3 Then
                cl.Value = Empty
                rngAddress = IIf(rngAddress = Empty, cl.Address, rngAddress & ", " & cl.Address)
            End If
        End If
    Next
End If
If rngAddress <> Empty Then MsgBox "В ячейку(и): " & rngAddress & " введено слишком много знаков после запятой!"
Application.EnableEvents = True
[B:B].SpecialCells(xlCellTypeConstants, 1).NumberFormat = "0.000"'добавленная строка
End Sub
Я правильно мыслю или нет?
 
Цитата
mamalot написал: но выяснил, что макрос не работает ячейками в формате "числовой".
Странно. У меня все работает независимо от формата. В т.ч. и Числовым, даже если он настроен на большее чем два кол-во знаков после запятой
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх