Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#34120
Boa tarde a todos, estou montando um cadastro de empresas. Até aí, nada de mais. Neste cadastro guardarei a máscara do código de produto para cada empresa. Por exemplo: "00.0000>L.00" para a empresa A, "000.000" para a empresa B, etc. Cada empresa poderá ter qualquer quantidade de caracteres e também letras para os produtos
Terei uma tabela única para os produtos, amarrados por uma coluna que conterá o CNPJ da empresa e outra para o código do produto.
A pergunta é como validar esta máscara tanto na quantidade de caracteres e respeitar a regra do que possa ser inserido em cada posição de acordo com a regra: na posição que for "0", só poderá ser digitado números, "9" poderá ser ou não números, ">L" letra em maiúscula e assim por diante, além de demonstrar corretamente.

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

03/07 - 08:33 Bom dia a todos, após alguns dias afastado, ontem finalmente consegui solucionar o problema. Não sei se é a melhor forma, mas o importante é que esta funcionando:

Private Sub txtCodProd_Change()

' 0 - O usuário deve inserir um dígito (0 a 9).
' # - O usuário pode inserir um dígito, um sinal de mais ou de menos.
' .,:;-/ - Espaços reservados de decimais e milhares, separadores de data e hora. O caractere que você selecionar dependerá das configurações regionais do Microsoft Windows.
' > - Converte todos os caracteres seguintes em letras maiúsculas.
' < - Converte todos os caracteres seguintes em letras minúsculas.

Dim bytCont As Byte
Dim bytQTotCarac As Byte
Dim blnResp As Boolean
Dim strCaracMasc As String
Dim strCaracPesq As String
Dim strCaracIns As String
'
blnResp = True
bytQTotCarac = Len(txtCodProd)
'
If frmProdutos.strTpRotina = "I" Then
'
For bytCont = 1 To bytQTotCarac
strCaracPesq = IIf(bytCont = 1, Left(txtCodProd.Text, 1), Right(Left(txtCodProd.Text, bytCont), 1))
'
strCaracMasc = IIf(bytCont = 1, Left(strMascProd, 1), Right(Left(strMascProd, bytCont), 1))
'
Select Case strCaracMasc
'
Case "0", "9"
If Asc(strCaracPesq) < 48 Or Asc(strCaracPesq) > 57 Then 'Números de 0 a 9
blnResp = False
Exit For
End If
'
Case Is = "#"
If Asc(strCaracPesq) < 48 Then ' Número: 0
If strCaracPesq <> "-" And strCaracPesq <> "+" Then
blnResp = False
Exit For
End If
ElseIf Asc(strCaracPesq) > 57 Then ' Número: 9
blnResp = False
Exit For
End If
'
Case ".", ",", ":", ";", "-", "/"
strCaracIns = Empty
'
If strCaracPesq <> "." And strCaracPesq <> "," And strCaracPesq <> ":" And _
strCaracPesq <> ";" And strCaracPesq <> "-" And strCaracPesq <> "/" Then
'
Select Case strCaracMasc
Case Is = "."
strCaracIns = "."
Case Is = ","
strCaracIns = ","
Case Is = ":"
strCaracIns = ":"
Case Is = "-"
strCaracIns = "-"
Case Is = "/"
strCaracIns = "/"
End Select
End If
txtCodProd.Text = Left(txtCodProd.Text, Len(txtCodProd) - 1) & _
strCaracIns & Right(txtCodProd.Text, 1)
'
Case "<", ">"
If strCaracMasc = ">" Then
'
' Caracteres: De A - ASC(65) até Z - ASC(90)
' À - ASC(192); Á - ASC(193); Â - ASC(194); Ã - ASC(195)
' É - ASC(201); Ó - ASC(211); Ô - ASC(212); Õ - ASC(213)
'
strCaracPesq = UCase(strCaracPesq)
If (Asc(strCaracPesq) < 65 Or Asc(strCaracPesq) > 90) And _
(Asc(strCaracPesq) < 192 Or Asc(strCaracPesq) > 195) And _
(Asc(strCaracPesq) < 211 Or Asc(strCaracPesq) > 213) And _
Asc(strCaracPesq) <> 201 Then
blnResp = False
Exit For
End If
Else
'
' Caracteres: De a - ASC(97) até z - ASC(122)
' à - ASC(224); Á - ASC(225); Â - ASC(226); Ã - ASC(227)
' É - ASC(233); Ó - ASC(243); Ô - ASC(244); Õ - ASC(245)
'
strCaracPesq = LCase(strCaracPesq)
If (Asc(strCaracPesq) < 97 Or Asc(strCaracPesq) > 122) And _
(Asc(strCaracPesq) < 224 Or Asc(strCaracPesq) > 227) And _
(Asc(strCaracPesq) < 243 Or Asc(strCaracPesq) > 245) And _
Asc(strCaracPesq) <> 233 Then
blnResp = False
Exit For
End If
End If
txtCodProd.Text = txtCodProd.Text & strCaracPesq
End Select
Next bytCont
End If
'
If Not blnResp Then
MsgBox "O Caracter é inválido na posição! Verificar!", vbCritical, "ERRO"
txtCodProd.Text = Left(txtCodProd.Text, Len(txtCodProd.Text) - 1)
End If
End Sub
Editado pela última vez por RogerioTonini em 03 Jul 2018 às 08:37, em um total de 1 vez.
#34243
Anexe um exemplo e coloque uma demonstração manual do resultado esperado. Assim acredito que a sua necessidade ficará mais clara e conseguirá ajuda.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord