Página 1 de 1

AJUDA argumento para criar objeto de classe

Enviado: 25 Abr 2019 às 19:43
por samuazevedo
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

Re: AJUDA argumento para criar objeto de classe

Enviado: 26 Abr 2019 às 11:05
por samuazevedo
UP!