Vídeo recomendado
https://youtu.be/diWPPPhW-9E

[RESOLVIDO] Erro atualização de código para 64bits

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Avatar do usuário
cy_rangel
Colaborador
Colaborador
Mensagens: 88
Registrado em: Sex Set 04, 2015 8:32 pm

[RESOLVIDO] Erro atualização de código para 64bits

Mensagem por cy_rangel »

Caros,

Boa-noite.

Tenho uma macro com a seguinte função dentro de um modulo:

Código: Selecionar todos

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
    lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As _
    Long
Ao iniciar a planilha aparece a mensagem em anexo, dizendo que o código do projeto deve ser atualizado para uso em sistemas 64bits. Alguém sabe me dizer como atualizo isso??? e se depois de atualizar em sistema de 64bits eu posso rodar a mesma macro sem dar erro em sistema como por exemplo de 32bits?

Desde já agradeço.

Att,
Cy Rangel
Anexos
imagem
imagem
erro 64 bits.PNG (24.57 KiB) Exibido 30044 vezes
Editado pela última vez por cy_rangel em Sex Jan 29, 2016 10:50 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Erro atualização de código para 64bits

Mensagem por Mikel Silveira Fraga »

Cy, boa noite mais uma vez.

Tenho visto que estas conseguindo evoluir bem no teu projeto. Muito bom.

Bem, na verdade é totalmente possível realizar uma estrutura que reconheça as diversas situações. Segue o código que você vai precisar substituir:

Código: Selecionar todos

#If VBA7 Then 'Declaração de API´s para versões do MS Office 2010+.
    
    #If Win64 Then 'Declaração para as versões 64 bits.
            
        Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As LongLong, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
        lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As LongLong) As _
        LongLong
            
    #Else 'Declaração para as versões 32 bits.
        
        Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
        lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As LongPtr) As _
        LongPtr
        
    #End If
    
#ElseIf VBA6 Then 'Declaração de API´s para versões do MS Office 2007-.
    
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal _
    lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As _
    Long

#End If
Dessa maneira, ele vai reconhecer a versão do VBA7 (existente nas versões do Office 2010, ou superiores, e dividido em 64 bits e 32 bits), como também nas versões do VBA6 (existente nas versões do Office 2007, ou inferiores).

Faça o teste e nos retorne.

Um excelente final de semana. Forte abraço.


Avatar do usuário
cy_rangel
Colaborador
Colaborador
Mensagens: 88
Registrado em: Sex Set 04, 2015 8:32 pm

Re: Erro atualização de código para 64bits

Mensagem por cy_rangel »

Obrigada Mikel, funcionou perfeitamente...

Essa variação acontece porque no meu trab. o office é mais antigo e em casa já é o 2013, mas que bom que assim funciona nos dois....

Ps.: a evolução do projeto é graças a vocês que estão sempre dispostos a ajudar... Sou muito grata por isso :)

Att,
Cy Rangel.


esresende
Acabou de chegar
Acabou de chegar
Mensagens: 5
Registrado em: Ter Mar 08, 2016 11:17 pm

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por esresende »

Boa Noite. Estou com esse mesmo problema, baixei aversão aqui do site http://www.tomasvasquez.com.br/blog/mic ... so-a-passo. Estou engatinhando em VBA e não estou conseguindo resolver. Quem ajudar agradeço.

Abras


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por Mikel Silveira Fraga »

Resende, bom dia.

Qual erro esta ocorrendo exatamente pra você? Pode postar o bloco de código onde o mesmo ocorre?

Ficamos no aguardo.


esresende
Acabou de chegar
Acabou de chegar
Mensagens: 5
Registrado em: Ter Mar 08, 2016 11:17 pm

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por esresende »

Boa tarde. A mensagem é exatamente a mesma, com o erro acontecendo no mesmo local. O Código está no link. Outra pergunta, ao baixar o arquivo do link citado anteriormente, vieram dois arquivos, MdC_FrontEnd ListView e ModeloCadastro_Dados, esse último ao executar dois cliques nada acontece. Qual a necessidade desses arquivos? para que serve esse primeiro?

Obrigado


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por Mikel Silveira Fraga »

Resende, bom dia. Tudo bem?

Então cara, se a mensagem é a mesma, é necessário que você pegue o mesmo código que passei acima e o adapte, corrigindo o erro.

Sobre os arquivos que vieram no arquivo compactado, os dois são necessários para que a ferramenta funcione. Eles funcionam da seguinte forma:
- MdC_FrontEnd ListView: nesta planilha, você vai ter acesso aos formulários, onde poderá cadastrar, pesquisar ou excluir os registros;
- ModeloCadastro_Dados: já nesta planilha, você vai localizar os registros armazenados/gravados.

Esse foi um modelo desenvolvido, trabalhando com as informações separadamente.

Espero ter conseguido esclarecer suas dúvidas.

Forte abraço e excelente semana.


Júnior
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Qua Jul 27, 2016 11:54 pm

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por Júnior »

Boa Noite,
Como ainda estou iniciando no excell (VBA), estou tendo dificuldade para resolver o mesmo problema e gostaria de uma ajuda. Ao iniciar a planilha aparece uma mensagem dizendo que o código do projeto deve ser atualizado para uso em sistemas 64bits. Eu preciso atualizar para um sistema de 64 bits, porém, de forma que ele ainda rode em um sistema de 32 bits. Isto é possível?
Tenho a seguinte função dentro de um módulo:

Option Explicit

Private Declare Function GetForegroundWindow Lib "user32" () As Long

Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _
ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)

Declare Function SetWindowsHookEx Lib _
"user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

Type POINTAPI
X As Long
Y As Long
End Type

Type MSLLHOOKSTRUCT
pt As POINTAPI
mouseData As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type

Const HC_ACTION = 0
Const WH_MOUSE_LL = 14
Const WM_MOUSEWHEEL = &H20A

Dim hhkLowLevelMouse, lngInitialColor As Long
Dim udtlParamStuct As MSLLHOOKSTRUCT
Public intTopIndex As Integer

Function GetHookStruct(ByVal lParam As Long) As MSLLHOOKSTRUCT

CopyMemory VarPtr(udtlParamStuct), lParam, LenB(udtlParamStuct)

GetHookStruct = udtlParamStuct

End Function

Function LowLevelMouseProc _
(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

On Error Resume Next

If (nCode = HC_ACTION) Then

If wParam = WM_MOUSEWHEEL Then

LowLevelMouseProc = True

'ATENÇÃO: Troque o nome do seu Userform
With frmCadastro

'ROLAR PARA CIMA
If GetHookStruct(lParam).mouseData > 0 Then
.ScrollTop = intTopIndex - 10
intTopIndex = .ScrollTop
Else
'ROLAR PARA BAIXO
.ScrollTop = intTopIndex + 10
intTopIndex = .ScrollTop
End If

End With

End If

Exit Function

End If

UnhookWindowsHookEx hhkLowLevelMouse
LowLevelMouseProc = CallNextHookEx(0, nCode, wParam, ByVal lParam)

End Function

Sub Hook_Mouse()
If hhkLowLevelMouse <> 0 Then
UnhookWindowsHookEx hhkLowLevelMouse
End If

hhkLowLevelMouse = SetWindowsHookEx _
(WH_MOUSE_LL, AddressOf LowLevelMouseProc, Application.Hinstance, 0)

End Sub

Sub UnHook_Mouse()

If hhkLowLevelMouse <> 0 Then UnhookWindowsHookEx hhkLowLevelMouse

End Sub

Sub Apagar_Dados()
'
' Apagar_Dados Macro
'

'
Range("O5:X5").Select
Selection.ClearContents
Range("O9:X2008").Select
Selection.ClearContents
Range("R5").Select
End Sub
Sub Consulta_Avancada()
'
' Consulta_Avancada Macro
'

'
Range("C8:L2008").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
("O4:X5"), CopyToRange:=Range("Plan1!Extract"), Unique:=False

MsgBox "Consulta Efetuada com Sucesso!", vbInformation + vbOKOnly, "Consulta"

End Sub



Desde já,
Muito Obrigado!!!


alves
Acabou de chegar
Acabou de chegar
Mensagens: 1
Registrado em: Qua Out 12, 2016 6:05 pm

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por alves »

Mikel.
Estou como o mesmo problema citado acima.

Aonde coloco esse código que você informou? Em algum módulo?


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: [RESOLVIDO] Erro atualização de código para 64bits

Mensagem por Mikel Silveira Fraga »

Alves, boa noite e seja bem vindo ao fórum.

Não conheço o seu modelo, mas geralmente, para esse tipo de código, é recomendado que seja colocado em módulos.

Teste e nos retorne. Abraços.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder