Notifications
Clear all

Biblioteca de código reutilizável

32 Posts
3 Usuários
0 Reactions
4,242 Visualizações
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Eu tenho um sonho, na verdade estou desenvolvendo (com algumas participações devidamente creditadas) um modelo de projeto, uma biblioteca de códigos VBA reutilizáveis.

Vamos lá, eu tenho por exemplo que escrever (e muitas vezes, reescrever) códigos no meu dia a dia de trabalho. Tendo em vista que sou preguiçoso, comecei a perceber quais eram as rotinas que eu mais escrevia, e comecei a criar essas rotinas específicas, perfeitamente reutilizáveis de um projeto para outro.

Fiz tudo em inglês pois uma vez li que as boas práticas da programação precisam que assim seja. Tem funções do tipo:
Function NameExists(byref wbk as excel.workbook, sName as string) as boolean
Function WorksheetExists(byref wbk as excel.workbook, sName as string) as boolean
Function SetSheet(byref wbk as excel.workbook, sName as string) as excel.worksheet
Sub OpenWorkbook(byref wbk as excel.workbook, byval FilePath as string, ReadOnly as boolean)
Function GetUsedRange()
Function GetArrayFromRange()
Function GetDictionaryFromRange()

Muitas outras. . . .

Enfim, o que eu quero com esse tópico é lançar uma biblioteca do Planilhando, mas não como a que temos hoje, que é tudo separado e diversos modelos bem bacanas e tal.
Seria uma biblioteca só, um modelo de projeto, a partir do qual um projeto pode ser iniciado, já com muitas funções super úteis escritas em código. Um código aberto para estudo. Para aprimorar a qualidade geral de tudo que se desenvolve por aí.
Queria junto com vocês, analisar a aceitabilidade da ideia de um Modelo VBA Colaborativo, onde todos desenvolvem suas rotinas reutilizáveis e úteis, e eu vou montando de forma ordenada e bonita, deixando sempre os créditos a quem desenvolveu, e a quem revisou e a quem melhorou, etc.

A ideia é eu disponibilizar meu modelo em breve. O que vocês acham ? Quem quer participar? Quem tem ideias boas?

Segue link para a biblioteca: http://1drv.ms/Xfpw7j

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/07/2014 3:20 pm
(@edcronos)
Posts: 1006
Noble Member
 

Mas...
Deixando a linguagem de lado,
Já que os mais feras já falaram que ajuda

Afinal como se vai dar o projeto?
como vai ser a planilha base?
Onde vai ser hospedado?

Como vão ser classificados as funções e macros
qual vai ser o padrão de documentação para cada rotina
qual vai ser a classificatória de interligação entre elas?

e no caso das macros que trocam informações ou chamam outras macros, qual vai ser o padrão de nomeação de variáveis para evitar nomes iguais.

e uma pergunta que não quer calar...
quando vai ser o inicio ??? :?

desculpa aí...

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 29/07/2014 9:52 pm
(@edcronos)
Posts: 1006
Noble Member
 

não é muita coisa e deve ter maneiras melhores de fazer "eu mesmo já pensei em algumas", mas...
uma pequena contribuição

se colocar ZERO tira todas as linhas vazias
(move apenas os valores)
deixa quantidade especifica de linhas vazias entre valores numa range
(apenas verifica uma coluna "a 1ª", mas é facilmente adaptável)

Sub AdDeltLinED()
    Dim colunO() As Variant, colunD() As Variant

    L = 2  ' ----------------------------( quantidade de linhas em branco )
    Li = 2   '-----------------------( Linha inicial )
    Ci = "C"    '----------------( Primeira coluna da range )
    Cf = "F"  ' -------------( Ultima coluna da range )

    Lf = Cells(Rows.Count, Ci).End(xlUp).row   ' ------- ( Ultima linha da range )
   
    colunO = Range(Ci & Li, Cf & Lf).Value2
    linc = 0
    tl = UBound(colunO, 1)
    tc = UBound(colunO, 2)
    For nx = 1 To tl
        If colunO(nx, 1) <> "" Then linc = linc + 1
    Next
    ttl = (linc * (L + 1)) - L
    ReDim colunD(1 To ttl, 1 To tc)
    nd = 1
    For nx = 1 To tl
        If colunO(nx, 1) <> "" Then
            For Cx = 1 To tc
                colunD(nd, Cx) = colunO(nx, Cx)
            Next
            nd = nd + L + 1
        End If
    Next
    Range(Ci & Li, Cf & Lf).ClearContents
    Range(Ci & Li, Cf & Li + ttl - 1).Value2 = colunD
End Sub

até

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 30/07/2014 1:12 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Edcronos,
errei o nome, era espelhar acho...

Bom, eu vou insistir numa coisa:
existem padrões mundiais de programação, boas práticas, e formas de programar, declarar variáveis e objetos e muito mais. Esses padrões foram criados com um propósito simples: facilitar desenvolvimento, leitura e manutenção de qualquer código, tendo sido vc ou qualquer outra pessoa que o desenvolveu.
CLARO que todo mundo tem a liberdade de desenvolver como quiser, mas sem seguir as regras de boas práticas de programação, provavelmente vc será o único que entenderá e poderá mexer no seu código.
É que:

    - Qdo falo do inglês, é pq há um padrão mundial.
    - Qdo falo de limpar variáveis e objetos, liberando memória, é pq liberar memória é bom para seu computador e seu desempenho.
    - Qdo falo de melhores nomes para variáveis, é pq amanhã pode ser que não seja vc mexendo no seu código.
    - Qdo falo de melhores práticas, não sou eu quem as inventou, mas dps de 10 anos de experiência, aprendi as enormes vantagens que elas trazem e me adaptei a elas.
    - Qdo falo (e não falei ainda) que o código tem que ser devidamente identado e usar o mínimo possível de vezes o ":", não é pq eu sou cricri e chato, é pq isso facilita leitura por qquer desenvolvedor no mundo. Fazer isso, de escrever várias linhas numa linha só, pode deixar seu código com menos linhas, mas vai deixar seu código mais difícil de ler, se vc pegar o código daqui um ano, vc verá. Onde termina um IF, onde termina um For/Next, quando fica tudo bagunçado, é super difícil ler e entender.
    - Qdo vejo o nome "AdDeltLinED", eu pergunto, "do que ele tá falando?". Preciso de um manual para entender suas nomenclaturas, rs
    - Se tudo que eu falo ou sugiro (ou outros programadores mais experientes) não é bom pra você (ainda) então uma hora eu espero que você enxergue que é. Sério, qual o objetivo dessa rotina? O que ela faz?
    [/list:u:2zyblnl7]

    Claro que respeito suas opiniões e de todos, mas se vc está entrando no mundo da programação, uma hora vc vai entender as razões para essas sugestões e vai querer tornar seus códigos melhores, mais bonitos, mais legíveis, mais maleáveis. E entenda, melhores pode não seri o que vc acredita que é. "Pra mim é melhor assim"... Não, às vezes vc precisa bater a cabeça pra entender melhor o que é "melhor". E como cada um tem seu tempo, isso não pode ser forçado.

    Então, queria que esse tópico focasse no objeto inicial dele, que é macros compartilhadas num esquema colaborativo, não se prendam ao idioma, isso é o de menos, sério.

    Não se prendam a metodologias de trabalho, eu me autonomeei Revisor do Código, exatamente por isso, eu vou aplicar as normas das boas práticas da programação. E isso vai servir também para todo mundo ver aplicadas estas normas e quem sabe, ler, apreciar, enxergar as vantagens, e aprender. Aí sim seria o melhor dos mundos. Apesar que o objetivo inicial não era didático, eu já entendi que há essa necessidade e aceitei. Bóra colaborar ?

    "Ps. E claro que um americano "fora da america do sul" vai achar o inglês mais fácil :P "

    kkk boa!!

    Existem mil maneiras de preparar Neston. Invente a sua!
    http://www.youtube.com/ExpressoExcel

     
Postado : 30/07/2014 8:42 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

..
Em todo caso, posso ajudar a traduzir as rotinas para o português, se o Fernando quiser.

Valeu, vou querer ajuda sim, tem rotina pra caralho no modelo, rs

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/07/2014 8:53 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ok, vc tem razão Edcronos, vamos ao que interessa...
Eu vou hospedar no meu OneDrive.
Vou manter uma cópia de segurança sem direitos de edição por ninguém exceto eu.
Vou deixar a pasta aberta para download, edição e upload.
Assim qquer um pode colocar ali os arquivos códigos.

Eu adotei um padrão de desenvolvimento que usa tratamento de erros em todas as rotinas !

Acho que o código fica mais bonito assim:

Option Explicit       'força declaração de todas as variáveis
Option Private Module 'impede que funções do módulo fiquem visíveis pelo Excel

'==================
'Autor:
'Data:
'Email:
'Site: www.Planilhando.com.br
'Rotina: Qualquer / Sub
'Descrição: 
'==================
Public Sub Qualquer()
On Error Goto TreatError

'todo o código vem aqui

On Error Goto 0
Exit Sub
TreatError
'rotina padrão para tratamento de erro
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/07/2014 8:59 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Calma pessoal, ainda não traduzi, mas comecei com o primeiro módulo.

Segue um link onde vocês poderão encontrar o modelo, e inclusive editar os arquivos.
(claro que eu tenho backup, mas por favor, não estraguem ok? rs)

FF

http://1drv.ms/Xfpw7j

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/07/2014 10:06 am
(@edcronos)
Posts: 1006
Noble Member
 

Fernando
sei e te dou razão em varias questões
"apenas discordo do ingles, padrão ou não a minha lingua nativa é o português, "

Desculpa aí, eu tinha acabado de escrever a macro para minha planilha quando postei
(a macro Adiciona e Tira linhas em branco dentro de uma RAnge, para ficar com a quantidade escolhida)
movendo apenas os valores.

    11111 <---> 11111
    11111
    11111 <---> 11111

    <--------- -> 11111[/list:u:rbd6gix3]
    Sobre a macro espelhar, ela apenas inverte da direta para a esqueda ou de cima para baixo a posição dos valores

      1254 <--> 4521 <---> hgba
      abgh <--> hgba <---> 4521[/list:u:rbd6gix3]

      claro que vc deve ter coisa muito melhor e muito mais eficaz.
      fiz rapidinho para outra pessoa.

      ----------------------------------------------------------------------------------------------------------

      Certamente eu vou estar fora de padrão,

      não escrevo macros desse modo pq quero deixar mais bonito,
      menor ou num padrão só meus.
      é assim que eu entendo melhor oq estou fazendo e raciocino melhor sobre a lógica da macro.

      Não escrevo varias linhas em uma só, para diminuir quantidade de linhas,
      E sim para a maior quantidade de linhas ficar dentro do meu campo de visão.

      Assim da mesma forma que escrevo os comentários do lado da linha de codigo, e não acima como é o padrão.
      quando eu escrevo acima do codigo , não consigo visualizar o fluxo de trabalho da macro.

      se vc pegar o código daqui um ano,

      preciso esperar 1 ano não, assim que acabo de escrever não entendo mais, "eu mesmo fico pensando, (Como é que isso funciona?)"
      Mas não é por causa dos ifs, quando eu pego outras macros eu faço a mesma coisa para entender o fluxo de funcionamento.

      Melhores nomes para variáveis, sim seria muito bom usar nomes maiores,
      isso acabaria com problemas de nomes repetidos :( ,
      mas como falei não consigo fazer assim, eu simplesmente penso num fluxo de funcionamento e saio escrevendo.

      Ps Se vc que é um expert está se enrolando com minhas macros, acho que posso ficar despreocupado com copias piratas :P

      Eu queria até participar, mas como falei sou apenas um principiante com uma maneira maluca de raciocínio.

      Att.

      Somente é impossíveis até que alguém faça
      A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

      "ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

       
Postado : 30/07/2014 12:40 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Bem, esta é uma função eu eu sempre utilizo para forçar a habilitar as macros.

Option Explicit       'força declaração de todas as variáveis
Option Private Module 'impede que funções do módulo fiquem visíveis pelo Excel

'==================
'Autor: Gilmar Tsalikis
'Data: 30/07/2014
'Email: gtsalikis@gmail.com
'Site: www.planilhando.com.br
'Rotina: Visibility / Function
'Descrição: Esta função oculta/exibe as planilhas da pasta de trabalho. _
            É util para definir regras para forçar a habilitação de macros, por exemplo. _
            Utiliza uma planilha de referência.
'==================
Public Function Visibility(ws_name)
On Error GoTo TreatError

Application.ScreenUpdating = False

'Define as variáveis
Dim ws As Worksheet

'Identifica se a planilha de referência está visivel ou não
If Sheets(ws_name).Visible = xlSheetVisible Then
    'Ações caso a planilha esteja visível
    'Loopa a pasta de trabalho exibindo as planilhas
    For Each ws In Worksheets
        If Not ws.Name = ws_name Then
            ws.Visible = xlSheetVisible
        End If
    Next ws
    'Oculta a planilha de referência com o atributo VeryHidden
    Sheets(ws_name).Visible = xlSheetVeryHidden
Else
    'Ações caso a planilha não esteja visível
    'Exibe a planilha de referência
    Sheets(ws_name).Visible = xlSheetVisible
    'Loopa a pasta de trabalho ocultando as planilhas com o atributo VeryHidden
    For Each ws In Worksheets
        If Not ws.Name = ws_name Then
            ws.Visible = xlSheetVeryHidden
        End If
    Next ws
End If

Application.ScreenUpdating = True
On Error GoTo 0
Exit Function
TreatError:
'rotina padrão para tratamento de erro
Select Case Err.Number
    Case Is = 9
        MsgBox "Não existe a planilha indicada."
    
    Case Else
        MsgBox "Não foi possível ocultar/reexibir as planilhas."
End Select
Application.ScreenUpdating = True
End Function

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 30/07/2014 5:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Já acrescentei no modelo, Gilmar.
Veja lá, tá no módulo xlWorlsheets e chama MacroWarning (claro que reeditei, mas a ideia é sua e vc tem o crédito)...

Valeu brother !

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 30/07/2014 10:16 pm
(@edcronos)
Posts: 1006
Noble Member
 

Fernando, o ideal seria apagar os meus comentários para desinchar o topico.

de certa forma foram apenas discussões sobre conceitos e limitações pessoais que nada contribui para o projeto.
e como já está tudo esclarecido não tem o pq ter tanto texto poluindo o tópico ...
"até no chat poderia ter sito discutido sobre isso."

Att.

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 31/07/2014 1:39 am
(@edcronos)
Posts: 1006
Noble Member
 

o certo seria o projeto estar na área de biblioteca com as regras e progresso,
e com um link para um tópico Correlacionado onde se discutira o projeto.
de preferência com um chat para discussão sobre o assunto.

bem, é apenas uma ideia...

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 31/07/2014 1:50 am
(@edcronos)
Posts: 1006
Noble Member
 

Fenando, eu já coloquei as planilhas com as macros no post da biblioteca.

não sei se é viavel ou não,
o bom seria a planilha base ter algum tipo de dado para analise da funcionalidade das macros e funções

como nunca trabalhei com planilha não sei qual tipo mais comum
claro que vai depender das ideias e finalidade de cada projeto e a capacidade de quem está fazendo.

se bem que uma planilha que funcionasse em qualquer situação ia deixar muita gente desempregada :?

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 31/07/2014 7:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

FINALMENTE Edcronos, uma ideia boa!
KKKKKKK
Uma planilha de dados para o pessoal poder brincar com os códigos disponíveis, e um módulo de exemplos de utilização...

Esse módulo pode levar seu nome como idealizador... Pq pra efeito didático eh importante... Mas eu vou desenvolver tudo, então....

Enfim, vai ser uma planilha de dados, e um módulo adicional, os quais terão instrução para serem eliminados uma vez q o projeto venha ser utilizado.

Claro q com conhecimento avançado de Excel, mtos outras coisas podem ser feitas.. Digo, usar range dinâmico com macro com arrays é animal... Imagina Edcronos, nunca mais ter q contar a qto de linhas pra encontrar a última...

Enfim, vou ver o q desenvolvo visando esse foco...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 31/07/2014 7:50 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Para não estragar o modelo, vou sempre criar dois modelos, um com o exemplo, outros cru...

Qto a onde postar, concordo, de repente o fórum de biblioteca eh mas adequado...

Mas no fundo, não importa onde estará, desde que as ideia cheguem a mim.

Vou fazer um post com a ideia e as regras por lá tb.
E mais, qto a excluir pastagens desse tópico, acho legal ateh, mas acho melhor não, pq tem todo o histórico da discussão. Essas coisas são importantes no futuro.

Criar um outro tópico, aih sim... Limpo, mencionando esse via link...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 31/07/2014 7:54 pm
(@edcronos)
Posts: 1006
Noble Member
 

eu ia te mandar minha planilha para vc opinar,

ela dá para escalonar, Claro que a criei dentro de meus conhecimentos

mas como pode ter varias planilhas em uma só,
separadas por setores, e os dados dos setores podem ser realocados para corresponder a um padrão de comparação.
poderia servi de base para o projeto.

vou limpar o lixo e postar aqui para referencia
o novo modelo estou tentando fazer com criação de setores de acordo com a necessidade e a formatação sendo dinamica tbm

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
Postado : 31/07/2014 8:27 pm
Página 2 / 3