【问题标题】:Case statement nested in WITH Statement not selecting a case嵌套在 WITH 语句中的案例语句未选择案例
【发布时间】:2020-12-13 10:50:59
【问题描述】:

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

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

这是代码,它执行但没有选择案例,我无法弄清楚我的错误。此外,如果无论如何要在 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
  • 但更重要的是,T1 = Now = 这里的问题是Now 包含日期部分。你必须自己抽出时间。
  • @BigBen 我已对Case TimeValue("11:21 PM") To TimeValue("7:20 AM") 进行了调整,并将其替换为Case Else
  • Dim T1 As Double, T1 = Now - Date.

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


【解决方案1】:

将 cmets 总结为答案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多