Estou tentando criar um calendário no Excel usando VBA. Parece como mostrado:
A coluna B é a coluna do mês. O mês começa na coluna B na semana (linha) em que ocorre o primeiro dia do mês. Exemplo, fevereiro começa na linha 6, embora haja alguns últimos dias de janeiro na mesma linha.
Quero destacar os feriados. Por exemplo, tenho feriado em 1º de janeiro, destacado em ciano. Eu escrevi um código definindo um objeto de matriz bidimensional my_holidays(x,y)
. x refere-se ao mês e y refere-se ao dia com base no seguinte:
Escrevi um código que procura o mês na coluna B e o dia nas colunas C a I e destaca se encontrar a correspondência:
Dim last_row As Integer
last_row = ws1.Range("B1").End(xlDown).row
Dim row As Integer
Dim column As Integer
For row = 1 To last_row
For column = 3 To 9
For i = 1 To num_holidays
If ws1.Range("B" & row).Value = my_holidays(i, 1) And ws1.Cells(row, column).Value = my_holidays(i, 2) Then
ws1.Cells(row, column).Interior.Color = vbCyan
End If
Next i
Next column
Next row
Meu problema é que se eu tiver feriado em dias como 29 de março, ele destaca duas linhas aqui 10 e 14 conforme mostrado na imagem acima. No entanto, o 29º dia na linha 10 corresponde a fevereiro.
Como posso modificar meu código de forma que, se o feriado corresponder a duas linhas de um mês, ele selecione a segunda linha usando VBA no Excel?
Introduza a
bFirstRow
variável para distinguir a primeira linha de cada mês.Corrija a lógica para marcar 27 de fevereiro.
Faça um loop pelos dados da 2ª linha
For row = 2
, caso contrário,Cells(row - 1, 2)
gerará erro.Atualizar:
Para este problema, você pode adicionar uma condição para verificar se o valor da célula é o valor mínimo até o final da linha. Isso indica que os números dos dias não foram redefinidos na mesma linha, portanto o mês não mudou.
Mas você já pensou: e se 27 de fevereiro fosse feriado? Você não tem nenhuma linha com 27 de fevereiro e 27 de fevereiro. Se você alterar a linha 10 para março, e se 27 de fevereiro e 2 de março fossem feriados?
Atualizei porque seu calendário é um pouco inconsistente quanto ao mês que você escreve na coluna B quando a linha é dividida entre 2 meses. Isto deve cobrir todas as possibilidades.