VBA Если время между двумя - PullRequest
       6

VBA Если время между двумя

1 голос
/ 17 февраля 2012
i = 1    
For Each cell In Range("D1:D10000")
  If IsEmpty(cell.Value) Then Exit For

  Select Case Range("N" & i).Value
    Case 0 To 40
      startTime  = "13:00"
    Case 40 To 60
      secondTime = Range("V" & i).Value
    Case 60 To 100
      finalTime = Range("V" & i).Value
    Case Else

   End Select

  Dim startTime As Date
  Dim secondTime As Date
  Dim finalTime As Date
  Dim timeRef As Date
  timeRef = Range("V" & i).Value

  If timeRef >= startTime And timeRef < secondTime Then 

  ElseIf timeRef >= secondTime And timeRef < finalTime Then

  ElseIf timeRef > finalTime Then

  End If
  i = i + 1
Next

Хорошо, так что я использую вышеупомянутое, чтобы попытаться сравнить времена, которые отформатированы как даты.Все они извлекаются из таблицы, отформатированной в пользовательском формате как «чч: мм», но я не могу найти время, чтобы попасть в любой, кроме окончательного elseif

Argh!

1 Ответ

1 голос
/ 17 февраля 2012

Вы объявляете значения после того, как вы их присвоили (startTime, secondTime и finalTime).Как минимум, вам нужно изменить код, чтобы объявить, а затем назначить.(Кроме того, ваше первое утверждение if неверно; первый тест должен быть просто If timeRef < secondTime.)

' Declare variables before assigning values to them
Dim startTime As Date
Dim secondTime As Date
Dim finalTime As Date
Dim timeRef As Date

i = 1    
For Each cell In Range("D1:D10000")
  If IsEmpty(cell.Value) Then Exit For

  Select Case Range("N" & i).Value
    Case 0 To 40
      startTime  = "13:00"
    Case 40 To 60
      secondTime = Range("V" & i).Value
    Case 60 To 100
      finalTime = Range("V" & i).Value
    Case Else
      ' You should do something here; what if the cell is empty or invalid?
      ' You end up with no value assigned to anything when leaving the Select
   End Select

  timeRef = Range("V" & i).Value

  If timeRef < secondTime Then 

  ElseIf timeRef >= secondTime And timeRef < finalTime Then

  ElseIf timeRef > finalTime Then

  End If
  i = i + 1
Next

Поскольку у меня нет ваших данных для проверки, я понятия не имею,на самом деле будет работать, но исправит очевидные проблемы, которые помешают его работе.

...