嵌套在WITH语句中的Case语句未选择案例

时间:2020-08-24 18:57:06

标签: vba datetime case with-statement select-case

我试图根据在工作簿的单元格D2中找到的输入时间值,将单元格“ H2”设置为“ Shift 1”,“ Shift 2”或“ Shift 3”,这是一个屏幕截图示例:

enter image description here

所以单元格H2为Shift 1,因为它在Case TimeValue("11:21 PM") To TimeValue("7:20 AM")的时间值内

这是代码,它可以执行但不选择案例,我无法弄清楚我的错误。另外,如果我在With statement内执行这3个case语句,因为我在语句中设置单元格“ D2”中的输入时间,我将不胜感激!

.Range("D2").Value = Now  'Inputs the Time Value as the current Time                                                                                                                        
        
.Range("D2").NumberFormat = "h:mm:ss AM/PM"  'Formats the Time value as a Time entry                                                                                                      

代码可以在下面找到:

Sub ReportGeneratorTest()

    Application.ScreenUpdating = False                                                                                                         'This speeds up the macro by hiding what the macro is doing
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    
    Set wb3 = Workbooks.Open(Filename:="\\Report Generator\SetupSheet Report Generator.xlsm")   'Sets the Workbook variable as the database filepath
    
    With wb3.Sheets("All Requests Sheet 1")                                                                                                    'With the "Changes" sheet do the following

        .Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow                                                                             'Inserts a new row in [3] with the same format as below
        
        .Range("A2").Value = Sheet1.Range("K112").Value                                                 'Inputs the typed in Operator name into the Report Generator
        
        .Range("B2").Value = Sheet1.Range("H4").Value                                                                                                       'Inputs the "Key" inside cell "A"  of the new row
        
        .Range("C2").Value = Now                                                                                                                            'Inputs the Date Submitted value as the current date
        
        .Range("C2").NumberFormat = "dd-mmm-yyyy"                                                                                                           'Formats the Date Submitted value as a date entry
        
        .Range("D2").Value = Now                                                                                                                            'Inputs the Time Value as the current Time
        
        .Range("D2").NumberFormat = "h:mm:ss AM/PM"                                                                                                         'Formats the Time value as a Time entry
        
        .Range("E2").Value = UCase(Sheet1.Range("E4").Value)                                                                                                'Inputs the Part inside Cell "D" of the new row
        
        .Range("F2").Value = Sheet1.Range("E5").Value                                                                                                       'Inputs the Process inside Cell "E" of the new row
        
        .Range("G2").Value = "IRR 200-2S"
        
    End With
  
    Dim T1 As Date
    
    'T1 = Range("D2").Value
    
    T1 = Now
    
    'Set T1 = Range("D2").Value
        
    Select Case T1
        
        Case TimeValue("7:21 AM") To TimeValue("3:20 PM")
        
         Range("H2").Value = "Shift 2"
        
        Case TimeValue("3:21 PM") To TimeValue("11:20 PM")
        
         Range("H2").Value = "Shift 3"
         
        Case Else 'If the Timevalue is between TimeValue("11:21 PM") To TimeValue("7:20 AM")
        
        Range("H2").Value = "Shift 1"
        
    End Select
    
    wb3.Save                                                                                                                                              'Save the database Workbook
        
    wb3.Close False
    
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True                                                                                                                    'Must be "True" after running the code to be able to Read/Write the Workbook

End Sub

1 个答案:

答案 0 :(得分:1)

将评论汇总为答案:

  • Case TimeValue("11:21 PM") To TimeValue("7:20 AM")不起作用,因为使用To时,较小的值应该首先出现。也许只需将“ Shift 1”逻辑移至Case Else
  • 更重要的是,Now包括今天的日期,即它既包含日期又包含时间。要仅获取时间分量,可以执行以下操作:
Dim T1 As Double
T1 = Now - Date