Notifications
Clear all

Verificar se split está vazio

5 Posts
2 Usuários
0 Reactions
1,035 Visualizações
(@edumanilha)
Posts: 20
Eminent Member
Topic starter
 

Tenho uma parte do meu código, em que faço um split, usando como separador ":", só que queria evitar de alguém fazer errado e colocar menos informação do que o necessário. No caso teria de ir até o (3), queria fazer uma verificação digamos, caso a pessoa digite qualquer coisa só com : no final ou mesmo só o conteúdo sem nenhum separador. Aí apareceria um aviso de que faltam informações!

Patch_split = Split(Plan1.Range("B3"), ":")

Tentei com IsEmpty, IsNull, = "", = 0...Como posso proceder para verificar caso não faça nada? Grato desde já!

 
Postado : 06/03/2018 5:32 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Olá, Edumanilha

Uma maneira simples de testar seria:

Sub SeuCódigo()
  Dim Patch_split As Variant
  If Plan1.Range("B3") Like "[!:]*:*[!:]" Then
    Patch_split = Split(Plan1.Range("B3"), ":")
  Else
    MsgBox "Faltam Informações"
  End If
End Sub

No código acima, o texto não pode nem começar nem terminar com dois-pontos. Além disso, tem que ter pelo menos dois conteúdos separados pelos dois-pontos.

Já para que tenha pelo menos 3: 'If Plan1.Range("B3") Like "[!:]*:*:*[!:]" Then

Também após vc ter explodido a string com Split, pode ler a quantidade de elementos com UBound(Patch_split)+1, aí, se forem menores que sua quantidade mínima, exibe uma mensagem, etc...

 
Postado : 06/03/2018 6:35 pm
(@edumanilha)
Posts: 20
Eminent Member
Topic starter
 

Olá, Edson! muito obrigado pelo retorno!

No meu caso o campo teria que ter 4 conteúdos! Ficaria então: "If Plan1.Range("B3") Like "[!:]*:*:*:*[!:]" Then" para checar se tem 4 conteúdos, sem dois pontos nem no começo e nem no fim, certo? No caso ela me atende bem, já que se a pessoa acabar preenchendo somente 1,2 ou 3 conteúdos, já daria erro! Poderia exemplificar esse UBound só para aprendizado? grato novamente!

 
Postado : 06/03/2018 7:54 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

...No meu caso o campo teria que ter 4 conteúdos! Ficaria então: "If Plan1.Range("B3") Like "[!:]*:*:*:*[!:]" Then" para checar se tem 4 conteúdos, sem dois pontos nem no começo e nem no fim, certo? No caso ela me atende bem, já que se a pessoa acabar preenchendo somente 1,2 ou 3 conteúdos, já daria erro!

Isso mesmo, poderia usar assim que já solucionaria o problema.

Poderia exemplificar esse UBound só para aprendizado?...

Vamos exagerar supondo que vc quisesse que o usuário sempre entrasse com, digamos, 20 valores. Então, ao invés de encher de asterisco-dois-pontos, vc testaria usando somente a validação inicial para um par, "[!:]*:*[!:]" como anteriormente e, depois da array ter sido preenchido, verificaria como foi a "colheita" através do UBound.

UBound significa Upper Bound ou seja, é limite superior da matriz.

Por exemplo, numa matriz:
X(0) = "a"
X(1) = "B"
X(2) = "x"

UBound(X) retornaria 2 ( X(2) é o último/maior índice). Como ela começou em 0, então a matriz tem UBound(X)+1 elementos, ou seja 2 + 1 = 3 elementos.

Então no exemplo que citei para testar se foram entrados exatamente 20 valores, vc usaria após a linha que fez o Split, por exemplo:

If UBound(Patch_split) < > 19 Then MsgBox "Entre 20 Valores separados por :" etc etc etc

Lembre-se que matrizes formadas por Split sempre começam em 0 (o LBound = Lower Bound é zero) por isso soma-se 1 para saber quantos elementos têm.

 
Postado : 07/03/2018 5:37 am
(@edumanilha)
Posts: 20
Eminent Member
Topic starter
 

Edson, muito obrigado pela ajuda com o split e a exemplificação do Ubound, já fica como carta na manga caso use mais valores em alguma outra planilha! Vou implementar daqui a pouco o split! Agradecido!

 
Postado : 07/03/2018 8:36 pm