我试图在我的用户表单上“帮助”文本输入框的用户输入百分比。
截至目前,我的输入框将任何输入转换为百分比形式。这意味着键入“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
我现在的问题是我正在尝试
我实际上在上面尝试了isnumeric(textbox.value),但它总是在已经有%值的单元格上返回false EVEN
为此,我尝试做类似这样的事情,即使我尝试使用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
答案 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)