Uma família de softwares de planilhas da Microsoft com ferramentas para analisar, criar gráficos e comunicar dados
Refiz novamente com o seu codigo e o resultado foi este:
Não há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
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.
Uma família de softwares de planilhas da Microsoft com ferramentas para analisar, criar gráficos e comunicar dados
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.
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 |
|---|
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
Olá
Bem vindo à Comunidade Microsoft 365 e Office
Tudo bem? Algumas sugestões para tentar reparar o erro:
PtrSafe na declaração da função para compatibilidade com VBA 64 bits.Long por LongPtr para variáveis que tratam endereços de memória, pois LongPtr adapta-se ao tamanho do ponteiro do sistema.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.