【问题标题】:vba inputBox: Alternative Solutions on “cancel” and “OK” with an empty textboxvba inputBox:带有空文本框的“取消”和“确定”的替代解决方案
【发布时间】:2020-01-30 18:05:02
【问题描述】:

出于某种原因,这两个问题(Q1Q2)给出的解决方案是关于如何区分输入框的“取消”和“使用空字符串确定”在特定代码中并不总是有效我的。到目前为止,我无法重现该问题,因此我正在寻找其他解决方案。

在我的场景中,输入框会弹出一个从其他地方获得的默认值。到目前为止,我只需要通过输入框更改此值,因此对if len(inputboxString) = 0 then 的简单检查以确定是否按下了cancel 运行良好。现在我遇到了需要“清除”现有默认值的情况。由于上述原因,我试图避免使用StrPtr

这是目前工作的代码(只要我不需要使用输入框来删除值,因为 'strInputBox = ""' 是为取消事件保留的,我想避免使用 'strPtr ')。

Dim strSomeStringFromSomewhere as String
strSomeStringFromSomewhere  = someSubThatGetsTheStringValueFromSomeWhere

Dim strInputBox As String
strInputBox = InputBox(Prompt:="Edit/Delete Value", Title:="Title", Default:=strSomeStringFromSomewhere)

If strInputBox = "" then
    'do nothing cause cancel was pressed
    else
    someSubThatWritesTheChangedStringBackToItsOrigin strInputBox 
    End If

使用的值通常是一些字母数字字符串,例如d939d8ej3.

欢迎任何关于不同用户友好方法的提示/想法。 (用户是指使用输入框的人,而不是实现/维护代码的人)。

【问题讨论】:

  • 如果您使用Application.Inputbox,您可以测试TypeName(returnValue) - 如果它是布尔值 (False),则用户按下取消。如果您说这并不总是适合您,那么自定义 UserForm 似乎是可行的方法。
  • @TimWilliams 是的,谢谢,自定义用户表单是我的 B 计划......我想我还是问了,也许是这样。有一个可行的解决方法的想法。
  • Application.Inputbox 应该可以正常工作 - 我从未见过失败...
  • @TimWilliams 对,谢谢...完全忘记了那个。使用inputBox = Application.InputBox(...),我通过inputBox = false 捕获取消并通过inputBox = "" 捕获“空”输入?!
  • 将返回值声明为 Variant 并检查 TypeName(theValue) - 如果它是“布尔值”(值为 False),则用户按下取消 - 否则他们按下确定。

标签: vba


【解决方案1】:

我想出了一个很好的解决方法,它也应该适用于许多其他情况。在我的情况下,单个或多个空格不是有效条目。而且由于无论如何我都必须摆脱前空间和后空间,所以我只使用trim(strInputBox) 这将“清除”我的价值。

所以用户只需在输入框中输入一个空格,这对于原型来说已经足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2016-10-24
    • 2017-08-27
    • 1970-01-01
    • 2016-07-11
    • 2020-09-10
    • 2020-08-29
    相关资源
    最近更新 更多