Funções de cadeia VBA adicionais
Cada linguagem de programação tem um conjunto de funções nativas que é "completo" no sentido em que permite ao utilizador produzir qualquer resultado de que necessite. As linguagens podem diferir tanto nos nomes dados às funções - seguindo certas tradições - como nos argumentos disponíveis para ajustar o resultado. Algumas funções estão disponíveis numa língua, mas não noutras. O suplemento Code VBA acrescenta algumas funções que estão disponíveis noutras linguagens, como o VB.NET, e que são aqui apresentadas. Para indicar que se trata de funções String, os seus nomes foram prefixados por 'String'
Começa com
Testa se uma String começa com uma substring.
Public Function StringStartsWith(Expression As String, Find As String, _
Optional Compare As VbCompareMethod = vbBinaryCompare) As Boolean
'Returns boolean value indicating whether the inputstring starts within
' a certain string or not.'
'?StringStartsWith("abcd","ab") > True'
'?StringStartsWith("abcd","b") > False'
'?StringStartsWith("b","ab") > False'
'?StringStartsWith("b","ba") > False'
'?StringStartsWith("abcd","") > True maybe better to raise error'
'Err.Raise 5, "StartsWith", "Invalid procedure call"'
StringStartsWith = InStr(1, Expression, Find, Compare) = 1
End Function
Na barra de ferramentas Código VBA, selecione VBA » String » Fragments »

Termina com
Determina se o fim da cadeia de caracteres especificada corresponde ao carácter especificado
Public Function StringEndsWith(Expression As String, Find As String, _
Optional Compare As VbCompareMethod = vbBinaryCompare) As Boolean
'Returns boolean value indicating whether the inputstring ends wit a
' certain string or not.'
'?StringEndsWith("abcd","cd") > True'
'?StringEndsWith("abcd","cD") > False'
StringEndsWith = InStrRev(Expression, Find, -1, Compare) = Len(Expression) - Len(Find) + 1
End Function
Contém
Testa se uma cadeia, célula ou intervalo contém a substring que pretende encontrar
Public Function StringContains(Expression As String, Part As String, _
Optional Compare As VbCompareMethod = vbBinaryCompare) As Boolean
'Returns a value indicating whether a specified (sub-)string occurs within this string.'
'?StringContains("ab", "d",vbBinaryCompare) > False'
'?StringContains("ab", "b",vbBinaryCompare) > True'
'?StringContains("ab", "a",vbBinaryCompare) > True'
'?StringContains("abcd", "bc",vbBinaryCompare) > True'
StringContains = (InStr(1, Expression, Part, Compare) >= 1)
End Function
Inserir
Devolve uma nova cadeia de caracteres na qual uma cadeia de caracteres especificada é inserida numa posição de índice especificada na cadeia de caracteres original original
Function Insert(Expression1 As String, startIndex As Long, Expression2 As String) As String
'Returns a new string in which a specified string is inserted at a specified index position
' in the input string.'
'?Stringinsert("abc",1,"xy") > xyabc'
'?Stringinsert("abc",2,"xy") > axybc'
'?Stringinsert("abc",3,"xy") > abxyc'
'?Stringinsert("abc",4,"xy") > abcxy'
'?Stringinsert("abc",0,"xy") > error 5 Invalid procedure call'
'?Stringinsert("abc",5,"xy") > error 5 Invalid procedure call'
'to make forgiving, uncomment below lines'
'If StartIndex < 1 Then StartIndex = 1'
'If Len(Expression1) < StartIndex Then StartIndex = Len(Expression1) + 1'
StringInsert = Mid(Expression1, 1, StartIndex - 1) & Expression2 & Mid(Expression1, _
StartIndex, Len(Expression1) - StartIndex + 1)
End Function
Remover
Remove o número especificado de substrings da cadeia de caracteres, começando no início da cadeia de caracteres
Public Function StringRemove(Expression As String, Find As String, Optional Start As Integer = 1, _
Optional Count As Integer = 1) As String
'Returns a new string in which a specified number of characters from the current string are deleted.'
'Removes substring from string using and analogous to VBA Replace function:'
'first the replace is done, then substring is created based on Start'
'?StringRemove(Expression:="abab", Find:="b") > aab'
'?StringRemove(Expression:="abab", Find:="b", Count:=2) > aa'
'?StringRemove(Expression:="abcb", Find:="b",Start:=1) > acb'
'?StringRemove(Expression:="abcb", Find:="b",Start:=2) > cb'
'?StringRemove(Expression:="abcb", Find:="b",Start:=1, Count:=2) > ac'
StringRemove = Replace(Expression:=Expression, Find:=Find, Replace:=vbNullString, Start:=Start, _
Count:=Count)
End Function
PadLeft
Devolve uma nova cadeia de caracteres de um comprimento especificado em que o início da cadeia de caracteres atual é preenchido com espaços ou com um carácter Unicode especificado
Public Function StringPadLeft(Expression As String, width As Integer, Optional Char As String = " ")
'Returns a new string of a specified length in which the beginning of the current string is
' padded with spaces or with a specified character.''
'?StringPadLeft("abc",6,"x") > xxxabc'
'?String"|" & PadLeft("abc",6) > | abc'
StringPadLeft = Right(String(width, Char) & Expression, width)
End Function
PadRight
Devolve uma nova cadeia de caracteres com um comprimento especificado em que o fim da cadeia atual é preenchido com espaços ou com um carácter Unicode especificado
Public Function StringPadRight(Expression As String, length As Integer, Optional Char As String = " ")
'Returns a new string of a specified length in which the end of the current string is padded
' with spaces or with a specified character.'
'?StringPadright("abc",6,"x") > abcxxx'
StringPadRight = Left(Expression & String(length, Char), length)
End Function
ToCharArray
Copia os caracteres de uma string para uma matriz de caracteres Unicode.
Public Function StringToCharArray(Expression As String) As Variant
'Copies the characters in this instance to an array.'
'arr = ToCharArray("abcd"): For i = LBound(arr) To UBound(arr): ?arr(i): Next'
Dim arr As Variant 'array
Dim i As Integer
ReDim arr(Len(Expression) - 1)
For i = 1 To Len(Expression)
arr(i - 1) = Mid$(Expression, i, 1)
Next
StringToCharArray = arr
End Function
IsNullOrEmpty
Indica se a cadeia especificada é vbNullString ou uma cadeia vazia ("") ou não. Esta função não está incluída - em vez disso, pode utilizar no mesmo menu o fragmento 'Is Length Greater Than 0' que insere o código inverso, mas correspondente, basta mudar > para =.
= (Len() > 0)
Se o fragmento for utilizado numa posição de condição, como If ... Then
, o resultado será o
pretendido
If (Len(
com uma cadeia selecionada inserida na posição ⟨String⟩
IsNullOrWhiteSpace
Indica se a cadeia de caracteres especificada é vbNullString ou uma cadeia de caracteres vazia ("") ou apenas espaços em branco ou não.
Note-se que vbTab
não é considerado nesta implementação
= (Len(Trim()) = 0)
IndexOf e LastIndexOf
Informa a posição do índice baseado em um da primeira ou última ocorrência, respetivamente, de um caractere ou cadeia de caracteres Unicode especificado nesta instância. O método devolve 0 se o carácter ou cadeia de caracteres não for encontrado
No VBA, IndexOf
é designado por InStr
No VBA LastIndexOf
chama-se InStrRev
Subcadeia
Não existe um equivalente completo para String.Substring do VB.NET. O mais próximo é a função Mid
. Outros procedimentos para obter substrings
são Left e Right.
Concat
Ter uma função especial para a concatenação não é muito útil, tendo em conta o simples operador & - ver Concatenação
Comparar
Para além dos operadores de comparação comuns que podem ser utilizados para comparar cadeias de caracteres, = e ⟨⟩, o equivalente para VB.NET String.Compare é a função função StrComp explicada aqui....