2017-05-09 57 views
0

我目前可以根据当前日期和时间更改Active X微调器的范围(“Device1”)。确定行号和日期的时间决定了列号。单元格(B3:H3)使用Today()函数返回日期,单元格(A3)每10秒返回当前时间。我已经使用了Offset()函数,但是现在我意识到每次变量fDate或fTime发生变化时,微调器值都需要重置为0。这些是我目前正在使用的替补。理想情况下,只有在fDate和fTime已经从之前的值改变以避免每10秒重置一次值时,我希望能够调用Sub SpinnerReset()对变量运行宏

也许一种方法来保留以前的值和比较/运行,如果不相等?我不确定这是否可能。

Sub Device1_Change() 
Dim fDate, fTime As Integer 
'Change fDate based on day' 
    If Range("B3") = Date Then fDate = 0 
    If Range("C3") = Date Then fDate = 16 
    If Range("D3") = Date Then fDate = 32 
    If Range("E3") = Date Then fDate = 48 
    If Range("F3") = Date Then fDate = 64 
    If Range("G3") = Date Then fDate = 80 
    If Range("H3") = Date Then fDate = 96 
'Change fTime based on TimeStamp' 
    If Range("A3") > TimeValue("09:59:59") And Range("A3") < TimeValue("11:00:00") Then fTime = 0 
    If Range("A3") > TimeValue("10:59:59") And Range("A3") < TimeValue("12:00:00") Then fTime = 1 
    If Range("A3") > TimeValue("11:59:59") And Range("A3") < TimeValue("13:00:00") Then fTime = 2 
    If Range("A3") > TimeValue("12:59:59") And Range("A3") < TimeValue("14:00:00") Then fTime = 3 
    If Range("A3") > TimeValue("13:59:59") And Range("A3") < TimeValue("15:00:00") Then fTime = 4 
    If Range("A3") > TimeValue("14:59:59") And Range("A3") < TimeValue("16:00:00") Then fTime = 5 
    If Range("A3") > TimeValue("15:59:59") And Range("A3") < TimeValue("17:00:00") Then fTime = 6 
    If Range("A3") > TimeValue("16:59:59") And Range("A3") < TimeValue("18:00:00") Then fTime = 7 
    If Range("A3") > TimeValue("17:59:59") And Range("A3") < TimeValue("19:00:00") Then fTime = 8 
    If Range("A3") > TimeValue("18:59:59") And Range("A3") < TimeValue("20:00:00") Then fTime = 9 
    If Range("A3") > TimeValue("19:59:59") And Range("A3") < TimeValue("21:00:00") Then fTime = 10 
    If Range("A3") > TimeValue("20:59:59") And Range("A3") < TimeValue("22:00:00") Then fTime = 11 
    If Range("A3") > TimeValue("21:59:59") And Range("A3") < TimeValue("23:00:00") Then fTime = 12 

'Select cell for spinner' 
Worksheets("Count").Range("C4").Offset(fTime, fDate).Value = Device1.Value 
End Sub 

Sub SpinnerReset() 
Device1.Value = 0 
End Sub 
+0

你怎么知道'fDate'或'fTime'何时改变了?你是否想看看'B3:H3'中的单元是否改变,并且更新'fDate'? – BruceWayne

+0

fDate和fTime的当前格式正常工作。由微调器生效的单元格会随着当前时间和日期的更新而改变,但主要问题是一旦新细胞正在生效,微调器仍然继续以前的值。一旦它所影响的单元格发生变化,我希望微调器的值重置。如果你知道更简单的格式来改变受影响的单元格,我会接受想法。 – AvidAdventurer

+0

哪些单元格会发生变化,当它们发生变化时,是否要让宏重新运行? – BruceWayne

回答

0

为了详细说明我的评论,您的代码如下所示。请注意,我只是制作了一个表格名称(存储)和单元格(A1)。它可以是任何你想要的,如果你喜欢,你可以隐藏这张表。

编辑:简写fDatefTime代码,并且还包括存储单元中的小时。

Private Sub Device1_Change() 

    Dim fDate As Long, fTime As Long 

    'Change the sheet and cell to wherever you store the date 
    'Note that the date will be stored as an Excel datecode 
    With Sheets("Storage").Range("A1") 
     If .Value <> Format(Now, "dd/mm/yy hh") Then 
      SpinnerReset 
      .Value = Format(Now, "dd/mm/yy hh") 
     End If 
    End With 

    fDate = Evaluate("16*(MATCH(TODAY(),B3:H3,0)-1)") 
    fTime = Evaluate("FLOOR(A3,1/24)*24-10") 

    Sheets("Count").Range("C4").Offset(fTime, fDate).Value = Me.Device1.Value 

End Sub 
+0

我明白你的去向。我认为你是对的如果他们要负责调用Sub SpinnerReset(),我可能需要在独立的子文件中运行'fDate'和'fTime'的更新。我不确定那是怎么回事。 – AvidAdventurer

+0

@AvidAdventurer'fDate'和'fTime'不会改变,我只是没有输入。它将被放置在这里'其余的代码' – tigeravatar

+0

@AvidAdventurer我压缩了你的'fDate'和'fTime'赋值代码,并且在存储单元中包含了小时。见编辑的答案。 – tigeravatar