isnumeric(textbox.value)和操纵textbox.values进出百分比

时间:2018-06-14 02:30:07

标签: excel vba excel-vba userform

我试图在我的用户表单上“帮助”文本输入框的用户输入百分比。

截至目前,我的输入框将任何输入转换为百分比形式。这意味着键入“6”会将值转换为600%。如下所示

databaseViewer是输入框从

填充的列表(从工作表中获取数据)
Sub pctTextInput(header As String, inputbox As Object)

    If IsNull(databaseViewer.Value) Or inputbox.Text = "" Then
        GoTo 0
    Else
        With Cells(databaseViewerGetSelectedRow, getApplicableColumn(header))
         .Value = inputbox.Text
         .NumberFormat = "0.0%"
        End With
        Exit Sub
    End If
0:
inputbox.Value = ""
End Sub

我现在的问题是我正在尝试

  1. 使用文本框用户输入验证数据值的情况,如果没有返回错误
  2. 我实际上在上面尝试了isnumeric(textbox.value),但它总是在已经有%值的单元格上返回false EVEN

    1. 简化用户输入过程,而不必输入0.6来获得60%;这个人只需输入60即可获得60%(即更直观。)
    2. 为此,我尝试做类似这样的事情,即使我尝试使用CDbl(inputbox.text)或Clng(inputbox.text),也会返回类型不匹配,这使我相信我没有接受过关于格式的教育。文本框,我假设它是String类型。

          Dim x As Long
          x = inputbox.Text / 100
          inputbox.Text = x
      

      编辑:根据@urdearboy的评论更新了仍然返回类型不匹配的新代码

      Sub pctTextInputDUPLICATED(header As String, textbox As Object) 'this TEXTbox will trigger on value change
      
      Dim userEntryOrDefault As Variant
      Dim modifiedUserEntryOrDefault As Variant
      userEntryOrDefault = textbox.Value
      
          If IsNull(databaseViewer.Value) Or textbox.Text = "" Then
              textbox.Value = ""
              Exit Sub
          ElseIf Not IsNumeric(userEntryOrDefault) Then
              textbox.Value = ""
              Exit Sub
          ElseIf userEntryOrDefault <> Cells(databaseViewerGetSelectedRow, getApplicableColumn(header)) Then
              modifiedUserEntryOrDefault = Format(userEntryOrDefault / 100, "percent")
          Else
              With Cells(databaseViewerGetSelectedRow, getApplicableColumn(header))
               .Value = textbox.Text
               .NumberFormat = "0.0%"
              End With
              Exit Sub
          End If
      
      
      End Sub
      Sub userform1_Activate() 'populate with cell value if any
      
          With textbox
              .Value = Format(Cells(databaseViewerGetSelectedRow, getApplicableColumn("Adequacy")), "0.0%")
          End With
      End Sub
      

3 个答案:

答案 0 :(得分:1)

由于我没有按原样运行代码的所有输入,我只是做了一个模拟来解决你的问题,你可以根据需要将逻辑应用到代码中。

1)要测试一个号码,您可以使用Not IsNumeric()

2)要将输入转换为%,只需将输入除以100,然后转换为THAT 百分比。我为一个新的变量(MyNewNum)做了调暗以实现这一点。

3)你应该尽可能避免使用GoTo方法

Sub pctTextInput()

Dim MyNum As Variant, MyNewNum As Variant
MyNum = inputbox("Number Input", "Please Enter a Number")

    If Not IsNumeric(MyNum) Or MyNum = "" Then
        MsgBox "Please Enter A Number, My Dear User", vbCritical
        Exit Sub
    Else
        MsgBox MyNum
        MyNewNum = Format(MyNum / 100, "percent")
        MsgBox MyNewNum
    End If

End Sub

答案 1 :(得分:0)

Application.Inputbox包含Inputbox没有的选项。其中一个选项强制数字输入。

sub getNumber()

    dim n as variant

    n = Application.Inputbox(prompt:="get a number", title:="give me a number", type:=1)

    if n <> "False" then
        debug.print n
    else
        debug.print "you cancelled"
    end if

end sub

答案 2 :(得分:0)

找到解决方案

val(textbox.value)