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

Вход

Регистрация

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

 

= Мир MS Excel/Вывод данных числам из текстбоксов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод данных числам из текстбоксов (Макросы/Sub)
Вывод данных числам из текстбоксов
miha_ Дата: Четверг, 10.01.2019, 22:12 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 67
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, уважаемые форумчане.
Тут я нашел нужный мне код vba.
Спасибо создателю.
[vba]
Код
Option Explicit

Private Sub ComboBox1_Change()
ComboBox1.RowSource = "Мастера!a1:a20"
End Sub

Private Sub CommandButton1_Click()
Dim iLastRow As Long
Dim iFoundRng As Range
Dim iBazaSht As Worksheet
Dim iResponse As Byte
    If Me.TextBox1 = "" Then
        MsgBox "Введите информацию в поле 1", vbExclamation, "Ошибка"
        Exit Sub
    End If
    Set iBazaSht = ThisWorkbook.Sheets("База") 'имя листа, куда будем вносить информацию
        Set iFoundRng = iBazaSht.Columns(2).Find(what:=Me.TextBox1.Text, LookAt:=xlWhole) 'ячейка целиком
        'если такая запись уже есть
        If Not iFoundRng Is Nothing Then
            iResponse = MsgBox("Такая запись уже существует. Заменить её?" & vbCr & "Да - заменить старую, Нет - добавить в базу", vbYesNoCancel + vbExclamation, "Внимание!")
            If iResponse = vbYes Then
                With Sheets(iBazaSht.Name)
                    .Cells(iFoundRng.Row, 2) = Me.TextBox1
                    .Cells(iFoundRng.Row, 3) = Me.TextBox2
                    .Cells(iFoundRng.Row, 4) = Me.TextBox3
                    .Cells(iFoundRng.Row, 5) = Me.TextBox4
                    .Cells(iFoundRng.Row, 6) = Me.TextBox5
                    .Cells(iFoundRng.Row, 7) = Me.TextBox6
                    .Cells(iFoundRng.Row, 8) = Me.TextBox7
                    .Cells(iFoundRng.Row, 9) = Me.ComboBox1
                    Me.TextBox1 = ""
                    Me.TextBox2 = ""
                    Me.TextBox3 = ""
                    Me.TextBox4 = ""
                    Me.TextBox5 = ""
                    Me.TextBox6 = ""
                    Me.TextBox7 = ""
                
                End With
                MsgBox "Информация в базе обновлена!", vbInformation, "База"
                Exit Sub
            End If
            If iResponse = vbCancel Then Exit Sub
        End If
    With Sheets(iBazaSht.Name)
        iLastRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
        .Cells(iLastRow, 2) = Me.TextBox1
        .Cells(iLastRow, 3) = Me.TextBox2
        .Cells(iLastRow, 4) = Me.TextBox3
        .Cells(iLastRow, 5) = Me.TextBox4
        .Cells(iLastRow, 6) = Me.TextBox5
        .Cells(iLastRow, 7) = Me.TextBox6
        .Cells(iLastRow, 8) = Me.TextBox7
        .Cells(iLastRow, 9) = Me.ComboBox1
    End With
    Me.TextBox1 = ""
    Me.TextBox2 = ""
    Me.TextBox3 = ""
    Me.TextBox4 = ""
    Me.TextBox5 = ""
    Me.TextBox6 = ""
    Me.TextBox7 = ""
    MsgBox "Информация добавлена в базу!", vbInformation, "База"
End Sub

Private Sub CommandButton2_Click()
    End
End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Мастера!a1:a20"
End Sub
[/vba]
Вопрос, что нужно дописать,чтоб вводимые значения сохранялись как число,а не как текст?
И почему при нажатии enter в форме курсор переходит до 4 ячейки по порядку,а потом на кнопку добавить, а не перемещается дальше?
Благодарю за комментарии.
К сообщению приложен файл: 0268264.xls(48.5 Kb)


Сообщение отредактировал miha_ - Пятница, 11.01.2019, 11:22
 
Ответить
СообщениеДобрый день, уважаемые форумчане.
Тут я нашел нужный мне код vba.
Спасибо создателю.
[vba]
Код
Option Explicit

Private Sub ComboBox1_Change()
ComboBox1.RowSource = "Мастера!a1:a20"
End Sub

Private Sub CommandButton1_Click()
Dim iLastRow As Long
Dim iFoundRng As Range
Dim iBazaSht As Worksheet
Dim iResponse As Byte
    If Me.TextBox1 = "" Then
        MsgBox "Введите информацию в поле 1", vbExclamation, "Ошибка"
        Exit Sub
    End If
    Set iBazaSht = ThisWorkbook.Sheets("База") 'имя листа, куда будем вносить информацию
        Set iFoundRng = iBazaSht.Columns(2).Find(what:=Me.TextBox1.Text, LookAt:=xlWhole) 'ячейка целиком
        'если такая запись уже есть
        If Not iFoundRng Is Nothing Then
            iResponse = MsgBox("Такая запись уже существует. Заменить её?" & vbCr & "Да - заменить старую, Нет - добавить в базу", vbYesNoCancel + vbExclamation, "Внимание!")
            If iResponse = vbYes Then
                With Sheets(iBazaSht.Name)
                    .Cells(iFoundRng.Row, 2) = Me.TextBox1
                    .Cells(iFoundRng.Row, 3) = Me.TextBox2
                    .Cells(iFoundRng.Row, 4) = Me.TextBox3
                    .Cells(iFoundRng.Row, 5) = Me.TextBox4
                    .Cells(iFoundRng.Row, 6) = Me.TextBox5
                    .Cells(iFoundRng.Row, 7) = Me.TextBox6
                    .Cells(iFoundRng.Row, 8) = Me.TextBox7
                    .Cells(iFoundRng.Row, 9) = Me.ComboBox1
                    Me.TextBox1 = ""
                    Me.TextBox2 = ""
                    Me.TextBox3 = ""
                    Me.TextBox4 = ""
                    Me.TextBox5 = ""
                    Me.TextBox6 = ""
                    Me.TextBox7 = ""
                
                End With
                MsgBox "Информация в базе обновлена!", vbInformation, "База"
                Exit Sub
            End If
            If iResponse = vbCancel Then Exit Sub
        End If
    With Sheets(iBazaSht.Name)
        iLastRow = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
        .Cells(iLastRow, 2) = Me.TextBox1
        .Cells(iLastRow, 3) = Me.TextBox2
        .Cells(iLastRow, 4) = Me.TextBox3
        .Cells(iLastRow, 5) = Me.TextBox4
        .Cells(iLastRow, 6) = Me.TextBox5
        .Cells(iLastRow, 7) = Me.TextBox6
        .Cells(iLastRow, 8) = Me.TextBox7
        .Cells(iLastRow, 9) = Me.ComboBox1
    End With
    Me.TextBox1 = ""
    Me.TextBox2 = ""
    Me.TextBox3 = ""
    Me.TextBox4 = ""
    Me.TextBox5 = ""
    Me.TextBox6 = ""
    Me.TextBox7 = ""
    MsgBox "Информация добавлена в базу!", vbInformation, "База"
End Sub

Private Sub CommandButton2_Click()
    End
End Sub

Private Sub TextBox1_Change()

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Мастера!a1:a20"
End Sub
[/vba]
Вопрос, что нужно дописать,чтоб вводимые значения сохранялись как число,а не как текст?
И почему при нажатии enter в форме курсор переходит до 4 ячейки по порядку,а потом на кнопку добавить, а не перемещается дальше?
Благодарю за комментарии.

Автор - miha_
Дата добавления - 10.01.2019 в 22:12
vikttur Дата: Четверг, 10.01.2019, 22:23 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2921
Репутация: 525 ±
Замечаний: 0% ±

Правый клик на форме (не на элементе формы), в меню выбрать Tab Order
С помощью кнопок Move Up/Move Down перемещать элементы списка. По окончанию обязательно подтвердить изменения (кнопка ОК).
Можно в свойствах каждого элемента задать Tab Index, но это не так удобно.

Элементы формы в полях ввода имеют текстовый формат.Для вывода на лист числовых значений текст преобразовать в число:
[vba]
Код
.Cells(iLastRow, 2) = Val(TextBox.Text) ' целое (Integer)
.Cells(iLastRow, 2) = CDbl(TextBox.Text) ' дробное (Double)
[/vba]
А чтобы избежать появления ошибки, перед преобразованием в Double нужно проверить, можно ли текст преобразовать в число.
[vba]
Код
If IsNumeric(TextBox1.Text) Then
       .Cells(iLastRow, 2) = CDbl(Me.TextBox1)
Else     
      MsgBox "БЯДА!!!", 64, ""
End If
[/vba]
С Val проще - преобразовывается левая числовая часть. Если справа есть текст - игнорируется. Если слева не число, в ячейку запишется ноль.


Сообщение отредактировал vikttur - Четверг, 10.01.2019, 23:03
 
Ответить
СообщениеПравый клик на форме (не на элементе формы), в меню выбрать Tab Order
С помощью кнопок Move Up/Move Down перемещать элементы списка. По окончанию обязательно подтвердить изменения (кнопка ОК).
Можно в свойствах каждого элемента задать Tab Index, но это не так удобно.

Элементы формы в полях ввода имеют текстовый формат.Для вывода на лист числовых значений текст преобразовать в число:
[vba]
Код
.Cells(iLastRow, 2) = Val(TextBox.Text) ' целое (Integer)
.Cells(iLastRow, 2) = CDbl(TextBox.Text) ' дробное (Double)
[/vba]
А чтобы избежать появления ошибки, перед преобразованием в Double нужно проверить, можно ли текст преобразовать в число.
[vba]
Код
If IsNumeric(TextBox1.Text) Then
       .Cells(iLastRow, 2) = CDbl(Me.TextBox1)
Else     
      MsgBox "БЯДА!!!", 64, ""
End If
[/vba]
С Val проще - преобразовывается левая числовая часть. Если справа есть текст - игнорируется. Если слева не число, в ячейку запишется ноль.

Автор - vikttur
Дата добавления - 10.01.2019 в 22:23
_Boroda_ Дата: Четверг, 10.01.2019, 22:29 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14501
Репутация: 5789 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Еще можно вот так написать
[vba]
Код
.Cells(iLastRow, 2) = --Me.TextBox1.Value
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕще можно вот так написать
[vba]
Код
.Cells(iLastRow, 2) = --Me.TextBox1.Value
[/vba]

Автор - _Boroda_
Дата добавления - 10.01.2019 в 22:29
miha_ Дата: Четверг, 10.01.2019, 22:40 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 67
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
vikttur, добрый вечер. Спасибо большое.
 
Ответить
Сообщениеvikttur, добрый вечер. Спасибо большое.

Автор - miha_
Дата добавления - 10.01.2019 в 22:40
miha_ Дата: Четверг, 10.01.2019, 22:41 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 67
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, добрый вечер.
Спасибо. Я правильно понял,вы использовали бинарное отрицание?
 
Ответить
Сообщение_Boroda_, добрый вечер.
Спасибо. Я правильно понял,вы использовали бинарное отрицание?

Автор - miha_
Дата добавления - 10.01.2019 в 22:41
_Boroda_ Дата: Четверг, 10.01.2019, 23:49 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14501
Репутация: 5789 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Совершенно верно
Исправьте название темы согласно п.2 Правил форума. Как-то более конкретно напишите


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСовершенно верно
Исправьте название темы согласно п.2 Правил форума. Как-то более конкретно напишите

Автор - _Boroda_
Дата добавления - 10.01.2019 в 23:49
_Boroda_ Дата: Пятница, 11.01.2019, 09:10 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14501
Репутация: 5789 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
miha_, причем здесь Акс вообще? Вам что нужно? Чтобы из текстбоксов данные выводились на лист числами, правильно? Вот так тему и нужно назвать


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщениеmiha_, причем здесь Акс вообще? Вам что нужно? Чтобы из текстбоксов данные выводились на лист числами, правильно? Вот так тему и нужно назвать

Автор - _Boroda_
Дата добавления - 11.01.2019 в 09:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод данных числам из текстбоксов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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