excel - 如何在VBA的if语句中使用<>(输入框)
问题描述
在输入框中,我试图让用户只输入某些文本,在这种情况下,每周、每月、每季度、每半年或每年。这似乎很容易,但我只是不知道我哪里出错了。
Do
frequency = InputBox("Please enter your savings frequency.")
If frequency <> "weekly" or "monthly" or "quarterly" or "semiannually" or "annually" Then
MsgBox ("Must be weekly, monthly, quarterly, semiannually, or annually .")
End If
Loop While frequency <> weekly" or "monthly" or "quarterly" or "semiannually" or "annually"
解决方案
您有许多预定义的项目,您需要检查您的输入是否是这些项目之一。这是字典的经典案例。
例如
Private SavingsFrequency as Scripting.Dictionary
' Later in your Module
If SavingsFrequency Is Nothing Then PopulateSavingsFrequency
Do
Dim mySavingFrequency as String
mySavingFrequency = InputBox("Please enter your savings frequency.")
If SavingFrequency.Exists(LCase$(mySavingFrequency)) Then Exit Do
MsgBox ("Must be one of: " & GetSavingsFrequencyList())
Loop
' Remainder of code
Public Sub PopulateSavingsFrequency()
Set SavingsFrequency = New Scripting.DIctionary
With SavingsFrequency
.Add .Count, "weekly"
.Add .Count, "monthly"
.Add .Count, "quarterly"
.Add .Count, "semiannually"
.add .Count, "annually"
end with
End Function
Private Function GetSavingFrequencyList()
Dim myKey as Variant
Dim myList As String
myString=vbNullString
For Each myKey in SavingFrequency
myList = myList & "," & SavingsFrequency.Item(myKey)
Next
GetSavingFrequencyList=myList
End Sub
您可以使用替代字典,例如Kvp(键值对的缩写(我用 C# 编写的用于我自己的教化),它可以让您大大简化上面的代码。
Private SavingsFrequency as Kvp
' Later in your Module
If SavingsFrequency Is Nothing Then PopulateSavingsFrequency
Do
Dim mySavingFrequency as String
mySavingFrequency = InputBox("Please enter your savings frequency.")
If SavingFrequency.HoldsValue(LCase$(mySavingFrequency)) Then Exit Do
MsgBox ("Must be one of: " & SavingFrequency.GetValuesAsString)
Loop
' Remainder of code
Public Sub PopulateSavingsFrequency()
Set SavingsFrequency = New Kvp
SavingsFrequency.AddByIndexFromArray split("weekly,monthly,quarterly,semiannually,annually")
End Sub
推荐阅读
- ms-access - MS Access VBA 下载附件 Mkdir 路径不存在
- aurelia - 如何观察/订阅 Aurelia Store 中的状态变化?
- r - 消除R中数据框中的重复日期
- android - 如何仅覆盖某些 API 级别的可绘制对象
- f# - 通过 Visual Studio 测试适配器运行测试时如何设置 Expecto 配置属性
- python - 使用递归时的意外结果
- asp.net-mvc - 实体框架几个具有相同模型的一对多
- javascript - 使用 Pipe Angular 比较两个日期
- kubernetes - podaffinity 可以安排两个 pod 在同一个节点上运行吗?
- reactjs - 如何找到 i18next 丢失的密钥