VBA Access - Documentando Objetos da Aplicação MS Access - Code Documenter
Para os que não gostam de documentar as suas aplicações, saibam, me agradecerão depois. Documentar é essencial para mantermos certa ordem sob os nossos códigos.
Acreditem, ninguém tem uma memória tão prodigiosa ao ponto de não esquecer tudo o que desenvolveu em uma semana. Resguardar-se não lhe fará mal. Tendo isso em mente, sirvo-lhes um código que tem por objetivo expor todos os objetos da sua aplicação MS Access.
Acreditem, ninguém tem uma memória tão prodigiosa ao ponto de não esquecer tudo o que desenvolveu em uma semana. Resguardar-se não lhe fará mal. Tendo isso em mente, sirvo-lhes um código que tem por objetivo expor todos os objetos da sua aplicação MS Access.
São códigos que fazem 'loopings' na maioria das coleções que desejamos documentar dentro de um projeto. E é lógico, isso pode ser ampliado e melhorado.
GUARDEM ESSES CÓDIGOS NUM LUGAR QUE POSSAM ACESSAR FACILMENTE QUANDO PRECISAREM. POIS ACREDITEM, VOCÊS PRECISARÃO.
Boa diversão!
'Loop em todos os formulários:
Public Sub FormsLoopSkeleton()'Código para percorrer todo os Forms da coleção (formulários fechados).Dim myForm As AccessObjectFor Each myForm In CurrentProject.AllForms'Código visualizar os nomesDebug.Print myForm.NameNextEnd Sub'Loop em todos os relatório:Public Sub LoopThroughAllReports()Dim myReport As AccessObjectFor Each myReport In CurrentProject.AllReports''Código visualizar os nomesDebug.Print myReport.NameNextEnd Sub'Loop em todos os formulários abertos:
Public Sub LoopThroughOpenForms()Dim myForm As FormFor Each myForm In Forms'Código visualizar os nomesDebug.Print myForm.NameNextEnd Sub'Loop em todos os relatórios abertos:Public Sub LoopThroughOpenReports()Dim myReport As ReportFor Each myReport In Reports'Código visualizar os nomesDebug.Print myReport.NameNextEnd Sub'Loop em todas as queries:
Public Sub QueriesLoopSkeleton()Dim myObject As AccessObjectFor Each myObject In CurrentData.AllQueries'Código visualizar os nomesDebug.Print myObject.NameNextEnd Sub'Loop em todas as TABELAS:Public Sub TablesLoopSkeleton()Dim myObject As AccessObjectFor Each myObject In CurrentData.AllTables'Código visualizar os nomesDebug.Print myObject.NameNextEnd Sub
'PLUS: Extraindo todos os Labels.
Sub SkipLabels(ReportName As String, LabelsToSkip As Byte, Optional PassedFilter As String)'Declara algumas variáveis.Dim MySQL, RecSource, FldNames As StringDim MyCounter As ByteDim myReport As Report'Desligas as mensagens de aviso.DoCmd.SetWarnings False' Copia todos os LABELS originais do relatório' para o objeto LabelsTempReportDoCmd.CopyObject , "LabelsTempReport", acReport, ReportName' Abre o objeto LabelsTempReport na visão de Design.DoCmd.OpenReport "LabelsTempReport", acViewDesign' Obtém os nomes das queries e consultas sob os relatórios,' e os guarda aqui na variável RecSource .Let RecSource = Reports!LabelsTempReport.RecordSource' Fecha o objeto LabelsTempReportDoCmd.Close acReport, "LabelsTempReport", acSaveNo'Declara um Recordset ADODB chamado de MyRecordSetDim cnn1 As ADODB.ConnectionDim MyRecordSet As New ADODB.RecordsetSet cnn1 = CurrentProject.ConnectionLet MyRecordSet.ActiveConnection = cnn1' Lê os dados do objeto RecSource para o objeto MyRecordSetLet MySQL = "SELECT * FROM [" + RecSource + "]"MyRecordSet.Open MySQL, , adOpenDynamic, adLockOptimistic' Extrai os nomes dos campos e os seus' respectivos tipos da coleção Fields collection.Dim MyField As ADODB.FieldFor Each MyField In MyRecordSet.Fields' Converte o campo AutoNumber (Tipo=3) para Long' para evitar problemas de inserção posterior.If MyField.Type = 3 ThenLet FldNames = FldNames + "CLng([" + RecSource + _"].[" + MyField.Name + "]) As " + MyField.Name + ","ElseLet FldNames = FldNames + _"[" + RecSource + "].[" + MyField.Name + "],"End IfNext'Remove vírgula a direita.Let FldNames = Left(FldNames, Len(FldNames) - 1)'Cria uma tabela vazia com a mesma estrutura RecSource,'sem quaisquer campos AutoNumeração.Let MySQL = "SELECT " + FldNames + _" INTO LabelsTempTable FROM [" + _RecSource + "] WHERE False"MyRecordSet.CloseDoCmd.RunSQL MySQL' A seguir adiciona registros em branco para' esvaziar no objeto LabelsTempTable.Let MySQL = "SELECT * FROM LabelsTempTable"MyRecordSet.Open MySQL, , adOpenStatic, adLockOptimisticFor MyCounter = 1 To LabelsToSkipMyRecordSet.AddNewMyRecordSet.UpdateNext'Agora o objeto LabelsTempTable tem registros vazios suficientes nele.MyRecordSet.Close' Construa uma cadeia de SQL para anexar todos os registros da fonte' original (RecSource) no objeto LabelsTempTable.Let MySQL = "INSERT INTO LabelsTempTable"Let MySQL = MySQL + " SELECT [" + RecSource + _"].* FROM [" + RecSource + "]"' Adere à condição PassedFilter, se existir.If Len(PassedFilter) > 1 ThenMySQL = MySQL & " WHERE " & PassedFilterEnd If' Acrescenta os registrosDoCmd.RunSQL MySQL' O objeto LabelsTempTable está pronto agora' Em seguida nós fazemos LabelsTempTable o registro fonte' para LabelsTempReport.DoCmd.OpenReport "LabelsTempReport", acViewDesign, , , acWindowNormalSet myReport = Reports![LabelsTempReport]Let MySQL = "SELECT * FROM LabelsTempTable"Let myReport.RecordSource = MySQLDoCmd.Close acReport, "LabelsTempReport", acSaveYes' Agora podemos finalmente imprimir os labels.'DoCmd.OpenReport "LabelsTempReport", acViewPreview, , , acWindowNormal'Nota: As written, procedure just shows labels in Print Preview.'To get it to actually print, change acPreview to acViewNormal'in the statement above.' Como escrito, o procedimento só mostra labels na prévia de impressão '' para obtê-los realmente para imprimir,' altere acPreview para acViewNormal na declaração acima.End Sub
ACESSE OUTRO CÓDIGO ATUALIZADO PARA TODAS AS VERSÕES AQUI.
Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com
Nenhum comentário:
Postar um comentário