Página 1 de 3

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

Enviado: Sex Jan 29, 2016 7:46 pm
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

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

Enviado: Sex Jan 29, 2016 8:44 pm
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.

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

Enviado: Sex Jan 29, 2016 10:50 pm
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.

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

Enviado: Dom Mar 27, 2016 7:03 pm
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

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

Enviado: Seg Mar 28, 2016 9:38 am
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.

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

Enviado: Dom Abr 03, 2016 5:34 pm
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

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

Enviado: Seg Abr 04, 2016 11:18 am
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.

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

Enviado: Qui Jul 28, 2016 12:30 am
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!!!

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

Enviado: Qua Out 12, 2016 6:13 pm
por alves
Mikel.
Estou como o mesmo problema citado acima.

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

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

Enviado: Qua Out 12, 2016 8:45 pm
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.