DUVIDA DE OTIMIZAR CODIGO.
Fala galera do VBmania,
Estou querendo otimizar um codigo mais não sei se é possivel fazer isso, bom vou explicar.
Tenho uma função quer verifica se o checkbox esta selecionado ou não, passo como parametro o nome do check, por exemplo check1.
Só que estou mexendo em um software que existe muitos check[ô]s. Como eu posso otimizar este codigo para que eu não faça um por um.
Na função FUNC_Check_Obrigatorio esta passando o check como objeto.
Abaixo o codigo que eu utilizo, eu somente troco o nome:
If FUNC_Check_Obrigatorio(Check1) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
A ideia é colocar o nome automatico, tentei fazer desta forma mais não dá certo.
Dim check As Control
For Each check In Me.Controls
If TypeOf check Is CheckBox Then
If FUNC_Check_Obrigatorio(check.Name) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Next
Alguém tem alguma sugestão de como fazer isso?
Abraços.
Estou querendo otimizar um codigo mais não sei se é possivel fazer isso, bom vou explicar.
Tenho uma função quer verifica se o checkbox esta selecionado ou não, passo como parametro o nome do check, por exemplo check1.
Só que estou mexendo em um software que existe muitos check[ô]s. Como eu posso otimizar este codigo para que eu não faça um por um.
Na função FUNC_Check_Obrigatorio esta passando o check como objeto.
Abaixo o codigo que eu utilizo, eu somente troco o nome:
If FUNC_Check_Obrigatorio(Check1) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
A ideia é colocar o nome automatico, tentei fazer desta forma mais não dá certo.
Dim check As Control
For Each check In Me.Controls
If TypeOf check Is CheckBox Then
If FUNC_Check_Obrigatorio(check.Name) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Next
Alguém tem alguma sugestão de como fazer isso?
Abraços.
olha só... vc já pensou em indexar isso?
PH1959,
Então está com index, por exemplo esta em grupos
check1(1) ate check1(10).
check2(1) ate check2(10).
...
...
check10(1) ate check10(10).
compreende, por isso que eu tenho um função que checa se tem algum item checado.
Eu queria Otimizar isso.
pq da muito trabalho e o codigo fica gigantesco fazendo grupo por grupo.
Então está com index, por exemplo esta em grupos
check1(1) ate check1(10).
check2(1) ate check2(10).
...
...
check10(1) ate check10(10).
compreende, por isso que eu tenho um função que checa se tem algum item checado.
Eu queria Otimizar isso.
pq da muito trabalho e o codigo fica gigantesco fazendo grupo por grupo.
Quando você executa essa função?
HUGOSSOUZA,
Esta função eu utilizo antes de salvar os registros.
Eu checo todos os objetos se estão checados antes de gravar no banco de dados.
Thiago
Esta função eu utilizo antes de salvar os registros.
Eu checo todos os objetos se estão checados antes de gravar no banco de dados.
Thiago
tenta assim
Dim CHK As Control
For Each CHK In Me.Controls
If TypeOf CHK Is CheckBox Then
If FUNC_Check_Obrigatorio(CHK) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Ne
xt
MARCELO-TREZE,
Já tinha tentado desta forma tb, só que ao passar pelo paramentro ele fica igual a ZERO e acaba gerando erro na função.
O ideal mesmo é passar como parametro o nome do objeto.
Thiago.
Já tinha tentado desta forma tb, só que ao passar pelo paramentro ele fica igual a ZERO e acaba gerando erro na função.
O ideal mesmo é passar como parametro o nome do objeto.
Thiago.
posta sua função Check_Obrigatorio
Não seria assim?
Veja exemplo anexo
Sub VerCheck(F As Form)
Dim Check As Integer
For Check = 1 To F.Controls.Count - 1
If TypeOf F.Controls(Check) Is CheckBox Then
If F.Controls(Check).Value = 0 Then
MsgBox F.Controls(Check).Name & [Ô] - Não marcado[Ô]
Exit For
End If
End If
Next
End Sub
Veja exemplo anexo
MARCELO-TREZE,
Segue em anexo o codigo da função.
Public Function FUNC_Check_Obrigatorio(Check As Object) As Boolean
Dim iContador As Integer
Dim iQtde As Integer
Dim Checks_Habilitados As Integer
FUNC_Check_Obrigatorio = True
iQtde = 0
For iContador = 1 To Check.Count
If Check(iContador).Value = 1 Then
iQtde = iQtde + 1
End If
Next
Checks_Habilitados = 0
For iContador = 1 To Check.Count
If Check(iContador).Enabled Then
Checks_Habilitados = Checks_Habilitados + 1
End If
Next
If iQtde = 0 And Checks_Habilitados > 0 Then
For iContador = 1 To Check.Count
Check(iContador).BackColor = vbRed
Next
Call SUB_Exibir_Mensagem(msgCampoObrigatorio, Check(2))
FUNC_Check_Obrigatorio = False
End If
End Function
ROBIU,
Estou testando seu codigo ainda.
Mas obrigado pela ajuda por enquanto.
Segue em anexo o codigo da função.
Public Function FUNC_Check_Obrigatorio(Check As Object) As Boolean
Dim iContador As Integer
Dim iQtde As Integer
Dim Checks_Habilitados As Integer
FUNC_Check_Obrigatorio = True
iQtde = 0
For iContador = 1 To Check.Count
If Check(iContador).Value = 1 Then
iQtde = iQtde + 1
End If
Next
Checks_Habilitados = 0
For iContador = 1 To Check.Count
If Check(iContador).Enabled Then
Checks_Habilitados = Checks_Habilitados + 1
End If
Next
If iQtde = 0 And Checks_Habilitados > 0 Then
For iContador = 1 To Check.Count
Check(iContador).BackColor = vbRed
Next
Call SUB_Exibir_Mensagem(msgCampoObrigatorio, Check(2))
FUNC_Check_Obrigatorio = False
End If
End Function
ROBIU,
Estou testando seu codigo ainda.
Mas obrigado pela ajuda por enquanto.
muda Object para Checkbox na sua Função
e tente novamente o seu código da forma abaixo
Public Function FUNC_Check_Obrigatorio(Check As Checkbox) As Boolean
e tente novamente o seu código da forma abaixo
Dim check As Control
For Each check In Me.Controls
If TypeOf check Is CheckBox Then
If FUNC_Check_Obrigatorio(check) = False Then
FUNC_VALIDACAO = False
Exit Function
End If
End If
Next
Tópico encerrado , respostas não são mais permitidas