Se olharmos para o passado, analisando os inúmeros anos de experiência que temos, quais desenvolvedores, às vezes temos a impressão de que neste anos todos, várias vezes, desenvolvemos diversas funcionalidades (códigos) que serviram exclusivamente as nossas necessidades pontuais. Pensamos: 'Não é possível que alguém mais no mundo, precise de algo sequer parecido com esse código que acabei de desenvolver'.
Tal impressão de que os nossos códigos são tão proprietários que até seria inútil compartilhá-los com outros, impede-nos de trazer à tona soluções criativas que poderiam auxiliar muitos desenvolvedores mundo à fora.
O que segue é uma reflexão neste sentido. Olhando o passado, olha a ironia da funcionalidade do código, Percebi que tinha um código desenvolvido para a Geração Espontânea de Datas Retroativas. E este parecia-me encaixar-se na descrição do primeiro parágrafo. Os seus comentário a posteriori, é que me dirão se ele foi útil, ou não.
Sintaxe: GeraMonths(<Parâmetro>) <Retorna data no formato mmm|yy>
Se parametrizarmos com '0' (zero), retorna uma lista retroativa com todos os próximos 11, além do atual.
? GeraMonths(0) ' Supondo que estejamos no mês 05/2013:
Qualquer outro número, retornar o respectivo mês retroativo a partir do atual.
? GeraMonths(1) ' Supondo que estejamos no mês 05/2013:
mai|13
? GeraMonths(2) ' Supondo que estejamos no mês 05/2013:
abr|13
? GeraMonths(12) ' Supondo que estejamos no mês 05/2013:
Divirta-se!
Function GeraMonths (MonthNumber As Byte) As String
' Date: 28/05/2012 - 10:30.
' Application:
' Functionality: Gera uma lista de 12 meses retroativos ao atual no formato "mmm|yy".
Dim nMonth As String
Dim i As Integer
Dim j As Integer
Dim k As Boolean
Dim l As Boolean
Let i = 0
Let j = 0
Let k = True
Let l = True
' Gera 12 meses a partir do mês atual.
While i < 12
' Na 1ª vez gera o mês atual.
If k Then
Let nMonth = Format(Now(), "mmm") & "|" & Format(Now(), "yy")
Let k = False
Else ' Apartir da 1ª vez subtrai 31 dias.
' A partir do mês de Jan o ano precisa ser subtraido por 1.
If InStr(1, nMonth, "jan") <> 0 Then
Let l = False
End If
If l Then
Let nMonth = Format(Now() - j, "mmm") & "|" & Format(Now(), "yy")
Else
Let nMonth = Format(Now() - j, "mmm") & "|" & Format(Now(), "yy") - 1
End If
End If
Let i = i + 1
Let j = j + 31
If MonthNumber = i Then
Let GeraMonths = nMonth
Debug.Print i & " - " & nMonth
ElseIf MonthNumber = 0 Then
Let GeraMonths = nMonth
Debug.Print i & " - " & nMonth
End If
Wend
End Function
Ahh, claro, mas que desenvolvedor sou eu que não explico qual a funcionalidade para tal código.
Pois bem meus caros, regularmente recebia um arquivo texto com dados de MAT (Últimos 12 meses, mês-a-mês). O cabeçalho deste arquivo vinha com a descrição pouco aplicável ao relatório no qual iria utilizá-lo, algo como: UN12, UN11, UN10, etc...
Precisei criar uma interface, que no momento da importação, imprimisse um novo cabeçalho a tais campos. Este deveria ser indicado pelo usuário responsável pelo processamento.
Pode observar na imagem acima, no canto extremo à direita do formulário, um botão com a imagem de '2 olhos'.
Quando este é pressionado os campos anteriores são automaticamente preenchidos.
O código para isso?
Function PreTyping (nField As Byte)
' Date: 28/05/2012 - 10:30.
' Application:
' Functionality: Preenche automaticamente os campos de meses
'Carrega o nome dos meses.
If nField = 1 Then
Let Form_frm_Months.cxExercise01.Value = GeraMonths(1)
Let Form_frm_Months.cxExercise02.Value = GeraMonths(2)
Let Form_frm_Months.cxExercise03.Value = GeraMonths(3)
Let Form_frm_Months.cxExercise04.Value = GeraMonths(4)
Let Form_frm_Months.cxExercise05.Value = GeraMonths(5)
Let Form_frm_Months.cxExercise06.Value = GeraMonths(6)
Let Form_frm_Months.cxExercise07.Value = GeraMonths(7)
Let Form_frm_Months.cxExercise08.Value = GeraMonths(8)
Let Form_frm_Months.cxExercise09.Value = GeraMonths(9)
Let Form_frm_Months.cxExercise10.Value = GeraMonths(10)
Let Form_frm_Months.cxExercise11.Value = GeraMonths(11)
Let Form_frm_Months.cxExercise12.Value = GeraMonths(12)
End If
End Function
Pois é, acho que ninguém vai precisar de uma solução assim. O que você acha? Deixe seus comentários...
Tags: Tips, Exclusive, VBA, geração