VBA Access - Documentando Objetos da Aplicação MS Access - Code Documenter
ACESSE CÓDIGO ATUALIZADO PARA TODAS AS VERSÕES AQUI.
Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com
✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.
Já percebeu que ao selecionarmos um range de células, não conseguimos observar o range selecionado na'Name Box'? (Veja abaixo)
Tampouco, observamos este Range na Barra de Status.
Com o intuito de inserirmos um código que possa demonstrar o que selecionamos, vá para o VBE (pressione Alt + F11), e então dê umduplo clique em 'EstaPasta_de_trabalho' (ou 'ThisWorbook' se a sua versão do MS Office estiver em inglês).
Ao lado direito, na área do editor, copie e cole o código abaixo:Private Sub Workbook_SheetSelectionChange
(ByVal Sh As Object, ByVal Target As Range)' Author Contact Place' André Luiz Bernardes bernardess@gmail.com http://inanyplace.blogspot.com/' Mostra as células que foram marcadas na barra de status.Dim cCell As Variant, i As RangeFor Each i In Selection.AreasLet cCell = cCell + CDec(i.Rows.Count) * i.Columns.CountNext
Let Application.StatusBar = Replace(Selection.Address(0, 0) & " selecionadas (" & cCell & Left(" Célula(s)", 11 + (cCell = 1)) & ")", ",", ", ")
End Sub
Agora quando selecionar qualquer parte da planilha, sempre observará algo similar a isso:
Exemplo 01
Se você, no código VBA, desligou a atualização da tela, e seus códigos levarem algum tempo para processar, o usuário pode pensar que o computador parou de responder. Por isso, uma boa regra de programação é informar ao usuário sobre a evolução do processamento, exibindo [no mínimo] uma mensagem na Barra de Status na parte inferior da tela.Sub StatusBarSample()
Let Application.ScreenUpdating = False' Desliga a atualização da tela.' Certifica-se de que a Barra de Status estará funcional.Let Application.DisplayStatusBar = TrueLet Application.StatusBar = "Por favor, aguarde a execução da 1ª Parte..."' No ponto abaixo, algum código é adicionado para o processamento.Application.Wait Now + TimeValue("00:00:02")Let Application.StatusBar = "Aguarde a execução da 2ª Parte..."' Adicione algum código para o processamento da 2ª Fase.Application.Wait Now + TimeValue("00:00:02")Let Application.StatusBar = False
End Sub
Exemplo 02
Você tem um processo que leva algum tempo para ser executado. Talvez uns 30 segundos, talvez 10 minutos. De qualquer forma você quer que o usuário saiba que a macro está sendo executado e em que parte do processe está:Sub StatusBar()
' Author Contact Place' André Luiz Bernardes bernardess@gmail.com http://inanyplace.blogspot.com/' Efetua um contador.Dim x As IntegerDim MyTimer As DoubleLet Application.StatusBar = True' Adapte este loop se for necessário.For x = 1 To 250Let MyTimer = TimerDoLoop While Timer - MyTimer < 0.03Application.StatusBar = "Progresso: " & x & " de 250: " & Format(x / 250, "Percent")DoEventsNext xLet Application.StatusBar = False
End Sub
'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

ID da Cor Descrição da Cor--------------- -----------------------------2147483648 Scroll bar-2147483647 Desktop-2147483646 Active window title bar-2147483645 Inactive window title bar-2147483644 Menu bar-2147483643 Window-2147483642 Window frame-2147483641 Menu Text-2147483640 Window Text (*)-2147483639 Title bar text-2147483638 Active window border-2147483637 Inactive window border-2147483636 Application background-2147483635 Highlight-2147483634 Highlight Text-2147483633 3-D face (**)-2147483632 3-D shadow-2147483631 Dimmed (disabled) text-2147483630 Button Text-2147483629 Inactive window title bar text-2147483628 3-D highlight (***)-2147483627 3-D dark shadow-2147483626 3-D light-2147483625 ToolTip Text-2147483624 ToolTip background-2147483621 Active window title bar color2* - Cor das fontes.** - Detalhes no backcolor do FORM, desabilitando a caixa de texto.*** - Texto do Label.
Aplicável em: MS Access 97, MS Access 2000, MS Access 2002, MS Access XP, MS Access 2007, MS Access 2010
Fonte: Peter´s Software
Tags: Bernardes, VBA, Office, Access, Windows, automation, color, colors, background, text, bar, cor