#excel #vba #do-while
#excel #vba #делать-пока
Вопрос:
Я довольно новичок в написании сценариев Excel VBA, но я пытаюсь создать скрипт, который сокращает посещаемость мероприятия на основе времени его начала и окончания. Прямо сейчас у меня есть таблица, в которой показана посещаемость мероприятия, распределенная по всем задействованным комнатам, но показано, что посещаемость составляет 24 часа в сутки. Итак, я создаю цикл Do While, который установит посещаемость равной нулю для периодов, выходящих за рамки времени начала и окончания, и заполнит таблицу номерами посещаемости в течение этого времени события.
Проблема в том, что у меня возникают проблемы с перемещением через диапазон времени события. Это таблица, которую я пытаюсь заполнить для справки.
Date Useage Event Time Meeting Room 1 Meeting Room 2 Meeting Room 3
01-01-18 3 12:00 AM
01-01-18 3 01:00 AM
01-01-18 3 02:00 AM
01-01-18 3 03:00 AM
01-01-18 3 04:00 AM
01-01-18 3 05:00 AM
01-01-18 3 06:00 AM
01-01-18 3 07:00 AM
01-01-18 3 08:00 AM
01-01-18 3 09:00 AM
01-01-18 3 10:00 AM
01-01-18 3 11:00 AM
01-01-18 3 12:00 PM
01-01-18 3 01:00 PM
01-01-18 3 02:00 PM
01-01-18 3 03:00 PM
01-01-18 3 04:00 PM
01-01-18 3 05:00 PM
01-01-18 3 06:00 PM
01-01-18 3 07:00 PM
01-01-18 3 08:00 PM
01-01-18 3 09:00 PM
01-01-18 3 10:00 PM
01-01-18 3 11:00 PM
01-02-18 3 12:00 AM
01-02-18 3 01:00 AM
Dim x As Double
Dim y As Double
Dim startTime As Double
Dim eventTime As Range
x = 0
y = 0
startTime = ActiveWorkbook.Sheets("Attendance").Range("H3")
Set eventTime = ActiveWorkbook.Sheets("Time Occupancy Analysis").Range("C2")
Do While (startTime >= eventTime) And y <= 24
Do While (startTime >= eventTime) And x <= 36
eventTime.Offset(0, x 1) = 0
x = x 1
Loop
x = 0
Sheets("Time Occupancy Analysis").Range("D2").Offset(y 1, 0) = 0
y = y 1
eventTime = eventTime 0.04167 'This is where the problem exists'
Loop
Я надеюсь, что код будет выводить значения 0 для посещаемости до тех пор, пока время начала события не станет равным времени события. При запуске он изменяет время события вместо того, чтобы перемещаться по диапазону времени события (12:00, 1:00, 2:00 и т.д.)
Комментарии:
1.
eventTime
будучиRange
,eventTime = whatever
неявно выполняетeventTime.Value = whatever
, т.е. «изменяет время события» (записывает вC2
). Вы имеете в видуSet eventTime = eventTime.Offset(1)
или что-то подобное?2. Я. Я видел, что он изменяет время события в C2. Однако мое намерение состоит в том, чтобы он считывал время события в C2 (12: 00 утра), затем, после заполнения соответствующей строки 0, я хочу, чтобы он переместился к следующему времени события (1: 00 утра) и заполнил эту строку 0. И продолжайте это до тех пор, пока время события не станет равным времени начала.
3. Да, это в буквальном смысле то, что
Set eventTime = eventTime.Offset(1)
было бы сделано: вместо записи вeventTime
диапазон (C2
) вы бы устанавливали его в ячейку под ним на каждой итерации.4. Обратите внимание, что выражения цикла, вероятно, тоже необходимо скорректировать; Я бы подумал, что
Do While {expression}
выражение каждый раз пересчитывается, так что это может настроить вас на бесконечный цикл (или довольно косвенное спасение, когдаstartTime
значение «больше» того, что оценивается какVariant/Empty
в первой пустой строке). Вместо этого рассмотрите более простой подход, такой какFor
цикл, который выполняется от2
до последней строки на этом листе.5. Вау, это исключительно простое решение. Я просто заблудился в своей собственной голове. Спасибо, что разъяснили мне суть.