Página 1 de 1

Como fazer a conexão do banco de dados access 32 bits no excel 64bits.

Enviado: Qui Out 19, 2017 11:09 am
por CkOliveira
Pessoal estou com um problema aqui na empresa, tenho algumas aplicações em VBA, que sempre rodaram nas máquinas com Excel 32 bits, agora com a chegada de novas máquinas em 64bits essas aplicações não rodam mais, alguém tem alguma ideia de como resolver isso?

Re: Como fazer a conexão do banco de dados access 32 bits no excel 64bits.

Enviado: Qui Out 19, 2017 6:24 pm
por Guima
Ola CK, em geral a conexão seria a mesma, tanto para 32 ou 64 bits.

Acredito que o problema deva ser outro. Em geral, acontecem problemas com os controles ActiveX em 64 bits, e alguns outros menores. Mas qual mensagem aparece neste arquivo quando aberto em Excel 64 bits?

Re: Como fazer a conexão do banco de dados access 32 bits no excel 64bits.

Enviado: Sex Out 20, 2017 8:55 am
por miranda.flavio
Na verdade o que é preciso verificar são as Declarações de API´s para versões do MS Office.
Ou seja, é necessário definir se a execução está sendo realizada em plataforma 64 bits ou 32 bits e para isso deve´se criar instrução para tratar e identificar a plataforma e definir as variáveis de ponteiros para as instruções Declare.

fonte: https://msdn.microsoft.com/pt-br/VBA/La ... -statement
Instrução Declare
As instruções Declare com a palavra-chave PtrSafe é a sintaxe recomendada. As instruções Declare que incluem PtrSafe só funcionarão corretamente no ambiente de desenvolvimento do VBA7 nas plataformas 32 bits e de 64 bits depois que todos os tipos de dados na instrução Declare (parâmetros e valores de retorno) que precisam armazenar quantidades de 64 bits forem atualizados para usar LongLong para integrais de 64 bits ou LongPtr para ponteiros e manipulações. Para garantir a compatibilidade com versões anteriores com o VBA, a versão 6 e anteriores usam a seguinte construção:
#If Vba7 Then
Declare PtrSafe Sub...
#Else
Declare Sub...
#EndIf

segue abaixo uma solução para as diferentes plataformas 32 e 64 bits
Lembrando que em todas as rotinas com as constantes Declare deverá ter sua estrutura alterada para identificação das diferentes plataformas 32 e 64 bits
==============================================================
Option Explicit
'http://www.tudosobrexcel.com/vba/vba_32bits/
'http://www.tudosobrexcel.com/vba/vba_32 ... trSafe.TXT

'O compilador Vba7 condicional constante é usada para determinar
'se o código está sendo executado na versão 7 do editor de VB (VBA a versão que vem no Office 2010).
'A compilação condicional Win64 constante é usada para determinar qual versão (32 bits ou 64 bits) do Office
'está em execução


'#If VBA7 Then 'Declaração para as versões 32 bits.
' Private Declare PtrSafe 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
'#Else
' Private 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

#If VBA7 Then
'O código está sendo executado no novo editor VBA7
#If Win64 Then
' O código está sendo executado na versão de 64 bits do Microsoft Office
Private 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.
'O código está sendo executado na versão de 32 bits do Microsoft Office
Private 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
#End If
'#If VBA6 Then 'Declaração de API´s para versões do MS Office 2007-.
' Private 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


Espero ter ajudado,
Abraços
Flávio Miranda