Macro p Mac 2016/2011 - Long VS LongPtr (64bits VS 32 bits)

Visual Basic for Aplication e macros no Excel.
Regras do fórum
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde. Imagem

Macro p Mac 2016/2011 - Long VS LongPtr (64bits VS 32 bits)

Mensagempor thiagoluz » Qua Ago 14, 2019 9:00 pm

Olá,

Eu tenho um Módulo que carrega bibliotecas para ter acesso a arquivos e/ou comandos. Eu precisei fazer um #If para carregar o código apropriado dependendo da versão de Office para Mac que o usuário utiliza. O código a seguir:

Código: Selecionar todos
#If VBA7 Then
  Private Declare PtrSafe Function popen Lib "libc.dylib" (ByVal command As String, ByVal mode As String) As LongPtr
  Private Declare PtrSafe Function pclose Lib "libc.dylib" (ByVal file As LongPtr) As Long
  Private Declare PtrSafe Function fread Lib "libc.dylib" (ByVal outStr As String, ByVal size As LongPtr, ByVal items As LongPtr, ByVal stream As LongPtr) As Long
  Private Declare PtrSafe Function feof Lib "libc.dylib" (ByVal file As LongPtr) As LongPtr
#Else
  Private Declare Function popen Lib "libc.dylib" (ByVal command As String, ByVal mode As String) As Long
  Private Declare Function pclose Lib "libc.dylib" (ByVal file As Long) As Long
  Private Declare Function fread Lib "libc.dylib" (ByVal outStr As String, ByVal size As Long, ByVal items As Long, ByVal stream As Long) As Long
  Private Declare Function feof Lib "libc.dylib" (ByVal file As Long) As Long
#End If


O problema é para Office 2016, as 4 linhas do #Else dão erro de compilação, ainda que este código nem rode, pois usuários de Office 2016 deveriam cair sempre no If, não no Else.
Eu descobri que removendo esse #If e usando apenas as 4 primeiras linhas, i.e. carregando tudo como LongPtr, o código compila e roda normalmente, mas ele deixa de funcionar caso o usuário não esteja utilizando um Excel com VBA7, ou seja, usuários de Office 2011.

Portanto: Eu preciso do #If para ele compilar para usuários sem VBA7, mas o #Else acaba causando erro de compilação.

Pesquisando um pouco eu encontrei os seguintes recursos:
https://riptutorial.com/vba/example/31814/mac-apis - Que foi de onde tirei a info sobre a diferença na forma de declarar as bibliotecas
https://github.com/VBA-tools/VBA-Web/issues/248 - É a discussão da galera que começou a ter o problema com as mesmas linhas do meu Else, e a solução proposta é simplesmente usar as outras (do if, não do else).

No entanto o que esses recursos não mostram é como resolver isso de uma forma que o código rode para qualquer tipo de usuário, seja office 2011, seja office 2016.

Alguém pode ajudar? Estou em busca de alguém que consiga me ajudar com isso, pois há mais demanda para fazer alguns jobs freelancer.
thiagoluz
Membro
Membro
 
Mensagens: 1
Registrado em: Qua Ago 14, 2019 8:45 pm
Has thanked: 0 time
Have thanks: 0 time

{ SO_SELECT }

Voltar para VBA & Macros

Quem está online

Usuários navegando neste fórum: Google Adsense [Bot] e 3 visitantes