Форма ввода чисел из текстбокса.

Автор Amator, 10 мая 2014, 13:28

Amator

Здравствуйте. Есть форма ввода числовых значений на лист. Если заполнить все текстбоксы - работает. Если хотя б один текстбокс без числа - ошибка. Что нужно сделать, чтобы не было ошибки?

[вложение удалено администратором]

Администратор

Amator, что означают квадратные скобки:?
[TextBox1]

Amator


Администратор

Amator, что означает эта строка:?
        .Cells(iLastRow, "I") = CDbl(Format([TextBox1], "0.0"))

Поместить в ячейку, в столбце "I" текст из формы, из элемента "TextBox1"? Или что-то другое?

Amator

Да, поместить в ячейку, в столбец "I" число (например 4,561)  из формы, из элемента "TextBox1". В данных текстбоксах будут только числа (типа 0,000 или 00,000).

Администратор

Amator, удалите из макроса квадратные скобки и снова выложите форму на Форуме.
Я не использую вокруг элементов управления квадратные скобки, поэтому не понимаю, что это такое.

Amator

Удалил.

[вложение удалено администратором]

Администратор

Amator, что должно попасть в Excel-ячейку, если в текстбоксе пусто?

Amator

Ячейка должна остатся пустой.

Администратор

Внёс изменения в макрос.

[вложение удалено администратором]

Amator

Еще вопрос. Данные заносятся на лист после выхода из формы. Что нужно сделать, что б заносились после нажатия кнопки ВВОД, не закрывая форму?

Администратор

Можно вот это использовать вместо того, что в коде:

    'Взятие данных из текстбоксов в массив, это упростит макрос.
    For i = 1 To UBound(arrMy) Step 1
        'Имя у текстобокса должно начинаться словом "TextBox"
            'или нужно внести изменения в макрос.
        'Если в текстбоксе пусто, то помещение в элемента массива "arrMy" пустой строки.
            'Эта пустая строка встанет в Excel.
        If Me.Controls("TextBox" & i).Text <> "" Then
            arrMy(i) = CDbl(Format(Me.Controls("TextBox" & i).Text, "0.0"))
        End If
    Next i
   

Администратор

Amator, в файле "Module1", в процедуре "ShowMainForm", у вас есть:
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

Зачем Вы используете эти команды?

Amator

Команды убрал. Все заработало как надо. Спасибо за помощь!

Администратор

Amator, вообще, команда:
Application.ScreenUpdating = False

используется, чтобы не обновлялись данные на мониторе. Это делается для двух целей:

  • для ускорения работы макроса. Например, эта команда необходима при скрытии Excel-строк, чтобы макрос быстро работал;
  • чтобы на мониторе не мерцало, чтобы пользователю было удобно.
Команда:
Application.DisplayAlerts = False

используется, чтобы не отображались какие-нибудь сообщения программы "Excel". Например, если Вы будете удалять Excel-лист, на котором есть данные, то появится сообщение. Вот эта команда скроет такое сообщение.