Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

.: Vitrine

Carregando artigos...

Views

Mostrando postagens com marcador udf. Mostrar todas as postagens
Mostrando postagens com marcador udf. Mostrar todas as postagens

MS Access | Detectando e Extraindo Caracteres Invisíveis - UDF for Excel and Access that Extracts all Invisible and Special Characters

MS Access | Detectando e Extraindo Caracteres Invisíveis - UDF for Excel and Access that Extracts all Invisible and Special Characters

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


Comente e compartilhe este artigo!


brazilsalesforceeffectiveness@gmail.com

VBA Excel - 13 Funções Interessantes




É sempre bom podermos sacar algumas soluções prontas, para que apenas as copiemos e colemos em nossas necessidades. Ahhh, você nunca fez isso? Mas este Blog existe para isso. Para que você copie e use!

Para facilitar a sua vida coloco abaixo alguns exemplos que espero sejam úteis:

- Delete arquivos facilmente, quando estes não estiverem em uso.

Caracteres coringas (*) podem ser usados em substituição ao nome do arquivo (Mas cuidado!).

Sub DelFile() 
' Author: André Bernardes 
' Date: 13.10.2008 – 16:10 
' Contact: bernardess@gmail.com 

Dim MyFile As String 'Esta Linha de código é opcional 

On Error Resume Next 'Caso ocorram erros, estes não serão percebidos por usuários. 

Let MyFile = "c:\folder\filename.xls" 

Kill MyFile 
End Sub 

 - Protegendo a pasta (worksheet) corrente com uma senha de proteção.

Sub ProtegSheet() 
' Author: André Bernardes 
' Date: 13.10.2008 – 16:10 
Dim Psswrd ' Esta linha de código é opcional.
Let Psswrd = "bernardes"
ActiveSheet.Protect Psswrd, True, True, True 
End Sub

 - Desproteja a pasta (worksheet) corrente com uma senha de proteção.

Sub UnProtegSheet() 
' Author: André Bernardes
 ' Date: 13.10.2008 – 16:10
 ' Contact: bernardess@gmail.com Let Psswrd = "bernardes"

ActiveSheet.Unprotect Psswrd 
End Sub

 - Protegendo todas as pastas (worksheets) de uma mesma planilha.

Sub ProtegAll() 
' Author: André Bernardes 
' Date: 11.10.2008 – 08:05 
' Contact: bernardess@gmail.com Dim PlansCount 

' Esta linha de código é opcional. Dim j 
' Esta linha de código é opcional.

Let PlansCount = Application.Sheets.Count 

' Retorna quantas pastas (worksheets) contém nesta planilha.
Sheets(1).Select 

' Aqui selecionamos a primeira pasta (worksheet).
For j = 1 To PlansCount ActiveSheet.Protect
If j = PlansCount Then End End If
ActiveSheet.Next.Select Next j 
End Sub

 - Prevenindo o usuário quanto a área da pasta (worksheets) que não pode ser alterada.

Este exemplo previnirá o usuário sobre selecionar células num range (área) específico na pasta (worksheet). 

Este procedimento pode ser escrito na própria pasta (worksheet) ou num módulo.

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
' Author: André Bernardes 
' Date: 10.10.2008 – 17:55 
' Contact: bernardess@gmail.com 

If Not Application.Intersect(Target, Range("A1:A100")) Is Nothing Then
Cells(ActiveCell.Row, 2).Select
MsgBox "Descupe, mas não pode selecionar células na faixa: A1:A100!"
End If
End Sub

 - Como obter o local de atividade da aplicação corrente:

MsgBox "Local de Atividade e nome da pasta: " & CurDir

 - Como mudar o local de atividade da aplicação:

ChDrive "D" ' changes to the F-station

 - Como mudar a pasta de atividade atual da aplicação:

ChDir "D:\Meus Documentos\Privado"

 - Como determinar se um arquivo existe na pasta:

If Dir("D:\Meus Documentos\MyPlan.xls") <> "" Then 

10º - ' Quando o arquivo não existe retorna "" (uma string vazia).

Se não especificar o local, o Excel usa o local atual. 

Se não especificar as pasta, o Excel usa a pasta onde a aplicação está. 

Como podemos criar uma nova pasta?

MkDir "NovaPastaParticular" ' Cria uma nova pasta no local que a planilha atual está.      
MkDir "D:\Meus Documentos\NovaPastaParticular" ' Cria uma nova pasta no local indicado.

11º - Como apagar uma pasta (A pastas precisa estar vazia):

RmDir "NovaPastaParticular" ' Deleta a subpasta no local onde a planilha atual está.
RmDir "D:\Meus Documentos\NovaPastaParticular" ' Deleta a subpasta no local indicado.

12º - Como copiar um arquivo (o mesmo precisa estar fechado):

FileCopy "Apontamentos.xls", "BAK-Apontamentos.xls" ' Copia-o na pasta local onde a planilha corrente está.

FileCopy "Apontamentos.xls", "X:\BAK-Apontamentos.xls" ' Copia o arquivo na pasta indicada.

13º - Como mover um arquivo (o mesmo precisa estar fechado):

Let Old = "C:\Old\Balanço.xls" ' Localização original do arquivo.
Let New = "C:\New\Balanço.xls" ' Nova localização do arquivo.

Name Old As New ' Move o arquivo.


Deixe os seus comentários! Envie este artigo, divulgue este link...

brazilsalesforceeffectiveness@gmail.com


✔ Brazil SFE®Author´s Profile  Google+   Author´s Professional Profile   Pinterest   Author´s Tweets

VBA Excel - Retorna a Última Linha de uma planilha

Function LastRow (nColumn As String, InitLine As Single) As Single
    ' Author:                     Date:               Contact:
    ' André Bernardes             11/08/2008 09:01    bernardess@gmail.com
    ' Retorna o número de ocorrências.

    Dim nLine As Single
    Dim nStart As Single
    Dim nFinito As Single
    Dim Cabessalho As Single
    Dim nCeo As String

    Application.Volatile

    Let nStart = InitLine + 1
    Let nFinito = 65000
    Let Cabessalho = InitLine

    Do While nStart < nFinito
        Let nCeo = nColumn & Trim(Str(nStart))

        If Application.ActiveSheet.Range(nCeo).Value = "" Then
            Exit Do
        End If

        'Let Application.StatusBar.Value = " Linha: " & nStart
        Let nStart = nStart + 1
    Loop

    Let LastRow = (nStart - 1) '- Cabeçalho
    'Let Application.StatusBar.Value = "  "
End Function


brazilsalesforceeffectiveness@gmail.com


✔ Brazil SFE®Author´s Profile  Google+   Author´s Professional Profile   Pinterest   Author´s Tweets

VBA Excel - Retornando o Limite da Coluna de um Range



Como faço para descobrir a última coluna com dados numa Planilha?

Function LASTINCOLUMN (rngInput As Range)
    ' Author:                     Date:               Contact:
    ' André Bernardes             11/08/2008 09:01    bernardess@gmail.com
    '
    Dim WorkRange As Range
    Dim i As Integer, CellCount As Integer
    
    Application.Volatile

    Set WorkRange = rngInput.Columns(1).EntireColumn
    Set WorkRange = Intersect(WorkRange.Parent.UsedRange, WorkRange)
    
    Let CellCount = WorkRange.Count

    For i = CellCount To 1 Step -1
        If Not IsEmpty(WorkRange(i)) Then
            Let LASTINCOLUMN = WorkRange(i).Value
            Exit Function
        End If
    Next i
End Function


Tags: VBA, Excel, UDF, Column, coluna, last, última




diHITT - Notícias