AJUDA argumento para criar objeto de classe
Enviado: 25 Abr 2019 às 19:43
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
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