У меня есть диаграмма Ганта в листе Excel. Все работает, но я хотел бы улучшить его, введя код VBA, который будет ограничивать диапазон ячеек графика, соответствующий шагу, на который нажимает пользователь. Таким образом, пользователь щелкнет ячейку шага в первом столбце, и тогда вокруг соответствующих цветных ячеек графика появятся границы. Какой код?
Знаете ли вы, что макросы можно записывать? Просто начните запись, сделайте то, что хотите, остановите запись и проверьте записанный макрос.
Да, это в ячейках листа. Я немного модифицировал на свой вкус один из имеющихся в Excel шаблонов. Список шагов находится в столбце C, диаграмма Ганта начинается со строки 18.
Вы можете использовать событиеselect_change, чтобы определить, когда пользователь нажимает на заголовок шага в верхней части листа — прочитайте оттуда, чтобы получить даты начала/окончания. Затем перебирайте строки диаграммы Ганта, пока не найдете строку, штриховка которой соответствует датам.
У меня пока вот этот вроде работает, но возвращает цифры в ячейках, при условном форматировании может поставить цвет.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim a, z As Date
Dim g As String
Dim f As Integer
Dim y, x As String
Dim p, q As String
Dim h As Integer
Dim cell As Range
Range("B22:CT41").ClearContents
On Error GoTo didi
If Target.Row >= 3 And Target.Row <= 16 Then
If Target.Column > 50 Then
x = "CA"
y = "AY"
Else
x = "AD"
y = "B"
End If
a = Range(x & Target.Row)
z = Range(x & Target.Row).Offset(0, 1)
h = Range(x & Target.Row).Offset(0, 1) - Range(x & Target.Row)
g = Range(y & Target.Row).Value
f = CInt(Right(g, 2))
For Each cell In Range(Range("B19"), Range("B19").End(xlToRight))
If Format(cell, "dd_mm_yyyy") = Format(a, "dd_mm_yyyy") Then
p = cell.Offset(f + 2, 0).Address
GoTo dede
End If
Next
dede:
For Each cell In Range(Range("B19"), Range("B19").End(xlToRight))
If Format(cell, "dd_mm_yyyy") = Format(z, "dd_mm_yyyy") Then
q = cell.Offset(f + 2, 0).Address
GoTo dada
End If
Next
dada:
Range(p & ":" & q) = f
End If
didi:
End Sub
Кто-нибудь знает, почему возникает ошибка (13: несоответствие типов) в строке: f = CInt(Right(g,2)), когда я меняю порядок шагов?
Вряд ли вы получите ответ, как поставлен этот вопрос. Вы не предоставили никакого соответствующего контекста в своей таблице. Диаграмма Ганта находится в ячейках листа или на реальном объекте? «Что такое код?» Не существует универсального решения для программирования. Все должно быть записано на компьютере, чтобы он знал, что делать, поэтому без контекста электронной таблицы все, что вам дают, будет концептуальным и потребует от вас корректировки для функционирования. Вы можете переписать этот вопрос, указав подробную информацию о своем листе, о том, что вы пробовали и с какими проблемами столкнулись на этом пути.