【发布时间】: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