Notifications
Clear all

MACRO PASSO A PASSO ... DICAS

16 Posts
4 Usuários
0 Reactions
2,313 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Você tem alguma contribuição do tipo passo a passo para ajudar no aprendizado sobre MACROS/VBA? ... (Evite postar arquivos, eles ficam inativos em pouco tempo!!)
.
Trabalho com Excel há uns 20 anos, nas formulas até que mando bem, mas no quesito MACROS/VBA nunca consegui me desenvolver ... até uso o gravador, mas fica tanto "lixo" na macro que, ao ser executada, ela fica piscando !!
.
Como primeira contribuição, fica esta ..
.
https://www.youtube.com/watch?v=E9P40skXKJQ&t=14s
.
Como segunda contribuição, esta ... ela classifica A3:P3000 em ordem decrescente pela coluna P3, e em ordem crescente pela coluna B3, e para o cursor em A3!!
.
Sub Classificar()

Range("A3:P3000").Sort _
Key1:=Range("P3"), Order1:=xlDescending, _
Key2:=Range("B3"), order2:=xlAscending, _
Header:=xlYes
MsgBox "Parabens Vanessa. Tudo Classificado Corretamente!", vbInformation, "Parabéns"
Range("A3").Select

End Sub

 
Postado : 07/10/2016 8:45 pm
(@edcronos2)
Posts: 0
New Member
 

20 anos?
acho que já leu tudo que se podia indicar ou ensinar
nesse caso a unica coisa que posso dizer é
pegue um projeto pessoal, algo de que goste
vá implementando aos poucos, melhorado e modificando e adicionando cada vez mais recursos

acho que depois desse tempo todo oq está faltando é empenho , se bem que nem posso falar nada a respeito pq até que consigo fazer oq eu quero com macros e formulas mas ainda acho que estou muito longe do que se precisa para trabalhar nisso

 
Postado : 07/10/2016 9:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
edcronos2, 20 anos sim, que uso com Excel no dia a dia, e me viro bem (até ajudo) nas fórmulas!! .. O problema é que não podemos querer dominar tudo!! ... O que vc entende de Direito, Medicina, Veterinária etc etc?? kk ... Cada um no seu quadrado!! ... Por isto a intenção do tópico, ajudar quem precisa de Excel, gosta de Macros, mas não domina!!!
.

 
Postado : 07/10/2016 10:25 pm
(@edcronos2)
Posts: 0
New Member
 

olha, eu tenho um serio problema para memorizar esse nomes de comandos e funções , por isso mesmo vou sempre no basico para fazer tudo oq eu quero

os meus codigos são todos nesse estilo:
ou pior...

    Sub Escolha_aleatoria()
        Dim numm()
        dmx = 5    ' quantidade de celulas por grupo
        l = 11    'linha inicial do grupo de saida


        numm = Range("b3:U8")    'rangue que contem as celulas para randomizar escolha
        ct = UBound(numm, 2)
        lt = UBound(numm, 1)
        ReDim dex(1 To lt * ct)
        n = 0
        For h = 1 To ct
            For v = 1 To lt
                If numm(v, h) & " " <> " " Then
                    n = n + 1
                    dex(n) = numm(v, h)
                End If
            Next
        Next

        If n < dmx Then
            MsgBox "dezenas insuficientes para preencher grupo"
            Exit Sub
        End If
        t = 1
    voltas:
        ReDim numm(1 To 1, 1 To dmx)
        For d = 1 To dmx
    volta:
            Randomize
            vvv = Int((n * Rnd) + 1)
            If dex(vvv) = "" And t <= n Then
                GoTo volta
            Else
                t = t + 1
                numm(1, d) = dex(vvv)
                dex(vvv) = ""
            End If

        Next
        Range("A" & l, Cells(l, dmx)) = numm
        If t > n Then Exit Sub
        l = l + 1
        For h = 1 To n
            If dex(h) <> "" Then GoTo voltas
        Next
    End Sub

viewtopic.php?f=21&t=19745&p=100021#p100021

até mesmo esse que vc postou eu fiz um usando arrays sem usar o nativo do excel, o fernando dernandes até encrencou por eu estar fazendo uma ferramenta se já existe uma pronta , o fato é, funciona é rapido e eu não tenho que ficar lembrando esses nomes "order2:=xlAscending, Header:=xlYes"...

no geral eu só faço uso de
for next, if then else end if , OR, And, <,>,=,+,-,(,), gosub, goto, dim, redim, ubound, range,cells, muitas variaveis e alguns outros

claro que dependendo do que quero fazer leva mais coisas no meio, mas por minhas limitações me concentro nas bases o resto vem de acordo com o progresso da macro

sobre direito,medicina, entre outros eu pelo monos nunca tentei aprender, acho que se não conseguimos decorar temos que pelo menos assimilar
eu já passei algumas dicas sobre arrays aqui no forum e é oq eu mais domino , acho que limitações todos temos uns mais que outros

o fato é, vc gosta de mexer nisso mas não conseguiu dominar o suficiente, então tem algum motivo,
ou então apenas mexe pelo trabalho,

 
Postado : 07/10/2016 10:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Admiro quem sabe escrever uma Macro ou um VBA, mas tenho bloqueio com o inglês (umas 3x na vida tentei estudar inglês, mas parei no primeiro período) k
.
No meu trabalho tem um Sistema informatizado, mas ele só dá conta de 50%, os outros 50% tem que ser no Excel !!
.
O código que postei no início é ajustável por leigos (já adaptei ele para vários arquivos) ... mas esse seu (arrays ?) não consigo mexer em uma vírgula se quer kk!!

.
No passado até achei que podia dominar tudo, mas isto só causou estresse k, hoje abandonei essa ambição, e adotei o escambo intelectual k ... ou seja, cada um no seu quadrado, mas se ajudando k!!
.
------------------------------
.
PS: se vc que está lendo este tópico tiver uma boa dica para quem quer aprender Macro, posta aí ... ou se tiver uma já pronta, posta também, e explica o que ela faz ... isto pode ajudar muitos que estão fazendo tudo no braço, sem necessidade!! ... (mas evite postar arquivos, eles perdem o link com o tempo!!)
.

 
Postado : 08/10/2016 9:19 am
(@edcronos2)
Posts: 0
New Member
 

1º eu já dei a dica, pegar um projeto de algo que goste, futebol por exemplo, e criar uma planilha a respeito

2º VBA não tem nada a ver com ingles e sim de logica,
a não ser que se pegue um livro em ingres para aprender pq mesmo lendo algo na internet tem tradutores online

se fosse assim todo mundo que sabe ingles saberia vba e nós no adaptaríamos bem com o portugol https://pt.wikipedia.org/wiki/Portugol , eu por exemplo achei uma droga pq acaba confundindo
trate como simbolismos ou novas palavras de uso especifico ,
em um projeto conjunto aqui no forum que acabou não dando em nada, o fernando falou que tinha que ser em ingles, "kkk, daqui pouco ele vai estar aqui reclamando", mas para escrever macros não precisa , apenas tem que aprender a logica da coisa, é igual matemática mas em palavras

monte macros simples com for next, if then, cells, range, essa é a base com isso vc vai assimilar a logica

eu por exemplo não consigo usar nem os loop Do e Until pq não lembro a estrutura então vou no if GoTo mesmo como pode ver na macro aí em cima
e funciona igual sem dores de cabeça ,
apesar de alguns reclamar de Goto,
mas qualquer programa pode dar errado com qualquer coisa se não souber estruturar o codigo Do e until tbm entra em loop infinito se não definir a logica adequada , eu por exemplo odeio OffSet e Resize

então eu não faço macro para agradar os outros e sim para funcionar
então outra dica, pense em escrever algo que funcione e não algo bonito , mesmo com select ou oq seja para assimilar a logica da coisa e depois pegue e modifique , melhore até ficar do jeito que vc goste

mais uma coisa , só recorra a ajuda em ultimo caso , modifique o codigo e teste varias vezes até descobrir como funciona a coisa, pesquise e apenas adapte as idias e não o projeto

 
Postado : 08/10/2016 10:26 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
PRINCIPAIS COMANDOS DE MACRO/VBA
.
http://exceleasy.com.br/2015/02/20/conh ... -no-excel/
.

 
Postado : 08/10/2016 5:27 pm
(@djunqueira)
Posts: 0
New Member
 

Do meu ponto de vista o ideal é ser organizado, ter algumas páginas da internet com boas dicas, conseguir fazer códigos simples q deem conta da maioria dos projetos q vc encara.

Não sendo programador não vejo muito sentido e enfiar muito a cara numa linguagem q pode um dia acabar, o melhor é saber os recursos q existem e onde buscar informações caso se queira implantar.

Tb tenho muito tempo de estrada, uso computadores desde o tempo do DOS, uma vez cheguei a montar um projeto em Access p/ administrar uma clínica (VBA), mas uns anos depois metade do projeto ficou obsoleto por conta de atualizações da M$, como o projeto era muito complexo e extenso desisti da ideia de atualizar e me desencantei com programação.

Hj em dia quando quero fazer alguma macro eu consulto sites p/ dúvidas específicas e implemento o código do jeito q eu quero, mas sou demorado p/ finalizar.

 
Postado : 09/10/2016 3:23 pm
(@edsonbr)
Posts: 0
New Member
 

Na minha maneira de pensar, se o objetivo é uma aprendizagem sólida da ferramenta, deve-se procurar primeiro entender todos os fundamentos dela, deixando as particularidades e exceções para um segundo (ou terceiro) momento. Começar pequeno (tipo um "Alô, Mundo!"), entendendo cada conceito e ir crescendo.

Sabemos que nessa área da informática a evolução é muito rápida e ficamos temerosos em estar perdendo tempo com algo que logo poderá ficar obsoleto.

Apesar disso, muita coisa tem permanecido, em sua essência, quase imutável, como o coração do Excel e do Word e seus velhos VBA's. Basta olhar o modelo de objetos das primeiras versões do Excel por exemplo e, comparando com as atuais. Muito foi acrescentado, mas o núcleo continua o mesmo (células, planilhas, fórmulas, shapes - figuras e gráficos...). Prá se ter uma idéia, meu primeiro contato com uma linguagem de programação foi em 1985 com calculadoras programáveis (Sharp PC-1211 RP e depois uma Casio PB-770/FA-11) que já usavam Basic como linguagem. Tudo bem que ainda não era uma linguagem estruturada, as linhas tinham que ser numeradas e o fluxo era de dar nó na cabeça, repleto de Gotos e Gosubs e conseguir comunicação com algum periférico era uma façanha daquelas... Mas onde quero chegar com essa nostalgia toda é que muitos dos "comandos" que eram usados lá ou até códigos completos no velho Basic ainda funcionariam com poucas alterações se transplantados ao nosso "Visual Basic - Application Edition", ou mesmo ao VB.NET ou até um VBScript, por exemplo.

Então não considero essa abordagem de aprendizado conceitual, passo-a-passo, desnecessária, pois o aprendizado de uma linguagem mesmo sendo o vovô VBA acaba facilitando e muito o caminho para outras que possam vir a substituí-la ou complementá-la. Por outro lado, não acho necessário nenhum rigor acadêmico nesse sentido, a menos que vc seja um profissional dessa área de TI.

É ser pragmático, mas com o conceitual firmemente compreendido.

Em termos práticos, num primeiro momento eu até mesmo deixaria de lado os objetos do Excel e trabalharia somente no ambiente do VBE puro, já que ele é o mesmo para todos os aplicativos Microsoft (Excel, Access, Word, Outlook, PowerPoint, Project, Visio...) e de outros fabricantes (AutoCAD, Solidworks, MathCAD, WordPerfect...).

Após um vôo inicial por todos os menus, barras de ferramentas e janelas (não são muitas), deixaria habilitada a exibição das janelas "Verificação Imediata" e "Variáveis Locais" para começar testando por ali.

Aliás, a janela Verificação Imediata é excelente não só prá depurar código ou alterá-lo "durante o vôo", mas também para aprender o que acontece, pois ali é o acesso direto ao interpretador do VBA. Por exemplo, digitando nela:
?3+2 Enter
mostrará imediatamente 5 na linha abaixo.
Digitando
MsgBox "Alô, Mundo!" Enter
O interpretador irá imediatamente exibir uma caixa de mensagem correspondente.
Digitando
?right("JSCOPA",4) Enter
Será exibido na hora "COPA"
Da mesma forma, digitando
?3+2 = 5 Enter
Mostrará: "Verdadeiro"

Então dá prá usá-la como uma verdadeira bancada de testes de seu código com o objetivo principal de familiarizar-se com a sintaxe da linguagem e o retorno esperado.

(Obs.: usando Debug.Print no código, o resultado é mostrado na Janela Imediata ao invés de em uma MsgBox, por exemplo. Na Verificação Imediata, pode-se abreviar Debug.Print por um ponto de interrogação).

Tendo feito isso, partir então para a criação de procedimentos (Subs e Functions) simples, sem se preocupar em usar células ou planilhas por enquanto. Dimensionar e atribuir valores a variáveis, conhecendo os tipos de variáveis principais existentes (Variant, Integer, Date, String...), entender e testar o escopo e visibilidade delas e dos procedimentos (se são conhecidas somente dentro do procedimento ou dentro de todo o módulo ou em quaisquer módulos), discernir entre coisas semelhantes, mas com significados diferentes, como constantes, variáveis, parâmetros, argumentos também é importante.

Um passo-a-passo mais aprofundado interessante pode ser visto no site do Felipe C. Gualberto:http://ambienteoffice.com.br/vba/

Após ter adquirido alguma familiaridade com o VBA, só então passaria a estudar o modelo de objetos do Excel propriamente dito. Dedicaria um tempo extra aos seguintes objetos e suas coleções: Application, Workbook, Worksheet, Range e Shape. Desses penso que quase toda sua hierarquia, seus eventos, métodos e propriedades valem a pena ser estudados.

Próximo passo seria a criação de Formulários (UserForms) e deixaria por último então a codificação de Módulos de Classe.

 
Postado : 10/10/2016 8:52 am
(@edcronos2)
Posts: 0
New Member
 

EdsonBR
pelo que ele já apresentou aqui no forum e pelo tempo que tem lidando com isso , acho que o problema não é o basico e sim assimilação da logica de programação
antes de começar a lidar com o excel e vba a ultima vez que tinha mexido nisso foi em um tk95 com basic tudo igual ao que vc falou, goto gosub e linhas numeradas , sem falar que para posicionar qualquer coisa em tela tinha que ter matemática no meio, na epoca com ao em torno dos 13 anos eu ainda tinha a cabeça no lugar e até que consegui montar meus programinhas no pouco tempo que mexi

ele já deve saber como funciona as funções basicas o problema é pegar o jeito da programação, de como estruturar as ideias
por isso indiquei um projeto inicial de alguma coisa do gosto dele

ele deve mexer nisso focando o trabalho, e isso acaba tirando a graça da coisa e ve como obrigação,
e se pegar num projeto pessoal de algo que goste vai senti prazer de fazer e assimilar melhor e querer melhorar cada vez mais , acho que é a melhor maneira de aprender e assimilar

 
Postado : 10/10/2016 10:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Essa dica eu nunca tinha visto em lugar nenhum ..

Aliás, a janela Verificação Imediata é excelente não só prá depurar código ou alterá-lo "durante o vôo", mas também para aprender o que acontece, pois ali é o acesso direto ao interpretador do VBA. Por exemplo, digitando nela:
?3+2 Enter
mostrará imediatamente 5 na linha abaixo.
Digitando
MsgBox "Alô, Mundo!" Enter
O interpretador irá imediatamente exibir uma caixa de mensagem correspondente.
Digitando
?right("JSCOPA",4) Enter
Será exibido na hora "COPA"
Da mesma forma, digitando
?3+2 = 5 Enter
Mostrará: "Verdadeiro"

 
Postado : 10/10/2016 12:30 pm
(@edsonbr)
Posts: 0
New Member
 

Essa dica eu nunca tinha visto em lugar nenhum ...

Pois é Alexandre, além disso por exemplo se seu código tiver sido interrompido (com um ponto de interrupção, um Stop ou um erro) dá prá alterar alguma variável atribuindo diretamente o valor para ela na Janela Imediata prá testar o andamento dele (zerar um contador, por exemplo, ou atribuir algum objeto a alguma variável). Também dá prá chamar alguma Sub ou Function diretamente ali. Por exemplo, se vc criou uma UDF, digamos:
Function Volume(comprimento, largura, altura) As Double
Volume = comprimento * largura * altura
End Function

Na Verificação Imediata dá prá testá-la diretamente, digamos:

?Volume(3,4,6) Enter
Retorna: 72

Ou mesmo se seu código estiver executando, em interrupção e tiver alguma variável com esses nomes, pode usá-las ali tb. Ou testar uma variável (?comprimento).

Costumo usar bastante esse recurso. ;)

 
Postado : 10/10/2016 1:32 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Estou gostando das opiniões ... no entanto minha intenção não é me tornar um expert em VBA (até porque com trabalho e faculdade não teria tempo para isto) ... mas somente aprender, e dominar, os comandos básicos para montar uma Macro que atenda minhas necessidades no trabalho!!
.
Sempre que preciso pergunto aqui, e sou bem atendido ... mas sinto falta de retribuir quando vejo a pergunta dos outros!!
.
PS: ... Para os que desejam se aprofundar, tenho um arquivo PDF, que encontrei por acaso ano passado, que me parece ser muuuitttooo bom ... https://www.sendspace.com/file/86r218 ... (tentei postar diretamente aqui, mas não consegui, se alguém conseguir poste diretamente aqui, afinal esse link do sendspace some em uns 60 dias)!!
.

 
Postado : 10/10/2016 7:56 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

.
Uma coisa que venho pesquisando, mas sem sucesso, é isto ...
.
Deixar esta linha (Range("A3:P3000").Sort _) flexível, ou seja, vinculada à célula A1 onde tem uma matriz/Range que varia sempre, para mais ou para menos!!
.
Sub Classificar()

Range("A3:P3000").Sort _
Key1:=Range("P3"), Order1:=xlDescending, _
Key2:=Range("B3"), order2:=xlAscending, _
Header:=xlYes
MsgBox "Parabéns. Tudo Classificado Corretamente!", vbInformation, "Parabéns"
Range("A3").Select

End Sub

 
Postado : 12/10/2016 7:44 pm
(@edsonbr)
Posts: 0
New Member
 

Não sei se entendi direito, minha leitura é a de que sua planilha teria como conteúdo da célula A1 um texto representando um intervalo, digamos A1 = A3:P3000. Aí vc quer utilizar esse intervalo digitado em A1 no código, é isso? (O que equivaleria mais ou menos a usar a fórmula INDIRETO do Excel). Se for isso, vc poderia usar:

Range(Range("A1").Value).Sort_
 
Postado : 12/10/2016 11:21 pm
Página 1 / 2