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

Case statement nested in WITH Statement not selecting a case

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

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

的时间值内

这是代码,它执行但不 select 一个案例,我无法找出我的错误。此外,如果在 With statement 中执行这 3 个 case 语句,因为我在 with 语句内的单元格“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

将评论总结为答案:

  • Case TimeValue("11:21 PM") To TimeValue("7:20 AM") 不起作用,因为在使用 To 时,较小的值应该在前。也许只是将“Shift 1”逻辑移动到 Case Else.
  • 更重要的是,Now 包括今天的日期,即它同时包含日期和时间部分。要仅获取时间组件,您可以执行以下操作:
Dim T1 As Double
T1 = Now - Date