... porém apenas meu computador tem acesso a essa fórmula.
Não se o suplemento também estiver em rede, como tenho aqui na empresa. Aí necessitaria 1 suplemento comum para todas as máquinas.
Minha necessidade era de usar como base de dados, um arquivo em pasta compartilhada, para que assim, meu dois colegas de setor também possam usar essa UDF no excel instalado em seus computadores...
...A UDF deveria fazer referência ao arquivo que está na pasta compartilhada (banco de dados). Desse forma eu instalaria o suplemento no excel de todos os funcionários do setor. Isso faria com que , sempre que o BD fosse atualizado a função também funcionaria com dados "atualizados" no computador de todos.
No caso de vc desejar ter essa base de dados num arquivo separado, digamos sua Planilha2.xlsx, há um complicador que é o fato de que esse arquivo já tem que estar aberto para a UDF poder utilizá-lo, como o amigo Mauro Coutinho bem apontou acima. Isto porque procedimentos tipo Function foram desenhados para ler algo e são limitados quando se trata de fazer algo. Métodos como Workbooks.Open são simplesmente ignorados, nem mesmo códigos de erro são gerados.
Resumindo, pra usar a UDF, a Planilha2.xlsx teria que estar já aberta.
Pra não ter que abri-la manualmente sempre que for usar a UDF, vc poderia abri-la sempre que iniciar o Excel e fechá-la ao encerrar o Excel. Para isso, no módulo de Pasta EstaPasta_de_Trabalho do arquivo PERSONAL.XLSB daria pra usar:
Option Explicit
Private Sub Workbook_Open()
Workbooks.Open Filename:="\ServidorPastaCompartilhadaPlanilha2.xlsx" ', ReadOnly:=True
Application.Windows("Planilha2.xlsx").Visible = False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Workbooks("Planilha2.xlsx").Close
End Sub
E vc deixaria somente sua UDF no suplemento criado:
Option Explicit
Dim wbTab As Workbook, rgTab As Range
Public Function busca_dados(rg As Range)
If wbTab Is Nothing Then
Set wbTab = Workbooks("Planilha2.xlsx")
Set rgTab = wbTab.Worksheets("Plan1").Range("A1:B4")
End If
busca_dados = Application.WorksheetFunction.VLookup(rg, rgTab, 2, 0)
End Function
Obs.:
1) testei aqui e ficou funcional
2) seria bem importante fazer uma boa rotina de tratamento de erros no PERSONAL.XLSB prevendo situações onde o arquivo Planilha2.xlsx tenha sido aberto manualmente ou não ter sido fechado pelo código.
Postado : 15/03/2018 12:20 pm