Não é raro precisarmos extrair caracteres invisíveis de uma string. E isso pode tomar um tempo enorme até descobrirmos qual é o real problema.
Conheça e faça download de uma planilha pronta do Excel que calcula o TEMPO e a DISTÂNCIA de viagem usando a API do Google Maps
Alguns caracteres especiais não podem ser vistos, pois atrapalham no momento em que agrupamos dados.
Como retirá-los?
Essa função abaixo foi melhorada, tem o escopo ampliado para pegar vários desses caracteres:
Aprenda: 17 Passos Essenciais para Melhorar seu Código VBA
Public Function ExtractInviChars (strCk As String, Optional strRepWith As String = "") As String
' co-Author: André Bernardes
' Date: 16.08.22
' Description: Extrai caracters invisíveis.
' Caracteres de nome de arquivo ilegais incluídos numa string padrão, entre outros, são: ? [ ] / = + < > :; * " , '
' MS EXCEL: A função TIRAR foi desenvolvida para remover os
' 32 primeiros caracteres não imprimíveis no código ASCII
' de 7 bits (valores de 0 a 31) do texto. O conjunto de
' caracteres Unicode contém outros caracteres não imprimíveis
' (valores 127, 129, 141, 143, 144 e 157). Por si própria, a
' função TIRAR NÃO remove esses caracteres adicionais não
' imprimíveis.
'From http://www.utteraccess.com/wiki/index.php?title=Strip_Illegal_Characters&diff=4158&oldid=4156
On Error GoTo StripIllErr
Dim intI As Integer
Dim intPassedString As Integer
Dim intCheckString As Integer
Dim strChar As String
Dim strIllegalChars As String
Dim intReplaceLen As Integer
If IsNull(strCk) Then Exit Function
'Adicione ou remova todos os caracteres que precisar na string abaixo que servirá de base comparativa:
Let strIllegalChars = "?[]/=+<>:;,*-" & Chr(34) & Chr(39) & Chr(32) _
& Chr(0) & Chr(1) & Chr(2) & Chr(3) & Chr(4) & Chr(5) & Chr(6) & Chr(7) & Chr(8) _
& Chr(9) & Chr(10) & Chr(11) & Chr(12) & Chr(13) & Chr(14) & Chr(15) & Chr(16) _
& Chr(17) & Chr(18) & Chr(19) & Chr(20) & Chr(21) & Chr(22) & Chr(23) & Chr(24) _
& Chr(25) & Chr(26) & Chr(27) & Chr(28) & Chr(29) & Chr(30) & Chr(31) & Chr(127) _
& Chr(129) & Chr(141) & Chr(143) & Chr(144) & Chr(157)
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() _
'& Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr() & Chr()
Let intPassedString = Len(strCk)
Let intCheckString = Len(strIllegalChars)
Let intReplaceLen = Len(strRepWith)
If intReplaceLen > 0 Then 'Caractere foi inserido para ser usado como caractere de substituição
If intReplaceLen = 1 Then 'verifique se o caractere em si não é um caractere ilegal
If InStr(strIllegalChars, strRepWith) > 0 Then
MsgBox "Você não pode substituir um caractere ilegal por outro caractere ilegal", _
vbOKOnly + vbExclamation, "Caractere inválido"
Let fStripIllegal = strCk
Exit Function
End If
Else 'apenas um caractere de substituição permitido
MsgBox "Apenas um caractere é permitido como caractere de substituição", _
vbOKOnly + vbExclamation, "String de substituição inválida"
Let fStripIllegal = strCk
Exit Function
End If
End If
If intPassedString < intCheckString Then
For intI = 1 To intCheckString
Let strChar = Mid(strIllegalChars, intI, 1)
If InStr(strCk, strChar) > 0 Then
Let strCk = Replace(strCk, strChar, strRepWith)
End If
Next intI
Else
For intI = 1 To intPassedString
Let strChar = Mid(strIllegalChars, intI, 1)
If InStr(strCk, strChar) > 0 Then
Let strCk = Replace(strCk, strChar, strRepWith)
End If
Next intI
End If
Let ExtractInviChars = Trim(strCk)
StripIllErrExit:
Exit Function
StripIllErr:
MsgBox "Ocorreu o seguinte erro: " & Err.Number & vbCrLf _
& Err.Description, vbOKOnly + vbExclamation, "Erro inesperado..."
Let fStripIllegal = strCk
Resume StripIllErrExit
End Function
Nenhum comentário:
Postar um comentário