Ir ao conteúdo
  • Cadastre-se

4tomic

Membro Júnior
  • Posts

    18
  • Cadastrado em

  • Última visita

Reputação

1
  1. Meus caros... estou desenvolvendo um código para facilitar minha vida no trabalho... sou iniciante no VBA, e já ha alguns dias programando e estudando percebi que eu estava repetindo muito um código, e decidi torna-lo um código "mãe", usado os argumentos Byref para indicar as variaveis da chamada da função ao invés de ficar repetindo o código Alguns pontos importantes Criei um módulo de classe chamado clsServicos Tenho um userform para fazer o front, receber o input do usuário Abaixo podem ver que eu coloco "ByRef cls as clsServicos" para quando eu chamar essa rotina "limpeza" em uma outra rotina minha (btn_cadlimp_Click, "o código está abaixo da rotina limpeza"), eu indique um nome para o objeto da classe e preciso que ele já crie esse objeto... vejam na rotina btn_cadlimp_Click que quando eu chamo a rotina limpeza indico no argumento cls a palavra limp, pois eu preciso que o limp seja um novo objeto da minha classe e assuma o papel do cls, mas não consigo de jeito nenhum... alguém poderia me dar uma luz... achei pouco material na internet que ficasse claro se eu consigo fazer isto que estou querendo. Vou deixar em vermelho negrito as partes que cito no texto. Sub limpeza(ByRef cls As clsServicos, ByRef serv As String, ByRef desc As String, ByRef L As Double, ByRef B As Double, ByRef H As Double, ByRef Q As Double) Dim rgtlimp As String Dim rgtlimp2 As String 'Dim cls As clsServicos Set cls = New clsServicos Dim total As String 'servico = UserForm1.ComboBox1.Value 'ajustar para a devida combobox total = Len(serv) traco = InStr(1, serv, "-") cls.servico = Left(serv, traco - 2) Set pesquisa = Sheets("planilhanull").Cells.Find(What:=cls.servico, LookIn:=xlValues, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False) 'váriavel (trocar) cls.codigo = pesquisa.Offset(0, -1).Value cls.descricao = desc cls.preco = pesquisa.Offset(0, 3).Value cls.unidade = pesquisa.Offset(0, 1).Value If cls.unidade = "M2" Then cls.comprimento = L ' cls.largura = B cls.quantd = Q cls.area = cls.comprimento * cls.largura * cls.quantd -------------------------------------------------------------------------------------------------------------- Public Sub btn_cadlimp_Click() Dim unidade As String servico = UserForm1.ComboBox1.Value total = Len(servico) traco = InStr(1, servico, "-") Valid = Left(servico, traco - 2) Set pesquisa = Sheets("MEMORIAL").Cells.Find(What:=Valid, LookIn:=xlValues, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False) If pesquisa Is Nothing Then Call Módulo1.limpeza(limp, ComboBox1.Value, txt_desclimp.Value, txt_climpezacamada.Value, txt_llimpezacamada.Value, txt_alimpezacamada.Value, txt_qlimpezacamada.Value) Else Módulo3.regLimp End If End Sub
  2. Caros, boa noite! Tenho uma combobox carregando resultados de um filtro, ela está funcionando perfeitamente. Porém os textos carregados são muito grandes, e eu preciso que seja possivel visualiza-los por completo. É possivel quebrar linhas dentro da combobox ou então ao posicionar o mouse sobre a opção exibir um label com o texto inteiro!? Desde já agradeço. Segue o código da combobox (ela funciona perfeitamente) Sub Carrega_ComboBox3() Dim CélVis As Range With Sheets("planilhanull") .AutoFilterMode = False .Range("A5:L" & .Cells(Rows.Count, 1).End(xlUp).Row).AutoFilter Field:=8, Criteria1:= _ "=*locacao*", Operator:=xlAnd, Criteria2:="=*obra*" For Each CélVis In .Range("H6:H" & .Cells(Rows.Count, "H").End(xlUp).Row).SpecialCells(xlVisible) UserForm1.ComboBox3.AddItem CélVis.Value Next CélVis .AutoFilterMode = False End With End Sub
  3. @Patropi Na verdade, embora eu seja membro antigo, é a primeira vez que uso o forum. Não sabia desta regra de conduta. O Osvaldo me ajudou muito, com certeza darei os likes nos posts dele. Abraços
  4. Hmm, não tinha me atentado que o código limparia os dados da planilha 1, sendo assim, ele pode ser viável sim, ainda mais se você diz que ele é mais rápido, vou testá-lo então. Estou trabalhando nesta planilha ainda e há muito o que desenvolver, quando chegar próximo ao formato final testarei.
  5. Osvaldo, na verdade não seria de fato um problema, é que eu aumentaria o tamanho do arquivo, nessa planilha eu terei pelo menos umas 100 dessa combobox fazendo filtros para retornar resultados que forem selecionados, se para cada combobox que eu criar eu colar o resultado dos filtros na planilha1, vejo que só estarei sobrecarregando o arquivo, pois seu primeiro código, faz a filtragem, retorna o resultado e desfaz o filtro, sendo assim em todas as combobox que eu utilizar ele me trará o resultado esperado sem precisar colar esse filtro em outro lugar.
  6. Eu percebi, o problema é que poderei ter mais de 100 dessas combobox, e através do segundo código necessariamente precisaria da planilha 1 para colar os filtros. Testei o código 1 e ele funcionou perfeitamente, de forma MUUITO mais rápida que o meu código original e consegui aprender um pouco mais analisando seu código. Muito obrigado.
  7. Osvaldo, boa tarde! Gostaria de te agradecer pelo apoio. Vou testar o código, pelo que vi acredito que ele dará certo sim, tentarei com o primeiro código pois terei muitas dessa combobox, e se eu colar a filtragem e outra planilha, não sei até que ponto será viável. Voltarei aqui para te dar o feedback quanto a solução.
  8. Comunidade, boa tarde! Estou iniciando no mundo do VBA e tenho desenvolvido algumas soluções para otimização de minhas rotinas no trabalho, porém estou com uma dificuldade em uma solução, cuja qual eu encontrei porém o código esta pesado e leva tempo até processá-lo, peço então, o apoio de vocês no sentido de uma otimização do meu código, ou de um código novo que possa fazer tal função. Tenho um formulário, neste há uma combobox cuja qual eu quero que exiba os valores resultantes de um filtro aplicado a uma planilha que está nesta mesma pasta de trabalho. Consegui fazer através da aplicação do filtro e checagem das células vísiveis. O problema é que a planilha onde é feito o filtro é longa e tem quase 6000 linhas, sendo assim, o código que desenvolvi demora a exibir os resultados na combobox, segue este abaixo. Há alguma solução PS: não fiz por cells.find porque as vezes preciso de 2 variáveis de busca para chegar a um resultado um pouco mais preciso. Sub Carrega_ComboBox1() Dim Cont_limp As Integer Cont_limp = 1 Planilha3.Activate Selection.CurrentRegion.Select Selection.AutoFilter ActiveSheet.Range("$A$5:$L$6169").AutoFilter Field:=8, Criteria1:= _ "=*limpeza*", Operator:=xlAnd, Criteria2:="=*terreno*" Range("H5").Select Do Until ActiveCell.Value = "" ActiveCell.Offset(Cont_limp, 0).Select If ActiveCell.EntireRow.Hidden = False Then UserForm1.ComboBox1.AddItem ActiveCell.Value End If Loop End Sub Desde já agradeço

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!