【问题标题】:Editing percentage value in Userform TextBox在用户窗体文本框中编辑百分比值
【发布时间】:2016-11-08 21:07:33
【问题描述】:

我正在尝试创建一个文本框,允许用户在我的 Excel-VBA 用户表单中输入 1-5% 之间的百分比。我创建了文本框并添加了代码来限制格式始终显示为百分比。我的问题是,当我尝试通过按退格键来编辑文本框中的默认百分比时,小数点向右移动两个空格,而不是删除任何当前值。下面是我的代码的副本。请注意,文本框未锁定。

Private Sub PV_change()

PV.Text = Format(PV.Value, "Percent")

End Sub

【问题讨论】:

  • 为什么必须让文本框显示%?似乎更可取的是简单地处理相关过程/函数中的用户输入,并在那里进行转换,例如CDbl(PV.Value)/100)
  • @DavidZemens 我认为这没有必要,但如果用户清楚地知道该值为 %,它会使用户表单对用户更直观。
  • 这会让用户更难输入,因为他们必须输入.05才能显示5%
  • 它不会像发布的那样工作。尝试输入 0.05 - 我得到 0.00%.05 这是因为在第一次击键后文本框包含 0.00% 然后在第二个键之后是 0.00%. 不再可作为数字和 Format 失败并返回原始字符串.最好在文本框旁边放一个字符串来表示%,并在别处处理转换
  • @chrisneilsen 我希望我能给你的评论投票+100

标签: excel textbox userform vba


【解决方案1】:

你可以在PV_Exit 过程而不是_Change 过程中编写代码,但我仍然认为你这样自找麻烦:)

Private Sub PV_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    PV.Value = Format(PV.Value, "Percent")
End Sub

【讨论】:

    【解决方案2】:

    我同意之前提出的反对意见,但要展示一个没有错误捕获的简单解决方案,请尝试以下操作:

    Private Sub tbPV_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim dblPV As Double
    ' don't allow backspace
      If KeyCode = Asc(vbBack) Then Exit Sub
    ' Change string to Double value (without percent sign)
      dblPV = CDbl(Replace(Me.tbPV.Text, "%", ""))
    ' Show the formatted result
      Me.tbPV.Text = Format(dblPV, "0.00") & "%"
    

    结束子

    进一步说明 仅将文本框命名为“PV”似乎不是最先进的。添加前缀 - 例如'tb' 或 'txt' - 对你所有的 text boxes 给出了控制原始类型的提示,并且可以为你的代码提供一个易于理解的结构。

    有很多命名约定和不同的意见,但只是给你一个印象看看 Hungarian in VBA okay? 或在 Stack Overflow 的“命名约定”标签中搜索。

    最好的问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-13
      • 2013-09-07
      • 2019-10-09
      • 2015-02-19
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多