我正在尝试使用VBA改进Excel中的GANTT图表。现在,我仅使用条件格式,但是我需要在注释框中显示项目付款的值,日期和状态,该注释框中的内容将来自工作簿中的三个不同工作表:Estudos,Projetos和Obras。
付款日期在GANTT图表中显示为红色。如果付款在第4 + 3 * i行中,则源为Estudos,如果付款在第5 + 3 * i行中,则源为Projetos,如果付款在6 + 3 * i行中,则源为Obras。 / p>
我的想法是使用三个不同的矩阵在所有红细胞之间循环,每个工作表源一个,但是由于我是VBA编程的新手,所以我似乎无法使其工作。语法和对象非常具体。
请帮助我!
上图是Estudos工作表的图片,注释将在其中显示其值。我需要写在GANTT图表中特定红色单元格内显示的每个付款的日期和值。
到目前为止,这是我的工作,它是在每个红色单元格的注释框中插入通用的“数据”文本。
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
答案 0 :(得分:0)
我做到了!这是我使用的代码。
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的帮助。