Propósito

✔ 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.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador Application. Mostrar todas as postagens
Mostrando postagens com marcador Application. Mostrar todas as postagens

VBA Access - Documentando Objetos da Aplicação MS Access - Code Documenter

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

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

Excel Tips - Populando Combo Box - Multi-Column




Crie um Combobox
Os usuários da versões Excel 2010 e Excel 2007 podem clicar em Inserir a partir da aba Desenvolvedor, clicando no Combo Box na seção de Controles ActiveX.


Os usuários da versão Excel 2003. Clicarão no ícone do Combo Box na caixa de ferramentas.



Agora desenhe o combo Box na sua planilha:



Adicionando itens no Combobox

Para adicionar itens ao seu combobox, execute os seguintes passos.
1. Adicione o código abaixo na área de código de abertura da sua planilha (Workbook Open event), ou o adicione a outro módulo do seu código.
With Sheet1.ComboBox1
   .AddItem "Paris"
   .AddItem "New York"
   .AddItem "London"
End With

Nota: Use Sheet2 se o seu combobox estiver localizado na sua segunda worksheet.
Resultado:

2. Para conectar o conteúdo do combobox a uma célula, clique com o botão direito do mouse no combobox (certifique-se de estar no modo design) e clique em Propriedades. Preencha E2 como a célula a ser preenchida.


Como popular um combobox nos formulários?

Nível da implementação: Intermediário.
Versão em que foi testada: 2000 - 2013.
Descrição: Um combobox é disponibilizado com 10 linhas e treze colunas de informação.

Segue o 1º exemplo:

Option Explicit

Private Sub UserForm_activate()
Dim MyList(10, 10) 'Definindo como array.
' O combobox neste exemplo contém 3 colunas - Implemente quantas colunas desejar

With ComboBox1
.ColumnCount = 3
.ColumnWidths = 75
.Width = 220
.Height = 15
.ListRows = 6
End With

' Definindo tanto a lista como o local de onde obter os dados (Colunas A, D, G)
With ActiveSheet
' MyList (Linha{0 to 9}, Coluna{primeira}) = (Coluna A neste exemplo) ' Não se esqueça de continuar acrescentando para LINHA e COLUNA ' iniciando do zero Não de um MyList(0, 0) = .Range("A1")
MyList(1, 0) = .Range("A2")
MyList(2, 0) = .Range("A3")
MyList(3, 0) = .Range("A4")
MyList(4, 0) = .Range("A5")
MyList(5, 0) = .Range("A6")
MyList(6, 0) = .Range("A7")
MyList(7, 0) = .Range("A8")
MyList(8, 0) = .Range("A9")
MyList(9, 0) = .Range("A10")
' MyList (Linha {0 to 9}, Coluna{segunda}) = (Coluna D neste exemplo) MyList(0, 1) = .Range("D1")
MyList(1, 1) = .Range("D2")
MyList(2, 1) = .Range("D3")
MyList(3, 1) = .Range("D4")
MyList(4, 1) = .Range("D5")
MyList(5, 1) = .Range("D6")
MyList(6, 1) = .Range("D7")
MyList(7, 1) = .Range("D8")
MyList(8, 1) = .Range("D9")
MyList(9, 1) = .Range("D10")
' MyList (Linha {0 to 9}, Coluna {Terceira}) = (Coluna G neste exemplo) MyList(0, 2) = .Range("G1")
MyList(1, 2) = .Range("G2")
MyList(2, 2) = .Range("G3")
MyList(3, 2) = .Range("G4")
MyList(4, 2) = .Range("G5")
MyList(5, 2) = .Range("G6")
MyList(6, 2) = .Range("G7")
MyList(7, 2) = .Range("G8")
MyList(8, 2) = .Range("G9")
MyList(9, 2) = .Range("G10")
End With

' Agora populamos o Combobox
ComboBox1.List() = MyList
End Sub 

Como usar:
Abra uma planilha MS Excel
Selecione Editor Visual Basic (Tools/Macro/Visual Basic Editor)
Na janela do editor VBA (VBE window), selecione Insert/UserForm
Selecione ComboBox a partir da caixa de ferramentas (toolbox), cole-o no Formulário
Clique o botão direito do mouse no formulário
Selecione Inserir código
Então copie e cole o código acima
Testando o código:
Digite alguns dados nas colunas A, D e G na planilha
Exiba o formulário novamente, agora verá as três colunas preenchidas no Combobox

Segue o 2º exemplo:

Populando o controle:

Option Explicit 
Private Sub UserForm_Initialize() 
     
    With Me.ComboBox1 
        .AddItem "Item 1" 
        .AddItem "Item 2" 
    End With 
     
End Sub 

Populando a partir da seleção de um range na planilha:

Option Explicit 
Private Sub CommandButton1_Click() 
     
    With Sheet1 'code name
        .Range("A1") = Me.ComboBox1.Value 
    End With 
     
End Sub 


Outro:

Private Sub UserForm_Initialize()
    With Worksheets("Sheet1")
        ComboBox1.List = .Range("A1:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
    End With
End Sub

Deixe os seus comentários! Envie este artigo, divulgue este link na sua rede social...


TagsVBA, Office, Application, Automation, field,  Plan, planilhas, column, Excel, Multi-Collumn, populando, combobox, 


VBA Access - Oculto - Criando um banco de dados novo















Durante o processamento de dados, ou mesmo para podermos ter uma base para para popular momentaneamente com dados base para relatórios, dashboards, scorecards, etc.

Quando estamos simulando cenários, talvez não desejemos guardar estes dados para depois, mas queiramos dar agilidade, por manter os dados numa base temporária.

Eis a solução:

Sub CreateObject()
Dim nAddress as String
Dim nApplication as String

Let nAddress = ThisWorkbook.Path + ""

' Poderíamos usar para o Excel: Excel.Application

Set nApplication = CreateObject("Access.Application") 

Let nApplication.Visible = False

nApplication.OpenCurrentDatabase (nAddress + "tmpRPT.accdb")

Caso fosse Excel:  a.Workbooks.Open (nAddress + "tmpRPT.xlsb")

nApplication.CloseCurrentDatabase

nApplication.Quit

Set nApplication = Nothing
End Sub


Tags: VBA, Access, application, database



VBA Excel Basics - Modo profissional de Abrir e Fechar o MS Excel


O objeto Application do MS Excel disponibiliza uma coleção de objetos para controle das janelas (Windows) que permitem que abramos, organizemos, redimensionemos e fechemos as janelas filhas (child) do MS Excel.

 O código abaixo abrirá uma nova janela filha e colocará as janelas em cascata, abrindo as janelas para a pasta de trabalho ativa:

Sub OpenCascadeWindows()
    ActiveWindow.NewWindow
    Application.Windows.Arrange xlArrangeStyleCascade, True
End Sub

Feche a janela aberta no código anterior e restaure a janela original para um estado maximizado no Excel:

Sub CloseMaximize()
    ActiveWindow.Close
    ActiveWindow.WindowState = xlMaximized
End Sub

Controle a janela pai do MS Excel usando as propriedades WindowState e DisplayFullScreen do objeto Application

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub ChangeExcelWindowState()
    Let Application.WindowState = xlMaximized
    Sleep 1000

    Let Application.WindowState = xlMinimized
    Sleep 1000

    Let Application.WindowState = xlNormal
    Sleep 1000

    Let Application.DisplayFullScreen = True
    Sleep 1000

    Let Application.DisplayFullScreen = False
End Sub

Tags: VBA, Excel, Basics, open, close, window, DisplayFullScree, WindowState, application, Kernel32, LIB, API, 


VBA Excel Basics - Bloqueando o usuário


O objeto Application do MS Excel fornece algumas formas que limitam a interação do usuário com a planilha que está usando. Isso será bem útil quando desejar impedir que os usuários interrompam alguma processo da sua aplicação MS Excel enquanto este executa algum processo demorado.

Explicando:

Defina a propriedade DisplayAlerts como False, escondendo as caixas de diálogo padrão do MS Excel enquanto o código for executado.

Configure a propriedade Interactive como False para bloquear completamente os usuários do MS Excel.

Otimize a propriedade ScreenUpdating como False, ocultando as alterações executadas via código. Um dos benefícios da definição de ScreenUpdating como False é que o código anterior é executado mais rapidamente, pois o MS Excel não precisa atualizar a tela ou rolar a planilha quando células estiverem selecionadas. 

Cada abordagem acima requer que se inclua um código no final do procedimento para retornar a configuração ao seus padrão original, caso contrário poderá bloquear um usuário permanentemente.

Segue:


Sub UserBlock()
    Dim cel As Range
    
    Let Application.Cursor = xlWait
    Let Application.Interactive = False
    Let Application.ScreenUpdating = False
    
    ' Simulando uma ação.
    For Each cel In [a1:iv999]
        cel.Select
    Next
    
    ' Restaura as configurações padrão
    Let Application.Interactive = True
    Let Application.ScreenUpdating = True
    Let Application.Cursor = xlDefault
    
    [a1].Select
End Sub


Tags: VBA, Excel, Basics, workbook, user, block, interactive, ScreenUpdating, DisplayAlerts, application

VBA Access - Documentando todos os objetos - Loop Through All Objects

VBA Access - Documentando Objetos da Aplicação MS Access - Code Documenter


Inline image 1

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.

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 AccessObject

    For Each myForm In CurrentProject.AllForms
        
        'Código visualizar os nomes
        Debug.Print myForm.Name
    
    Next
End Sub

'Loop em todos os relatório:

Public Sub LoopThroughAllReports()
    Dim myReport As AccessObject
    For Each myReport In CurrentProject.AllReports
        
        ''Código visualizar os nomes
        Debug.Print myReport.Name
        
    Next
End Sub

'Loop em todos os formulários abertos:

Public Sub LoopThroughOpenForms()
    Dim myForm As Form
    For Each myForm In Forms
        
        'Código visualizar os nomes
        Debug.Print myForm.Name
        
    Next
End Sub

'Loop em todos os relatórios abertos:

Public Sub LoopThroughOpenReports()
    Dim myReport As Report
    For Each myReport In Reports
        
        'Código visualizar os nomes
        Debug.Print myReport.Name
        
    Next
End Sub

'Loop em todas as queries:

Public Sub QueriesLoopSkeleton()
    Dim myObject As AccessObject
    For Each myObject In CurrentData.AllQueries
        
        'Código visualizar os nomes
        Debug.Print myObject.Name
    
    Next
End Sub

'Loop em todas as TABELAS:

Public Sub TablesLoopSkeleton()
    Dim myObject As AccessObject
    For Each myObject In CurrentData.AllTables
        
        'Código visualizar os nomes
        Debug.Print myObject.Name
    
    Next
End 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 String
    Dim MyCounter As Byte
    Dim myReport As Report

    'Desligas as mensagens de aviso.
    DoCmd.SetWarnings False
    
    ' Copia todos os LABELS originais do relatório 
    ' para o objeto LabelsTempReport
    DoCmd.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 LabelsTempReport
    DoCmd.Close acReport, "LabelsTempReport", acSaveNo
  
    'Declara um Recordset ADODB chamado de MyRecordSet
    Dim cnn1 As ADODB.Connection
    Dim MyRecordSet As New ADODB.Recordset

    Set cnn1 = CurrentProject.Connection
    Let MyRecordSet.ActiveConnection = cnn1
   
    ' Lê os dados do objeto RecSource para o objeto MyRecordSet
    Let 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.Field
    
    For Each MyField In MyRecordSet.Fields
        ' Converte o campo AutoNumber (Tipo=3) para Long
        ' para evitar problemas de inserção posterior.
        If MyField.Type = 3 Then
            Let FldNames = FldNames + "CLng([" + RecSource + _
                "].[" + MyField.Name + "]) As " + MyField.Name + ","
        Else
            Let FldNames = FldNames + _
                "[" + RecSource + "].[" + MyField.Name + "],"
        End If
    Next
    '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.Close

    DoCmd.RunSQL MySQL
   
    ' A seguir adiciona registros em branco para 
    ' esvaziar no objeto LabelsTempTable.
    Let MySQL = "SELECT * FROM LabelsTempTable"
    MyRecordSet.Open MySQL, , adOpenStatic, adLockOptimistic

    For MyCounter = 1 To LabelsToSkip
        MyRecordSet.AddNew
        MyRecordSet.Update
    Next

    '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 Then
        MySQL = MySQL & " WHERE " & PassedFilter
    End If

    ' Acrescenta os registros
    DoCmd.RunSQL MySQL

    ' O objeto LabelsTempTable está pronto agora
    ' Em seguida nós fazemos LabelsTempTable o registro fonte
    ' para LabelsTempReport.
    DoCmd.OpenReport "LabelsTempReport", acViewDesign, , , acWindowNormal
    Set myReport = Reports![LabelsTempReport]
    Let MySQL = "SELECT * FROM LabelsTempTable"
    Let myReport.RecordSource = MySQL

    DoCmd.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

✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets
diHITT - Notícias