2015-12-12 50 views
0

我試圖去學習Excel中,長話短說一些VBA編程VBA複製列在Excel壓延匹配日期

我使用的Allen Bradley PLC一臺機器,我已經在PLC中創建了一個節目的錄製每小時運行統計,我已經設法讓這些更新到一個Excel工作表中,它每小時上傳24小時。該機器上班時間爲上午6點至下午2點,下午2點至10點,晚上10點至上午6點。在工廠裏,我們每天上午6點到上午6點。

我已經寫了下面的代碼,它從plc複製值並將它們粘貼到匹配的日期,單元格「c10」contains = today()然後在表單2上將值粘貼到日曆日期。

這現在工作正常,但我想改變它,以便在每個日期它包含上午6點到上午6點的價值,而不是24小時值。

我遇到的問題是,單元格c10(今天的日期)將在12am之後更新,因此粘貼目標將會更改。

繼承人我的代碼

Private Sub work_test() 

'set variables 
    Dim Day As Date 
    Dim rfound As Range 
    Dim frow, fcol As Integer 
    Dim sh1, sh2 As Worksheet 

'set sheets 
    Set sh1 = Sheets("sheet1") 
    Set sh2 = Sheets("sheet2") 

'sets day as current day, finds matching day in sheet2 
    Day = sh1.Range("c10") 
      Set rfound = sh2.Range("7:11").Find(Day, LookIn:=xlValues) 

      If Not rfound Is Nothing Then 

       frow = rfound.Row 
       fcol = rfound.Column 

       sh1.Range("c11:c34").Copy sh2.Cells(9, fcol) 
      Else 
       MsgBox "No match found" 


      End If 
'runs timer 
    Call timer 

End Sub 

Sub timer() 
'repeats cell update timer 
Application.OnTime Now + TimeValue("00:01:00"), "work_test" 
End Sub 

希望有人能幫助,而不是尋找一個完整的解決方案,以正確的方向只是有點幫助

感謝

回答

0

這是兩個的許多方面實現你想要的東西:

1.-用C10這個公式代替公式:

= TODAY() + IF(NOW() - TODAY() < TIME(6,0,0) , -1 , 0) 

上面的公式驗證了時間,它少於06:00:00,然後將一個休息到日期。因此,午夜時06分之間的任何事情都會被認爲是前一天

2:在你的代碼替換該行:

Day = sh1.Range("c10") 

與此:

Day = Date + IIf(Time < TimeSerial(6, 0, 0), -1, 0) 

相同點1上面只是說,因爲你使用的是VBA,所以不需要在工作表中將日期作爲公式,那麼可以直接在VBA中獲取機器的日期並從那裏繼續。