【发布时间】:2020-01-30 18:05:02
【问题描述】:
出于某种原因,这两个问题(Q1、Q2)给出的解决方案是关于如何区分输入框的“取消”和“使用空字符串确定”在特定代码中并不总是有效我的。到目前为止,我无法重现该问题,因此我正在寻找其他解决方案。
在我的场景中,输入框会弹出一个从其他地方获得的默认值。到目前为止,我只需要通过输入框更改此值,因此对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