vba - VBA if 语句无法正常工作
问题描述
我正在尝试制作一个简单的温度转换器,以便能够在华氏、摄氏和开尔文之间正确切换。代码没有按预期的方式工作。当我从华氏温度到开尔文时,它告诉我它正在使用代码从华氏温度到摄氏温度而不是开尔文。我什至添加了 msgbox 来告诉我什么在拉什么。我还为我的组合框添加了选项。它喜欢在" "
用作字符串时忽略所有内容。我已经尝试使用两者&
并And
让它工作。
Private Sub CommandButton10_Click()
If ComboBox1.Value = Fahrenheit & ComboBox2.Value = Celsius Then
Call FtoC
ElseIf ComboBox1.Value = Celsius & ComboBox2.Value = Fahrenheit Then
Call CtoF
ElseIf ComboBox1.Value = Celsius & ComboBox2.Value = Kelvin Then
Call CtoK
ElseIf ComboBox1.Value = Kelvin & ComboBox2.Value = Celsius Then
Call KtoC
ElseIf ComboBox1.Value = Fahrenheit & ComboBox2.Value = Kelvin Then
Call FtoK
ElseIf ComboBox1.Value = Kelvin & ComboBox2.Value = Fahrenheit Then
Call KtoF
End If
End Sub
这是我的组合框的初始化代码
Private Sub UserForm_Initialize()
Call CallSetting
'change position
Me.StartUpPosition = 0
Me.Top = (Application.Height / 2) - Me.Height / 2
Me.Left = (Application.Width / 2) - Me.Width / 2
With ComboBox1
.AddItem ("Fahrenheit")
.AddItem ("Celsius")
.AddItem ("Kelvin")
End With
With ComboBox2
.AddItem ("Fahrenheit")
.AddItem ("Celsius")
.AddItem ("Kelvin")
End With
TextBox2.Locked = True
End Sub
我的宏定义如下:
Sub FtoC()
TempConverter.TextBox2.Value = (TempConverter.Temp1.Value - 32) * (5 / 9)
MsgBox "I am FtoC"
End Sub
Sub CtoF()
TempConverter.TextBox2.Value = (TempConverter.Temp1.Value * 0.55555) + 32
MsgBox "I am CtoF"
End Sub
Sub CtoK()
TempConverter.TextBox2.Value = TempConverter.Temp1.Value + 273
MsgBox "I am CtoK"
End Sub
Sub KtoC()
TempConverter.TextBox2.Value = TempConverter.Temp1.Value - 273
MsgBox "I am KtoC"
End Sub
Sub FtoK()
TempConverter.TextBox2.Value = ((TempConverter.Temp1.Value - 32) * (5 / 9)) + 273
MsgBox "I am FtoK"
End Sub
Sub KtoF()
TempConverter.TextBox2.Value = ((TempConverter.Temp1.Value - 273) * (5 / 9)) + 32
MsgBox "I am KtoF"
End Sub
解决方案
你可以避免所有这些If Then ElseIf ...
使用CallByName
方法
Private Sub CommandButton10_Click()
CallByName Me, ComboBox1.Value & "To" & ComboBox2.Value, VbMethod
End Sub
只需正确命名(并且更有意义......)您的例程:
Sub FahrenheitToCelsius()
TempConverter.TextBox2.Value = (TempConverter.Temp1.Value - 32) * (5 / 9)
MsgBox "I am FtoC"
End Sub
Sub CelsiusToFahrenheit()
TempConverter.TextBox2.Value = (TempConverter.Temp1.Value * 0.55555) + 32
MsgBox "I am CtoF"
End Sub
Sub CelsiusToKelvin()
TempConverter.TextBox2.Value = TempConverter.Temp1.Value + 273
MsgBox "I am CtoK"
End Sub
Sub KelvinToCelsius()
TempConverter.TextBox2.Value = TempConverter.Temp1.Value - 273
MsgBox "I am KtoC"
End Sub
Sub FahrenheitToKelvin()
TempConverter.TextBox2.Value = ((TempConverter.Temp1.Value - 32) * (5 / 9)) + 273
MsgBox "I am FtoK"
End Sub
Sub KelvinToFarenheit()
TempConverter.TextBox2.Value = ((TempConverter.Temp1.Value - 273) * (5 / 9)) + 32
MsgBox "I am KtoF"
End Sub
推荐阅读
- php - 在 PHP 中获取任何给定年份的第一个星期日
- google-apps-script - 如何按名称查找工作表并通过 Google Script 将其删除?
- excel - 如何将项目随机选择到多个列表中,每个列表都是唯一的?
- javascript - document.querySelector 单击时不从图像中添加标题
- flutter - Dart DateFormat 不自动使用系统的语言环境
- javascript - 有没有办法在使用 JavaScript 创建 Trello 卡时获取它的 ID?
- optimization - 研讨会调度问题建模 - Julia
- qt - 从 QAbstractItemModel 或 QAbstractListModel 创建树型模型
- c# - TcpClient 如何改进原始套接字?
- reactjs - 在输入前三个字符时限制选项加载(react-select)以加快响应时间