Bom dia pessoal.
Dei uma breve pesquisada e não consegui resposta.
Preciso de algum código que verifica se o arquivo está aberto por outro usuário, se sim ele me avisa e não faz nada, se não eu faço o que quiser no arquivo aberto.
Atualmente eu adaptei um código que achei na rede, e é bem amador porque não manjo muito.
Tenho um arquivo Base, e os arquivos dos usuários (user1, user2, user3 e por ai vai), quando preciso atualizar a base o usuário na sua planilha executa uma macro, que esta macro abre a base e verifica se há um campo preenchido numa determinada célula, se estiver preenchido é porque o arquivo está em uso, se não está liberado para atualização.
Segue o código abaixo.
' MACRO PARA ATUALIZAR PLANILHA BASE.
' Atualiza XML de NOTA FISCAL.
' Segundo Plano
Application.EnableCancelKey = xlDisabled
Dim planAtiva As Worksheet
Application.ScreenUpdating = False
Set planAtiva = ActiveSheet
' Abrindo Planilha BASE.
Workbooks.Open Filename:= _
"G:FISCALConferencia Livro - SolConferência em AndamentoBase.xlsm"
' Ao abrir o arquivo, o Excel verifica se na célula B2 da Aba Inicio, contém "XXXX".
Dim EncontraString As String
Dim Intervalo As Range
EncontraString = "XXXX"
If Trim(EncontraString) <> "" Then
With Sheets("Inicio").Range("B2:B3")
Set Intervalo = .Find(What:=EncontraString, _
After:=.Cells(1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not Intervalo Is Nothing Then
Application.Goto Intervalo, False
' Se o Excel localizar "XXXX" informará que a BASE está em uso e finaliza MACRO sem terminas as rotinas.
MsgBox "ERRO" & vbCrLf & "Não será possível a importação" & vbCrLf & "Base está sendo utilizada por outro usuário!" & vbCrLf & "Tentar novamente mais tarde."
ActiveWindow.Close
Else
' Não Localizando "XXXX" conforme citado acima, irá atualizar os dados.
' No Arquivo BASE, na Aba Inicio será digitado "XXXX" e salva a planilha para que, se outro usuário tentar acessar a BASE o Excel não permita.
Sheets("Inicio").Select
Range("B2").Select
ActiveCell.FormulaR1C1 = "XXXX"
ActiveWorkbook.Save
' Macro da BASE.
Application.Run "Base.xlsm!M01_XMLNFE"
' COLOCO MINHA ROTINA AQUI
Existe uma maneira mais simples de fazer a verificação se o arquivo está disponível ?
Obrigado!
_______________________________________________________________________________________________
Carlos Santos
* Marque o tópico como Resolvido se foi solucionado seu problema.
Postado : 04/05/2016 7:32 am