Я работаю над проектом, для которого я создал небольшой образец.
Описание
Я хочу разрешить пользователю три действия , когда ему / ей разрешено выбирать 3 разных диапазона ячеек один за другим. После выбора первого диапазона будет запущен макрос, в который будут записаны 4 вещи: FromValue, ToValue, TimeDiff & CABIN и дамп этих четырех значений в Sheet2 в табличном формате. Затем следующий диапазон будет выбран пользователем (второе действие), а значения будут сброшены ниже предыдущего, а затем третье действие. Я прилагаю картинку, чтобы продемонстрировать, что мне нужно захватить и сбросить.
Отключенный вывод = Лист2 должен выглядеть следующим образом после трех действий
01-Oct-2019 00:15 | 01-Oct-2019 01:00 | 00:45 | CABIN 1
01-Oct-2019 23:15 | 02-Oct-2019 01:00 | 01:45 | CABIN 2
02-Oct-2019 23:15 | 02-Oct-2019 23:30 | 00:15 | CABIN 2
Настройка
- Ячейка B2 содержит месяц и год вmmm-yyyy формат.
- Оставшиеся ячейки в строке 2 будут иметь даты от 1 до 28/29/30/31 в зависимости от
- , какой это месяц.
- Строка3 будет иметь значения времени
- Следующие строки будут иметь имена кают
Условия
- Перед запуском макроса следует проверить, выбран ли диапазон. Если нет, то появляется ошибка «Выбор временного диапазона»
- . Затем следует проверить, что выбранные ячейки не имеют цвета фона, чтобы убедиться, что это не выбранная ячейка, чтобы избежать наложения. Если условие не выполнено, должна появиться ошибка «Ячейки уже отмечены»
- . Когда первое условие выполнено, оно должно закрасить диапазон желтым цветом, захватить требуемые значения и выгрузить данные в Лист 2
- Если несколькодиапазоны выбираются, тогда должна появиться ошибка «Выберите только один диапазон»
- Если ячейки выбраны за пределами области выбора (в данном примере область выбора C4: T5, то должна появиться ошибка «Неправильный выбор»
Вот что я пытался, но у меня кончились проблемы, для которых мне нужна помощь.
Sub CaptureAndDump()
Dim FromValue As Double
Dim ToValue As Double
Dim TimeDiff As Double
Dim Cabin As String
Dim slot As String
Dim c As Excel.Range
slot = Selection.Address
Dim DataSheet As Worksheet
Dim AppendRow As Long
Set DataSheet = Sheets("Data")
AppendRow = DataSheet.Cells(DataSheet.Rows.count, "A").End(xlUp).Row + 1
If Len(slot) < 7 Then
MsgBox "Select a work slot"
Exit Sub
ElseIf InStr(slot, ",") > 0 Then
MsgBox "Multiple slots not allowed. Select only one slot"
Exit Sub
ElseIf Selection.Rows.count > 1 Then
MsgBox "Selection of multiple cabins not allowed"
Exit Sub
Else
For Each c In Selection
If c.Interior.ColorIndex > 0 Then
MsgBox "Selected slot already marked"
Exit Sub
End If
Next c
End If
FromValue = ActiveSheet.Cells(2, Selection.Column)
ToValue = ActiveSheet.Cells(2, Selection.Column + Selection.Columns.count - 1)
TimeDiff = ToValue - FromValue
Cabin = Range("B" & Selection.Row).Value
DataSheet.Range("A" & AppendRow).Value = Format(FromValue, "dd-mmm-yyyy hh:mm:ss")
DataSheet.Range("B" & AppendRow).Value = Format(ToValue, "dd-mmm-yyyy hh:mm:ss")
DataSheet.Range("C" & AppendRow).Value = Format(TimeDiff, "hh:mm")
DataSheet.Range("D" & AppendRow).Value = Cabin
Selection.Interior.ColorIndex = 6
Selection.BorderAround ColorIndex:=1
ActiveCell.Select
'Dont know how to code condition no.5 <= Need Assistance
'Rest of the code not yet tried
End Sub
Спасибо