Разрешить только числа как пользовательские входные значения для Application.InputBox для CommandButton1_Click () - PullRequest
0 голосов
/ 25 сентября 2018

Я борюсь с досадной возможностью того, что пользователи могут вставлять десятичные значения / дробные значения, хотя должны быть разрешены только целые числа.Я пытался использовать KeyAscii (48-57), чтобы проверить, если пользователи вводят номера.Тем не менее, я не могу заставить его работать и ни с некоторыми другими функциями.Пользователь не должен иметь возможность вставлять что-либо кроме числовых значений (от 0 до 9 и до 99).Это относится к "rowNum" в моем прикрепленном коде.У меня все остальное под контролем, но я не могу заставить свой VBA работать для десятичных / дробных значений, вставленных пользователями после нажатия CommandButton_Click ().Я много часов пытался найти решение безуспешно.Вся помощь оценена!

Private Sub CommandButton1_Click()
Dim rowNum As Variant
Dim x As Variant
On Error Resume Next

rowNum = Application.InputBox(Prompt:="Please enter the row from where you want to add new empty rows downwards:", _
                                    Title:="Need to add new empty rows?", Type:=1)

                If (VarType(rowNum) = vbBoolean) And (rowNum = False) Then
                MsgBox "You canceled the event!", vbExclamation, "No Input!"

                ElseIf rowNum = 0 Then
                MsgBox "Smallest allowed row number is 7!", vbExclamation, "Invalid Input!"

                ElseIf rowNum < 0 Then
                MsgBox "Negative values are not allowed!", vbExclamation, "Invalid Input!"

                ElseIf rowNum < 7 Then 
        MsgBox "Smallest allowed row number is 7!!", vbExclamation, "Invalid Input!"

        ElseIf rowNum > 99 Then 
        MsgBox "Highest allowed row number is 99!", vbExclamation, "Invalid Input!"

                              End If
                              If rowNum < 7 Or rowNum > 99 Then End



x = Application.InputBox(Prompt:="Please insert the amount of empty rows that you need:", _
                            Title:="Amount of new rows?", Type:=1)


                If (VarType(x) = vbBoolean) And (x = False) Then
                MsgBox "You canceled the event!", vbExclamation, "No Input!"

                ElseIf x = 0 Then
                MsgBox "Smallest amount of new rows is 2!", vbExclamation, "Invalid Input!"

                ElseIf x < 2 Then
                MsgBox "Smallest amount of new rows is 2!", vbExclamation, "Invalid Input!"

                ElseIf x > 10 Then
                MsgBox "Highest amount of new rows is 10!", vbExclamation, "Invalid Input!"

                              End If
                              If x < 2 Or x > 10 Then End

Rows(rowNum & ":" & rowNum + x - 1).EntireRow.Insert Shift:=xlDown

End Sub

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

добавление еще одного условия elseif

ElseIf x <> Int(x) Then
       MsgBox "Fraction number is not  allowed", vbExclamation, "Invalid Input!"


End if

может решить проблему

0 голосов
/ 25 сентября 2018

объявление в качестве варианта является проблемой, так как примет любой тип ввода.Если вы вместо этого объявите x и RowNum как целые числа, вы избежите этой проблемы.

При этом округляются любые десятичные дроби до целых чисел, и текст встречает ошибку (Тип 13: Несоответствие). Это может быть обработано в обработчике ошибок или пропущено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...