Erro ao executar projeto (macro vba)

Anônima
2024-11-06T13:42:00+00:00

EU tenho uma instrução vba que após atualização começou a aparecer que esse código deveria ser atualizado para sistemas de 64 bits. Corrigindo o erro do projeto inseri no código após declarar a função a opção ptrsafe. aparentemente o projeto foi concluido, mas ao executar a macro, agora dá o erro que a extensão DLL, chamada não foi encontrada, mas a DLL está nos diretórios. Alguem ai poderia me ajudar.

Microsoft 365 e Office | Excel | Para empresas | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

7 respostas

Classificar por: Mais útil
  1. Anônima
    2024-11-06T17:13:57+00:00

    Refiz novamente com o seu codigo e o resultado foi este:

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2024-11-06T16:28:04+00:00

    Retornou a mesma resposta quando alterei com a informação que vc me passou.

    Esta resposta foi útil?

    0 comentários Sem comentários
  3. Dio Xavier 295.1K Pontos de reputação Moderador Voluntário
    2024-11-06T15:20:20+00:00

    Olá

    Segue o VBA com algumas alterações:

    Declare PtrSafe Function Extenso Lib "C:\Windows\SysWow64\Extens32.dll" Alias "extenso" (ByVal Valor As LongPtr, ByVal Retorno As LongPtr) As Integer <br> <br>Global Retorno As String <br>Global contador As Integer <br> <br>Function ValorExtenso(strValor As String) As String <br> On Error GoTo ExtVBA_Err <br> Dim strRetorno As String <br> Dim x As Integer <br> strRetorno = String$(512, 32) '512 espaços <br> x = Extenso(strValor, strRetorno) <br> ValorExtenso = Trim$(Left$(strRetorno, x)) <br> Retorno = ValorExtenso <br> Exit Function <br>ExtVBA_Err: <br> MsgBox Err.Description <br>End Function <br> <br>Public Sub WriteExtens() <br> Application.ScreenUpdating = False <br> On Error GoTo ManusearErro <br> ValorExtenso Range("C13").Value <br> FirstLetter = UCase(Left(Retorno, 1)) <br> FinalWord = FirstLetter & Mid(Retorno, 2) <br> Range("D13").Formula = "(" & FinalWord & ")" <br> Exit Sub <br>ManusearErro: <br> Select Case Err.Number <br> Case 5 <br> Range("D13").Formula = "" <br> Case Else <br> MsgBox Err.Number & "-" & Err.Description <br> End Select <br>End Sub

    Esta resposta foi útil?

    0 comentários Sem comentários
  4. Anônima
    2024-11-06T14:31:04+00:00

    Inseri conforme informado e informa mesmo assim que o arquivo não foi encontrado.

    Segue:

    Declare PtrSafe Function Extenso Lib "C:\Windows\SysWow64\Extens32.dll" Alias "extenso" (ByVal Valor As String, ByVal Retorno As String) As Integer

    Global Retorno

    Global contador As Integer

    Function ValorExtenso(strValor As String) As String

    On Error GoTo ExtVBA_Err

    Dim strRetorno As String

    Dim x As Integer

    strRetorno = String$(512, 32) '512 espaços

    x = Extenso(strValor, strRetorno)

    ValorExtenso = Trim$(Left$(strRetorno, x))

    Retorno = ValorExtenso

    ExtVBA_Fim:

    Exit Function

    ExtVBA_Err:

    MsgBox Err.Description

    Resume ExtVBA_Fim

    End Function

    Public Sub WriteExtens()

    Application.ScreenUpdating = False

    On Error GoTo ManusearErro

    ValorExtenso Range("c13").Value 
    

    'Extrai a primeira letra para ser passada para maiúscula:

    FirstLetter = UCase(Mid(Retorno, 1, 1))

    total = Len(Retorno)

    total2 = total - 1

    SecondWord = Right(Retorno, total2)

    FinalWord = FirstLetter & SecondWord

    '=>>>>>>>>>>>>>

    '"D13" é a célula onde o valor escrito por extenso aparecerá

    Range("D13").Formula = "(" & FinalWord & ")"

    Exit Sub

    ManusearErro:

    Select Case Err

    Case 5

    Range("D13").Formula = ""

    Exit Sub

    Case Else

    'MsgBox Err & "-" & Err.Description

    Exit Sub

    End Select

    End Sub

    Esta resposta foi útil?

    0 comentários Sem comentários
  5. Dio Xavier 295.1K Pontos de reputação Moderador Voluntário
    2024-11-06T13:54:14+00:00

    Olá

    Bem vindo à Comunidade Microsoft 365 e Office

    Tudo bem? Algumas sugestões para tentar reparar o erro:

    1. Ajuste para 64 bits*:*
      • Adicione PtrSafe na declaração da função para compatibilidade com VBA 64 bits.
      • Substitua Long por LongPtr para variáveis que tratam endereços de memória, pois LongPtr adapta-se ao tamanho do ponteiro do sistema.
    2. Confirme o Caminho da DLL*:*
      • Verifique o local da DLL e, se necessário, utilize o caminho completo na declaração:
      Declare PtrSafe Function NomeDaFuncao Lib "C:\caminho\para\sua\DLL.dll" (parametros)

    3. Compatibilidade da DLL*:*

    A DLL precisa ser de 64 bits para um ambiente VBA 64 bits. DLLs de 32 bits podem não ser carregadas corretamente.

    4. Pasta SysWow64 (Para DLLs 32 bits em 64 bits):

    Em sistemas 64 bits, coloque DLLs de 32 bits em C:\Windows\SysWow64, pois essa pasta é específica para compatibilidade de 32 bits.

    Essas mudanças devem permitir que o VBA reconheça e carregue a DLL corretamente no ambiente de 64 bits.

    Esta resposta foi útil?

    0 comentários Sem comentários