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.