我正在编写一个脚本,允许用户通过名称或编号输入月份。在下面的语句中,我可以在输入框和行中输入我想要的任何内容:
ElseIf sMonthOfMaintenance = "1" Or "2" Or "3" Or "4" Or "5" Or "6" Or "7" Or "8" Or "9" Or "10" Or "11" Or "12" Then
sMonthOfMaintenanceNumber = sMonthOfMaintenanceNumber
总会触发。我可以在输入框中键入“SREGBswerbwergv”,它仍然会触发该行而不会移动到“Else”语句。我重新启动excel以防万一,它仍然会这样做,但如果我发表评论,那就不行了。完整的代码:
'...and date of report.[BD]
sMonthOfMaintenance = InputBox("What month are you reveiwing?")
'Ending Wizard if Cancelled [BD]
If sMonthOfMaintenance = "" Then
MsgBox "Operation cancelled"
End
End If
'Converting Month to Number for Output File Name [BD]
If UCase(sMonthOfMaintenance) = "JANUARY" Or UCase(sMonthOfMaintenance) = "JAN" Or UCase(sMonthOfMaintenance) = "JAN" Then
sMonthOfMaintenanceNumber = "01"
ElseIf UCase(sMonthOfMaintenance) = "FEBRUARY" Or UCase(sMonthOfMaintenance) = "FEB" Or UCase(sMonthOfMaintenance) = "FEB." Then
sMonthOfMaintenanceNumber = "02"
ElseIf UCase(sMonthOfMaintenance) = "MARCH" Or UCase(sMonthOfMaintenance) = "MAR" Or UCase(sMonthOfMaintenance) = "MAR." Then
sMonthOfMaintenanceNumber = "03"
ElseIf UCase(sMonthOfMaintenance) = "APRIL" Or UCase(sMonthOfMaintenance) = "APR" Or UCase(sMonthOfMaintenance) = "APR." Then
sMonthOfMaintenanceNumber = "04"
ElseIf UCase(sMonthOfMaintenance) = UCase(sMonthOfMaintenance) = "MAY" Or UCase(sMonthOfMaintenance) = "MAY." Then
sMonthOfMaintenanceNumber = "05"
ElseIf sMonthOfMaintenance = "JUNE" Or UCase(sMonthOfMaintenance) = "JUN" Or UCase(sMonthOfMaintenance) = "JUN." Then
sMonthOfMaintenanceNumber = "06"
ElseIf sMonthOfMaintenance = "JULY" Or UCase(sMonthOfMaintenance) = "JUL" Or UCase(sMonthOfMaintenance) = "JUL." Then
sMonthOfMaintenanceNumber = "07"
ElseIf sMonthOfMaintenance = "AUGUST" Or UCase(sMonthOfMaintenance) = "AUG" Or UCase(sMonthOfMaintenance) = "AUG." Then
sMonthOfMaintenanceNumber = "08"
ElseIf sMonthOfMaintenance = "SEPTEMBER" Or UCase(sMonthOfMaintenance) = "SEP" Or UCase(sMonthOfMaintenance) = "SEP." Then
sMonthOfMaintenanceNumber = "09"
ElseIf sMonthOfMaintenance = "OCTOBER" Or UCase(sMonthOfMaintenance) = "OCT" Or UCase(sMonthOfMaintenance) = "OCT." Then
sMonthOfMaintenanceNumber = "10"
ElseIf sMonthOfMaintenance = "NOVEMBER" Or UCase(sMonthOfMaintenance) = "NOV" Or UCase(sMonthOfMaintenance) = "NOV." Then
sMonthOfMaintenanceNumber = "11"
ElseIf sMonthOfMaintenance = "DECEMBER" Or UCase(sMonthOfMaintenance) = "DEC" Or UCase(sMonthOfMaintenance) = "DEC." Then
sMonthOfMaintenanceNumber = "12"
ElseIf sMonthOfMaintenance = "01" Or "02" Or "03" Or "04" Or "05" Or "06" Or "07" Or "08" Or "09" Or "10" Or "11" Or "12" Then
sMonthOfMaintenanceNumber = sMonthOfMaintenanceNumber
Else
MsgBox "Please Enter a Valid Month"
Call Main
End If
答案 0 :(得分:3)
每次像上面的其他人一样,你需要重复整个条件,例如,sMonthOfMaintenance =" 01"或者sMonthOfMaintenance =" 02" ......就像现在一样," 02"评估为TRUE。尝试使用SELECT CASE来缩短语法。我也看到你尝试将数字分配到最后,我不认为你打算这样做。以下是所有这些的示例:
Sub test()
Dim sMonthOfMaintenance As String
Dim sMonthOfMaintenanceNumber As String
sMonthOfMaintenance = InputBox("What month are you reveiwing?")
'Ending Wizard if Cancelled [BD]
If sMonthOfMaintenance = "" Then
MsgBox "Operation cancelled"
GoTo exit_point
End If
'Converting Month to Number for Output File Name [BD]
Select Case UCase(sMonthOfMaintenance)
Case "JANUARY", "JAN", "JAN."
sMonthOfMaintenanceNumber = "01"
Case "FEBRUARY", "FEB", "FEB."
sMonthOfMaintenanceNumber = "02"
'...
Case "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"
sMonthOfMaintenanceNumber = sMonthOfMaintenance
Case Else
MsgBox "Please Enter a Valid Month"
'Call Main
End Select
Debug.Print sMonthOfMaintenanceNumber
exit_point:
End Sub
答案 1 :(得分:1)
您不需要任何 If() 。只需将文本月份转换为日期并从中获取数字月份:
Sub qwerty()
Dim sMonthOfMaintenance As String
Dim sMonthOfMaintenanceNumber As String
sMonthOfMaintenance = Application.InputBox(Prompt:="enter month name ", Type:=2)
sMonthOfMaintenanceNumber = Format(Month(DateValue("1 " & Left(UCase(sMonthOfMaintenance), 3) & " 1992")), "00")
MsgBox sMonthOfMaintenance & vbCrLf & sMonthOfMaintenanceNumber
End Sub
您可以输入以下任何内容:
扬
JAN
一月
JAN点。
JANUARY
一月
如果您还想允许逐个数字的输入,则必须添加一个单独的分支来测试数字输入:
Sub qwerty()
Dim sMonthOfMaintenance As String
Dim sMonthOfMaintenanceNumber As String
sMonthOfMaintenance = Application.InputBox(Prompt:="enter month name ", Type:=2)
If IsNumeric(sMonthOfMaintenance) Then
sMonthOfMaintenanceNumber = Format(CLng(sMonthOfMaintenance), "00")
Else
sMonthOfMaintenanceNumber = Format(Month(DateValue("1 " & Left(UCase(sMonthOfMaintenance), 3) & " 1992")), "00")
End If
MsgBox sMonthOfMaintenance & vbCrLf & sMonthOfMaintenanceNumber
End Sub