VBA Динамическое создание комментариев - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь улучшить свою диаграмму Ганта в Excel с помощью VBA.На данный момент я использую только условное форматирование, но мне нужно показать значения, даты и статус платежей по проекту в поле для комментариев, в которое будут входить три различных листа в моей книге: Estudos, Projetos и Obras.

Даты платежа отображаются красным цветом на диаграмме Ганта.Если платеж находится в строках 4 + 3 * i, источником является Estudos, если платеж находится в строках 5 + 3 * i, источником является Projetos, а если в строках 6 + 3 * i, источником является Obras.

Текущее изображение диаграммы Ганта.

Моя идея состояла в том, чтобы провести цикл между всеми красными ячейками, используя три разные матрицы, по одной для каждого источника рабочего листа, но так как я новичок в VBAпрограммирование, я не могу заставить его работать.Синтаксис и объекты очень специфичны.

Пожалуйста, помогите мне!

Рабочий лист Estudos.

Выше приведен рисунок рабочего листа Estudos, откудаКомментарий примет свои значения.Мне нужно написать дату и стоимость каждого платежа, показанного в его отдельной красной ячейке, расположенной на диаграмме Ганта.

Это то, что я имею до сих пор, он вставляет общий текст «данных» в поле комментария в каждой красной ячейке.

            Sub AtualizaComent()

            ' variaveis
            Dim rng1     As Range
            Dim celula   As Range
            Dim estudos  As Range
            Dim projetos As Range
            Dim obras    As Range
            Dim etapa    As String
            Dim data     As String
            Dim valor    As String
            Dim i, j, k, l, m, n As Integer

            ' inicializaçao
            Set rng1 = Range("T4:APV726")
            Set estudos = Worksheets("Operacional - Pag Estudos").Cells(4, 8)
            Set projetos = Worksheets("Operacional - Pag Projetos").Cells(4, 8)
            Set obras = Worksheets("Operacional - Pag Obras").Cells(4, 8)
            i = 0
            j = 0
            k = 0
            l = 0
            m = 0
            n = 0

            ' limpa todos os comentarios
            rng1.ClearComments

            ' para cada celula no gantt
            For Each celula In rng1

                ' valido se a celula for vermelha (data do pagamento)
                If celula.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
                    ' If celula.Row = 4 + 3 * i Then


                    ' adiciona o comentario
                    With celula.AddComment
                        .Text Text:="data"
                    End With

                    End If
            Next celula

            End Sub

1 Ответ

0 голосов
/ 05 декабря 2018

Я сделал это!Вот код, который я использовал.

            Sub AtualizaComent()

            ' variaveis
            Dim gantt    As Range
            Dim linha    As Range
            Dim celula   As Range
            Dim data     As Range
            Dim valor    As Range
            Dim etapa    As Range
            Dim i, j, k, l, m, n As Integer

            ' inicializaçao
            Set gantt = Range("T4:APV726")
            i = 0
            j = 0
            k = 0
            l = 0
            m = 0
            n = 0

            ' limpa todos os comentarios
            gantt.ClearComments

            ' para cada linha no gantt
            For Each linha In gantt.Rows
                If linha.Row = 4 + 3 * i Then
                    ' para cada celula na linha
                    For Each celula In linha.Cells
                        ' valido se a celula for vermelha (data do pagamento)
                        If celula.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
                            ' celulas que contem as datas, valores e etapa
                            Set data = Worksheets("Operacional - Pag Estudos").Cells(4 + 3 * i, 8 + 2 * j)
                            Set valor = Worksheets("Operacional - Pag Estudos").Cells(5 + 3 * i, 8 + 2 * j)
                            Set etapa = Worksheets("Operacional - Pag Estudos").Cells(6 + 3 * i, 8 + 2 * j)
                            ' adiciona o comentário
                            With celula.AddComment
                                .Text Text:=data.Text & _
                                            Chr(10) & valor.Text & _
                                            Chr(10) & etapa.Text
                            End With
                            j = j + 1
                        End If
                    Next celula
                    i = i + 1
                    j = 0
                End If
            Next linha

            For Each linha In gantt.Rows
                If linha.Row = 5 + 3 * k Then
                    For Each celula In linha.Cells
                        If celula.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
                            Set data = Worksheets("Operacional - Pag Projetos").Cells(4 + 3 * k, 8 + 2 * l)
                            Set valor = Worksheets("Operacional - Pag Projetos").Cells(5 + 3 * k, 8 + 2 * l)
                            Set etapa = Worksheets("Operacional - Pag Projetos").Cells(6 + 3 * k, 8 + 2 * l)
                            With celula.AddComment
                                .Text Text:=data.Text & _
                                            Chr(10) & valor.Text & _
                                            Chr(10) & etapa.Text
                            End With
                            l = l + 1
                        End If
                    Next celula
                    k = k + 1
                    l = 0
                End If
            Next linha

            For Each linha In gantt.Rows
                If linha.Row = 6 + 3 * m Then
                    For Each celula In linha.Cells
                        If celula.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
                            Set data = Worksheets("Operacional - Pag Obras").Cells(4 + 3 * m, 8 + 2 * n)
                            Set valor = Worksheets("Operacional - Pag Obras").Cells(5 + 3 * m, 8 + 2 * n)
                            Set etapa = Worksheets("Operacional - Pag Obras").Cells(6 + 3 * m, 8 + 2 * n)
                            With celula.AddComment
                                .Text Text:=data.Text & _
                                            Chr(10) & valor.Text & _
                                            Chr(10) & etapa.Text
                            End With
                            n = n + 1
                        End If
                    Next celula
                    m = m + 1
                    n = 0
                End If
            Next linha

            End Sub

Спасибо @Nathan_Sav за помощь.

...