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

Вход

Регистрация

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

 

= Мир MS Excel/TextBox и разделитель десятичных дробей - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » TextBox и разделитель десятичных дробей (Макросы/Sub)
TextBox и разделитель десятичных дробей
KuklP Дата: Воскресенье, 10.09.2017, 23:42 | Сообщение № 21
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Т.е. я отключил Ваше творчество, вызывающее ошибку, но Вы утверждали что
Не работает.
мой код, так?
из диалога значения в ячейку вносятся, хотя в поле textbox они отображаются с точкой
как - так? Еще раз посмотрите скрин из №16. Там запятые в боксах.
А теперь еще перечитайте топик - какое отношение имеет Ваш пост №19 к обсуждаемому вопросу?
Как правильно задать формат для TextBox, чтобы значение воспринималось, как число и формула на листе работала? И как правильно установить ограничения, что бы нельзя было ввести ничего, кроме числа с десятичными значениями в поле TextBox?
Во все остальное я не вникал и не собираюсь, это за рамками темы. Ищите ошибки в своем коде. Или еще проще для Вас(ну сложновато Вам пока такие проекты), может стоит обратиться в раздел Фриланс?


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеТ.е. я отключил Ваше творчество, вызывающее ошибку, но Вы утверждали что
Не работает.
мой код, так?
из диалога значения в ячейку вносятся, хотя в поле textbox они отображаются с точкой
как - так? Еще раз посмотрите скрин из №16. Там запятые в боксах.
А теперь еще перечитайте топик - какое отношение имеет Ваш пост №19 к обсуждаемому вопросу?
Как правильно задать формат для TextBox, чтобы значение воспринималось, как число и формула на листе работала? И как правильно установить ограничения, что бы нельзя было ввести ничего, кроме числа с десятичными значениями в поле TextBox?
Во все остальное я не вникал и не собираюсь, это за рамками темы. Ищите ошибки в своем коде. Или еще проще для Вас(ну сложновато Вам пока такие проекты), может стоит обратиться в раздел Фриланс?

Автор - KuklP
Дата добавления - 10.09.2017 в 23:42
Stork4ever Дата: Воскресенье, 10.09.2017, 23:58 | Сообщение № 22
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Нет смысла спорить и возражать. Скриншоты с Вашим файлом я выложил. Ваш код тоже работает не корректно.

Однако, тема не раскрыта. Просьба заключается в помощи получить рабочий код, а не отключении мешающих простому решению частей кода.

Я не против фриланса, только мало кто хочет разгребать чужой код, к великому моему сожалению. Есть желающие? Пишите в личку, договоримся.


Сообщение отредактировал Stork4ever - Понедельник, 11.09.2017, 00:09
 
Ответить
СообщениеНет смысла спорить и возражать. Скриншоты с Вашим файлом я выложил. Ваш код тоже работает не корректно.

Однако, тема не раскрыта. Просьба заключается в помощи получить рабочий код, а не отключении мешающих простому решению частей кода.

Я не против фриланса, только мало кто хочет разгребать чужой код, к великому моему сожалению. Есть желающие? Пишите в личку, договоримся.

Автор - Stork4ever
Дата добавления - 10.09.2017 в 23:58
doober Дата: Понедельник, 11.09.2017, 02:06 | Сообщение № 23
Группа: Друзья
Ранг: Ветеран
Сообщений: 947
Репутация: 323 ±
Замечаний: 0% ±

Excel 2010
A3=СУММ(A1:A2) - не вычисляет

Все считает, главное мышку подвести к текстбоксу справа :D
К сообщению приложен файл: 8785256.xls (53.5 Kb) · 9291472.jpg (20.2 Kb)




Сообщение отредактировал doober - Понедельник, 11.09.2017, 02:07
 
Ответить
Сообщение
A3=СУММ(A1:A2) - не вычисляет

Все считает, главное мышку подвести к текстбоксу справа :D

Автор - doober
Дата добавления - 11.09.2017 в 02:06
Pelena Дата: Понедельник, 11.09.2017, 07:47 | Сообщение № 24
Группа: Админы
Ранг: Местный житель
Сообщений: 19174
Репутация: 4413 ±
Замечаний: ±

Excel 365 & Mac Excel
Тема продублирована во ФРИЛАНСе? Или там другой вопрос?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеТема продублирована во ФРИЛАНСе? Или там другой вопрос?

Автор - Pelena
Дата добавления - 11.09.2017 в 07:47
RAN Дата: Понедельник, 11.09.2017, 09:29 | Сообщение № 25
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Там другой.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТам другой.

Автор - RAN
Дата добавления - 11.09.2017 в 09:29
Stork4ever Дата: Понедельник, 11.09.2017, 09:30 | Сообщение № 26
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013

Все считает, главное мышку подвести к текстбоксу справа


Ваш вариант тоже работает не корректно.
Формула считает, но:
в диалоговом окне не дает установить разделитель десятичных дробей при наборе числа. Вставить число без запятой можно, и потом в середину числа вставить разделитель можно. Но вот сразу набрать число с разделителем не получается. Кроме того в качестве разделителя отображается точка, а не запятая. Но можно заменить на запятую, тогда в диалоговом окне будет отображаться запятая и формула тоже будет считаться. Но если закрыть и открыть диалог, то снова будет точка.
 
Ответить
Сообщение

Все считает, главное мышку подвести к текстбоксу справа


Ваш вариант тоже работает не корректно.
Формула считает, но:
в диалоговом окне не дает установить разделитель десятичных дробей при наборе числа. Вставить число без запятой можно, и потом в середину числа вставить разделитель можно. Но вот сразу набрать число с разделителем не получается. Кроме того в качестве разделителя отображается точка, а не запятая. Но можно заменить на запятую, тогда в диалоговом окне будет отображаться запятая и формула тоже будет считаться. Но если закрыть и открыть диалог, то снова будет точка.

Автор - Stork4ever
Дата добавления - 11.09.2017 в 09:30
Stork4ever Дата: Понедельник, 11.09.2017, 09:31 | Сообщение № 27
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Тема продублирована во ФРИЛАНСе? Или там другой вопрос?

Там другой вопрос. Прошу тему не закрывать.
 
Ответить
Сообщение
Тема продублирована во ФРИЛАНСе? Или там другой вопрос?

Там другой вопрос. Прошу тему не закрывать.

Автор - Stork4ever
Дата добавления - 11.09.2017 в 09:31
and_evg Дата: Понедельник, 11.09.2017, 09:41 | Сообщение № 28
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Stork4ever, попробуйте так[vba]
Код
Function EnterNumbersOnly(intKeyAscii As MSForms.ReturnInteger, MyTextBox As Object) As Integer

'                    ВВОД ТОЛЬКО ЦИФР, ЗНАК "-", ","

    On Error Resume Next
    Select Case intKeyAscii
        Case 48 To 57, 8        ' цифры 0 - 9 и <Backspace> (эти символы всегда разрешены)
            EnterNumbersOnly = intKeyAscii
            If Not (IsNumeric(Left(MyTextBox.Value, MyTextBox.SelStart) & Chr(EnterNumbersOnly) _
                        & Right(MyTextBox.Value, Len(MyTextBox) - MyTextBox.SelStart))) Then
                EnterNumbersOnly = 0        ' проверка на предмет типо- 12%3 или 1-23
                Shell "Cmd.exe /c echo " & Chr(7), vbHide
            End If
        Case 44, 46        ' обработка десятичного разделителя (44 - код запятой, 46 - код точки)
            EnterNumbersOnly = Asc(Application.DecimalSeparator)        'Меняем разделитель на системный
            If InStr(1, MyTextBox.Text, Application.DecimalSeparator) Then
                EnterNumbersOnly = 0        ' вторую запятую нельзя
                Shell "Cmd.exe /c echo " & Chr(7) & Chr(7), vbHide
            End If
        Case 45        ' дефис (минус перед числом)
            If InStr(1, MyTextBox.Text, "-") Then
                EnterNumbersOnly = 0        ' второй минус нельзя
                Shell "Cmd.exe /c echo " & Chr(7), vbHide
            Else
                MyTextBox.Text = "-" & MyTextBox.Text
                EnterNumbersOnly = 0
            End If
        Case Else
            EnterNumbersOnly = 0        ' остальные символы запрещены
            Shell "Cmd.exe /c echo " & Chr(7), vbHide
    End Select
End Function
[/vba]
К сообщению приложен файл: Test3.xls (54.5 Kb)


Сообщение отредактировал and_evg - Понедельник, 11.09.2017, 10:01
 
Ответить
СообщениеStork4ever, попробуйте так[vba]
Код
Function EnterNumbersOnly(intKeyAscii As MSForms.ReturnInteger, MyTextBox As Object) As Integer

'                    ВВОД ТОЛЬКО ЦИФР, ЗНАК "-", ","

    On Error Resume Next
    Select Case intKeyAscii
        Case 48 To 57, 8        ' цифры 0 - 9 и <Backspace> (эти символы всегда разрешены)
            EnterNumbersOnly = intKeyAscii
            If Not (IsNumeric(Left(MyTextBox.Value, MyTextBox.SelStart) & Chr(EnterNumbersOnly) _
                        & Right(MyTextBox.Value, Len(MyTextBox) - MyTextBox.SelStart))) Then
                EnterNumbersOnly = 0        ' проверка на предмет типо- 12%3 или 1-23
                Shell "Cmd.exe /c echo " & Chr(7), vbHide
            End If
        Case 44, 46        ' обработка десятичного разделителя (44 - код запятой, 46 - код точки)
            EnterNumbersOnly = Asc(Application.DecimalSeparator)        'Меняем разделитель на системный
            If InStr(1, MyTextBox.Text, Application.DecimalSeparator) Then
                EnterNumbersOnly = 0        ' вторую запятую нельзя
                Shell "Cmd.exe /c echo " & Chr(7) & Chr(7), vbHide
            End If
        Case 45        ' дефис (минус перед числом)
            If InStr(1, MyTextBox.Text, "-") Then
                EnterNumbersOnly = 0        ' второй минус нельзя
                Shell "Cmd.exe /c echo " & Chr(7), vbHide
            Else
                MyTextBox.Text = "-" & MyTextBox.Text
                EnterNumbersOnly = 0
            End If
        Case Else
            EnterNumbersOnly = 0        ' остальные символы запрещены
            Shell "Cmd.exe /c echo " & Chr(7), vbHide
    End Select
End Function
[/vba]

Автор - and_evg
Дата добавления - 11.09.2017 в 09:41
Udik Дата: Понедельник, 11.09.2017, 14:26 | Сообщение № 29
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
еще вариант
[vba]
Код

Private Sub TextBox1_Change()
    If IsNumeric(Me.TextBox1.Text) Then
        Sheets("Лист1").Range("A1") = TextBox1
    Else
        Me.TextBox1.Text = Val(Me.TextBox1.Text)
    End If
End Sub

Private Sub TextBox2_Change()
        If IsNumeric(Me.TextBox1.Text) Then
            Sheets("Лист1").Range("A2") = TextBox2
        Else
            Me.TextBox2.Text = Val(Me.TextBox2.Text)
        End If
End Sub

[/vba]
К сообщению приложен файл: 6859627.xlsm (25.2 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Понедельник, 11.09.2017, 14:28
 
Ответить
Сообщениееще вариант
[vba]
Код

Private Sub TextBox1_Change()
    If IsNumeric(Me.TextBox1.Text) Then
        Sheets("Лист1").Range("A1") = TextBox1
    Else
        Me.TextBox1.Text = Val(Me.TextBox1.Text)
    End If
End Sub

Private Sub TextBox2_Change()
        If IsNumeric(Me.TextBox1.Text) Then
            Sheets("Лист1").Range("A2") = TextBox2
        Else
            Me.TextBox2.Text = Val(Me.TextBox2.Text)
        End If
End Sub

[/vba]

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

Excel 2013
К сообщению приложен файл: Test3.xls


Не дает с первого раза ввести десятичное число. Потом можно подставить запятую в целое число, а сразу набрать - не реагирует на разделитель. В какой-то момент посыпались ошибки.
 
Ответить
Сообщение
К сообщению приложен файл: Test3.xls


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

Автор - Stork4ever
Дата добавления - 11.09.2017 в 15:05
Stork4ever Дата: Понедельник, 11.09.2017, 15:09 | Сообщение № 31
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
К сообщению приложен файл: 6859627.xlsm(25Kb)


диалоговое окно отрабатывает отлично. Дробные числа вводятся сразу с запятой, все хорошо, но формула в ячейке A3 при этом не считает. Если вручную ввести те же цифры но в ячейки A1 и A2? то в A3 автосумма считает.
 
Ответить
Сообщение
К сообщению приложен файл: 6859627.xlsm(25Kb)


диалоговое окно отрабатывает отлично. Дробные числа вводятся сразу с запятой, все хорошо, но формула в ячейке A3 при этом не считает. Если вручную ввести те же цифры но в ячейки A1 и A2? то в A3 автосумма считает.

Автор - Stork4ever
Дата добавления - 11.09.2017 в 15:09
Stork4ever Дата: Понедельник, 11.09.2017, 15:15 | Сообщение № 32
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Уважаемые форумчане, обратите, пожалуйста, внимание на тот факт, что у диалогового окна есть обратная связь в виде:
[vba]
Код
Sub UserForm_Initialize()
With Sheets("Лист1")
    Me.TextBox1.Value = .Range("A1").Value
    Me.TextBox2.Value = .Range("A2").Value
    Me.Label3.Caption = "СУММ(A1:A2) = " & Format(.Range("A3"), "0.00")
    Me.Label4.Caption = "A1 + A2 = " & Format(.Range("A4"), "0.00")
End With
End Sub
[/vba]

Которая запускается, как при запуске диалога, так и при изменениях значений. И тут, видимо, нужно сделать тоже конвертацию в правильный формат. Посмотрите по шагово, как работает макрос. Получается, что после внесения изменения в текстбокс идет запись в ячейку, а потом снова инициализация и запись из ячейки в текстбокс. Возможно именно здесь основная проблема?!.

обратная связь организована в ЭтаКнига:
[vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    UFI 'Запускаем проверку изменений в таблицах для получения актуальных данных в диалоговом окне.
End Sub
[/vba]

где в модуле прописано:
[vba]
Код
Sub UFI()
   UserForm1.UserForm_Initialize
End Sub
[/vba]

ВАЖНО!!! Данные могут вноситься как в ячейки A1 и A2, так и через диалоговое окно. При этом происходит синхронизация между данными в таблице и диалоговым окном.


Сообщение отредактировал Stork4ever - Понедельник, 11.09.2017, 15:18
 
Ответить
СообщениеУважаемые форумчане, обратите, пожалуйста, внимание на тот факт, что у диалогового окна есть обратная связь в виде:
[vba]
Код
Sub UserForm_Initialize()
With Sheets("Лист1")
    Me.TextBox1.Value = .Range("A1").Value
    Me.TextBox2.Value = .Range("A2").Value
    Me.Label3.Caption = "СУММ(A1:A2) = " & Format(.Range("A3"), "0.00")
    Me.Label4.Caption = "A1 + A2 = " & Format(.Range("A4"), "0.00")
End With
End Sub
[/vba]

Которая запускается, как при запуске диалога, так и при изменениях значений. И тут, видимо, нужно сделать тоже конвертацию в правильный формат. Посмотрите по шагово, как работает макрос. Получается, что после внесения изменения в текстбокс идет запись в ячейку, а потом снова инициализация и запись из ячейки в текстбокс. Возможно именно здесь основная проблема?!.

обратная связь организована в ЭтаКнига:
[vba]
Код
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    UFI 'Запускаем проверку изменений в таблицах для получения актуальных данных в диалоговом окне.
End Sub
[/vba]

где в модуле прописано:
[vba]
Код
Sub UFI()
   UserForm1.UserForm_Initialize
End Sub
[/vba]

ВАЖНО!!! Данные могут вноситься как в ячейки A1 и A2, так и через диалоговое окно. При этом происходит синхронизация между данными в таблице и диалоговым окном.

Автор - Stork4ever
Дата добавления - 11.09.2017 в 15:15
KuklP Дата: Понедельник, 11.09.2017, 15:28 | Сообщение № 33
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Я Вам еще в № 21 написал, что ошибки вызывает Ваш код. Не хотите его менять - дело Ваше, но перестаньте тогда впустую тратить время форумчан. Вам дали с десяток работоспособных кодов обработки текстбоксов. Все остальное(еще раз повторяю!) ЗА рамками этой темы.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеЯ Вам еще в № 21 написал, что ошибки вызывает Ваш код. Не хотите его менять - дело Ваше, но перестаньте тогда впустую тратить время форумчан. Вам дали с десяток работоспособных кодов обработки текстбоксов. Все остальное(еще раз повторяю!) ЗА рамками этой темы.

Автор - KuklP
Дата добавления - 11.09.2017 в 15:28
Udik Дата: Понедельник, 11.09.2017, 20:02 | Сообщение № 34
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Stork4ever, если не хотите код править, то вместо СУММ такую массивку примените
Код

{=СУММ(ЗНАЧЕН(A1:A2)) }

Просто СУММ не будет у Вас работать, т.к. при любом изменении идет форматирование ячеек под текстовую строку.
Вот немассивка
Код

=СУММПРОИЗВ(--A1:A2)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Понедельник, 11.09.2017, 20:20
 
Ответить
СообщениеStork4ever, если не хотите код править, то вместо СУММ такую массивку примените
Код

{=СУММ(ЗНАЧЕН(A1:A2)) }

Просто СУММ не будет у Вас работать, т.к. при любом изменении идет форматирование ячеек под текстовую строку.
Вот немассивка
Код

=СУММПРОИЗВ(--A1:A2)

Автор - Udik
Дата добавления - 11.09.2017 в 20:02
Мир MS Excel » Вопросы и решения » Вопросы по VBA » TextBox и разделитель десятичных дробей (Макросы/Sub)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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