Как запомнить значения первой строки выбранного диапазона? - VBA
Формулировка задачи:
Уважаемые! Доброго времени суток, Нужна ваша помощь... Есть диапазон ячеек в несколько десятков строк. Пример привожу во вложении. Первый столбец содержит номера, которые одинаковы для одного наряда (указывается номер этого наряда). В одном наряде работают несколько человек. Все объемы отражены только в первой строке диапазона. Нужно;
Запомнить значения только первой строки, Получить весь список людей (он нужен для дальнейшей обработки в другой программе), по окончании переходим к следующему наряду, и повторяем цикл.
Решение вижу примерно так: Загружаю в массив диапазон для одного наряда. Беру и запоминаю первую строку как константу. Загружаю в словарь всех людей. Беру значения первой строки и потом, по одному забираю из словаря людей. Отработав, словарь очищаю. Перехожу к следующему наряду. Вопрос? Как запомнить значения первой строки выбранного диапазона? Как выбрать в словарь список людей одного наряда?
Решение задачи: «Как запомнить значения первой строки выбранного диапазона?»
textual
Листинг программы
Sub tt()
Dim a, b, i&, t$, d1 As Object, d2 As Object
Set d1 = CreateObject("scripting.dictionary"): d1.comparemode = 1
Set d2 = CreateObject("scripting.dictionary"): d2.comparemode = 1
a = [a1].CurrentRegion.Value
For i = 1 To UBound(a)
t = a(i, 1) 'критерий, тут бы trim() ещё может нужен...
If Len(Trim(a(i, 3))) Then 'если шапка наряда
ReDim b(1 To 10)
b(1) = a(i, 2)
b(2) = a(i, 3)
b(3) = a(i, 4)
b(4) = a(i, 5)
b(5) = a(i, 6)
b(6) = a(i, 7)
b(7) = a(i, 8)
b(8) = a(i, 10)
b(9) = a(i, 12)
b(10) = a(i, 13)
d1.Item(t) = b
End If
If Not d2.exists(t) Then d2.Add t, New Collection
d2.Item(t).Add a(i, 11) 'в коллекцию критерия добавляем человека
Next
Dim s$, el
s = InputBox("Введите номер наряда (896 или 325 в данном случае)") ' Вариант; После создания словарей вывести окно с запросом на выбор нужных S (Заказов) _
а потом цикл подстановки выбранных заказов.
b = d1.Item(s)
' Нужно взять из шапки заказа S эти позиции, для подстановки, в этот же обрабатываемый заказ
Zakaz = s '!
Дата_пров = b(1) '!
Кол_Факт1 = b(3) '?
Кол_Факт2 = b(4) '?
Ном_нар = b(10) '?
Текст_подтв = b(6) '? ' & ", " & "Cells(Z, 6).Value" (Сцепка двух значений "шапки")
Время = b(7) '?
For Each el In d2.Item(s)
Исполнитель = el
' Действие 1
MsgBox "По наряду " & s & " работал " & Исполнитель, 64
Next
MsgBox "ЗАКАЗ ПОДТВЕРЖДЕН, СОХРАНИТЕ ФАЙЛ", 64
End Sub