Função BrowseFolder em Office 64-bit

Uso há muitos anos a função BrowserFolder, disponível no site http://access.mvps.org/access/api/api0002.htm, para capturar o endereço de uma pasta selecionada pelo usuário em tempo de execução.

Um usuário tentou rodar um aplicativo meu que usa esta função, e recebeu a seguinte mensagem de erro:

Este problema ocorre não porque o Windows é 64-bit, mas porque o Office é 64-bit. Embora não seja comum encontrarmos empresas dispostas a usar Office x64 (pois há muitos problemas de compatibilidade, e raramente há um real benefício em troca), alguns departamentos inadvertidamente acabam instalando tal versão.

As chamadas às DLLs 32-bit do Windows precisam ser refeitas para que funcionem no Office 64-bit, conforme é explicado com maior detalhe neste documento: http://msdn.microsoft.com/en-us/library/ee691831(office.14).aspx

No caso da função BrowseFolder, porém, há uma maneira mais simples de resolver: a mesma funcionalidade da API pode ser obtida por meio do objeto FileDialog do Office, que funciona tanto nas versões x86 (32-bit) como nas versões x64 (64-bit). Assim, criei uma função com o mesmo o nome e parâmetro da anterior, para não ter que fazer manutenção em todas as implementações, apenas na definição da própria função.

Public Function BrowseFolder(strDialogTitle As String) As String
Dim dlg As Object

On Error GoTo ErrHandler

Set dlg = Application.FileDialog(4) 'msoFileDialogFolderPicker=4
dlg.Title = strDialogTitle
dlg.Show
If dlg.SelectedItems.Count > 0 Then
   BrowseFolder = dlg.SelectedItems(1)
End If

ExitHere:

Exit Function

ErrHandler:
'MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "BrowseFolder"
Err.Raise Err.Number, Err.Source, Err.Description
Resume ExitHere
Resume
End Function

Notem que não usei a constante nomeada msoFileDialogFolderPicker, mas sim o seu valor correspondente (4). Fiz isto porque o Access (ao contrário do Excel e Word) não traz a biblioteca do Office referenciada por padrão, portanto a constante nomeada daria erro de compilação.

Esse post foi publicado em Access, Excel, Office, Uncategorized, VBA. Bookmark o link permanente.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s