MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Não reconhece cedilha em nome de arquivo

    Compartilhe
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 332
    Registrado : 23/01/2017

    [Resolvido]Não reconhece cedilha em nome de arquivo

    Mensagem  thiagomcosta em 15/10/2018, 17:12

    Estou com o seguinte caso:

    Pego o nome do arquivo através dos camandos abaixo (uma adaptação, na verdade ele varre a pasta, joga numa array, etc):
    Código:
    Set fObject = CreateObject("Scripting.FileSystemObject")
    Set vPastaFormandos = fObject.GetFolder(vPasta)
    For Each vAtual In vPastaFormandos.Files
        vNomeArquivo = vAtual.Name
    Next

    Tem um dos arquivos que se chama:
    Código:
    660_18095__thumbnail_mayra criança.jpg

    Mas o retorno é:
    Código:
    660_18095__thumbnail_mayra crianc¸a.jpg

    Tentei mudar, sem sucesso, o retorno com:
    Código:
    replace(vNomeArquivo, "c¸", "ç")

    Consegui identificar o caractere após o c como ASCII(184),  através da função
    Código:
    For i=1 to Len(vNomeArquivo)
     Debug.Print(Asc(Mid(vNomeArquivo, i, 1)))
    Next

    Mas se eu colocar uma condicional
    Código:
    Mid(vNomeArquivo, i, 1) = Chr(184)
    ou
    Código:
    Mid(vNomeArquivo, i, 1) = "¸"
    Ele não localiza o caractere

    Alguém já passou por algo semelhante?
    Alguma sugestão?


    Última edição por thiagomcosta em 29/10/2018, 17:32, editado 1 vez(es)
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10283
    Registrado : 04/11/2009

    Re: [Resolvido]Não reconhece cedilha em nome de arquivo

    Mensagem  JPaulo em 15/10/2018, 17:45

    Se você inserir o debug após o obter o nome do ficheiro, o que é que aparece na janela immediate ?

    Código:
    vNomeArquivo = vAtual.Name
    Debug.Print vNomeArquivo


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    avatar
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10283
    Registrado : 04/11/2009

    Re: [Resolvido]Não reconhece cedilha em nome de arquivo

    Mensagem  JPaulo em 15/10/2018, 17:50

    Acredito que assim resolverá;

    Código:
    Set fObject = CreateObject("Scripting.FileSystemObject")
    Set vPastaFormandos = fObject.GetFolder(vPasta)
    For Each vAtual In vPastaFormandos.Files
        vNomeArquivo = RemoveAccents(vAtual.Name)
        Debug.Print vNomeArquivo
    Next

    Código:
    Public Function RemoveAccents(sInputString As String) As String
        On Error GoTo Error_Handler
        Dim aNotAllowed()        As String
        Dim aReplacements()      As String
        Dim i                    As Long
     
        aNotAllowed = Split("à,á,â,ã" & _
                            ",ä,å,ç,è,é,ê,ë,ì,í,î,ï,ð,ò,ó,ô,õ,ö,ù,ú,û,ü,ý,ÿ", ",")
        aReplacements = Split("a,a,a" & _
                              ",a,a,a,c,e,e,e,e,i,i,i,i,o,o,o,o,o,o,u,u,u,u,y,y", ",")
     
        If UBound(aNotAllowed) <> UBound(aReplacements) Then
            MsgBox "The number of 'Not allowed characters' does not match the number of" & _
                  " 'Replacements'.", vbCritical Or vbOKOnly, "Operation Terminated"
            GoTo Error_Handler_Exit
        End If
     
        RemoveAccents = sInputString
        For i = 0 To UBound(aNotAllowed)
            RemoveAccents = Replace(RemoveAccents, aNotAllowed(i), aReplacements(i))
        Next i
     
    Error_Handler_Exit:
        On Error Resume Next
        Exit Function
     
    Error_Handler:
        MsgBox "The following error has occured" & vbCrLf & vbCrLf & _
              "Error Number: " & Err.Number & vbCrLf & _
              "Error Source: RemoveAccents" & vbCrLf & _
              "Error Description: " & Err.Description & _
              Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Line No: " & Erl) _
              , vbOKOnly + vbCritical, "An Error has Occured!"
        Resume Error_Handler_Exit
    End Function


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver este link.]

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    [Você precisa estar registrado e conectado para ver esta imagem.] [Você precisa estar registrado e conectado para ver este link.]
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 332
    Registrado : 23/01/2017

    Re: [Resolvido]Não reconhece cedilha em nome de arquivo

    Mensagem  thiagomcosta em 15/10/2018, 17:59

    Pior que continua na mesma.

    Fiz um teste, inclui antes um outro cedilha.
    O retorno foi o seguinte:
    Código:
    FormatFactory660_18095_INFANTIL_thumbnail_mayra criançc¸a.jpg

    E usando a função RemoveAccents()
    Código:
    FormatFactory660_18095_INFANTIL_thumbnail_mayra criancc¸a.jpg

    Ou seja, a função está funcionando.


    Este arquivo vem de um outro sistema. Vou entrar em contato com o desenvolvedor de lá para ver como que o arquivo é subido pelo cliente e depois como é baixado por nós aqui. De repente dá uma luz para resolver este problema.
    avatar
    thiagomcosta
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 332
    Registrado : 23/01/2017

    Re: [Resolvido]Não reconhece cedilha em nome de arquivo

    Mensagem  thiagomcosta em 29/10/2018, 17:31

    Só para dar um retorno ao fórum.
    Não consegui resolver o problema com o Access e VBA.

    Criei uma aplicação em c# que já faz toda a manipulação dos arquivos necessárias. Pelo C# eu consigo identificar os caracteres e renomear os arquivos. Deixei a aplicação semelhante aos formulários que uso do Access e criei um botão para abrir o aplicativo. Os usuários nem percebem que estão trabalhando fora do Access, acham que é uma janela nova que abriu.

    Problema resolvido, usuário feliz e o mistério dos caracteres contínua.

      Data/hora atual: 16/12/2018, 11:21