Notifications
Clear all

Continuar macro apenas quando arquivo for selecionado

5 Posts
2 Usuários
1 Reactions
1,244 Visualizações
(@fefo32br)
Posts: 44
Eminent Member
Topic starter
 

Olá, pessoal!!

Estou fazendo uma macro em uma planilha que puxa dados de um outro arquivo chamado "abc".

Como faço para que a macro só continue sendo executada quando este arquivo "abc" for selecionado?

Gostaria de extrair os dados desse arquivo "abc" SOMENTE quando ele selecionado...

Obrigado!!!!

 
Postado : 13/01/2021 9:56 am
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

@fefo32br o ideal seria detalhar melhor e colocar a rotina que está usando, então veja se consegue adaptar essa ;

 

Sub Get_Data_From_File()
Dim FileToOpen As Variant
Dim OpenBook As Workbook

'Abre a caixa de diaçogo para selecionar o arquivo
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*xls*")

'Verifica se selecionado ou cancelado
If FileToOpen <> False Then

'Se selecionadop arquivo abre o mesmo
Set OpenBook = Application.Workbooks.Open(FileToOpen)

'Aqui vai as suas rotinas a serem executadas
OpenBook.Sheets(1).Range("A1:E20").Copy
ThisWorkbook.Worksheets("Altere O Nome").Range("A10").PasteSpecial xlPasteValues

'Fecha o arquivo apos a importação dos dados
OpenBook.Close False

End If
End Sub
 
Postado : 13/01/2021 11:08 am
fefo32br reacted
(@fefo32br)
Posts: 44
Eminent Member
Topic starter
 

@coutinho  MUITO OBRIGADO, meu amigo!!!!!

 
Postado : 13/01/2021 12:06 pm
(@fefo32br)
Posts: 44
Eminent Member
Topic starter
 

@coutinho

 

Uma dúvida... caso o arquivo já esteja aberto "abc" já esteja aberto (que é o caso mais comum", eu preciso apenas deixa-lo como ativo  ("workbook.activate")

 

Dá para adaptar esse trecho da seu código: 

'Abre a caixa de diaçogo para selecionar o arquivo
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*xls*")

para, ao invés de solicitar a ABERTURA do arquivo, solictar a ATIVAÇÃO do mesmo?

De resto, era exatamente isso que eu precisava.

obrigado novamente.

 

abs

 
Postado : 13/01/2021 12:11 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

@fefo32br podemos utilizar uma outra rotina para fazer a verificação antes e se o mesmo estiver fechado chamar a rotina para abrir e se estiver aberto trazer para o primeiro plano, assim adaptando uma Function da net (fonte e creditos na rotina), veja se consegue adaptar.

Sub Verifica_Arq_Aberto()

'Coloque o caminho e nome do arquivo a verificar
If IsFileOpen("C:\....\abc.xlsx") = True Then

MsgBox ("O Arquivo já está aberto")
'Traz o arquivo para o primeiro plano
'Coloque o nome e a extensão correta
Workbooks("abc.xlsx").Activate

Else
MsgBox ("O Arquivo não está aberto")
'Chama a rotina para abrir
Call Get_Data_From_File

End If

End Sub

'Fonte
'http://learnexcelmacro.com/wp/2013/06/is-file-already-open/
Function IsFileOpen(fileFullName As String)
Dim FileNumber As Integer
Dim errorNum As Integer

On Error Resume Next
FileNumber = FreeFile() ' Assign a free file number.
' Attempt to open the file and lock it.
Open fileFullName For Input Lock Read As #FileNumber
Close FileNumber ' Close the file.
errorNum = Err ' Assign the Error Number which occured
On Error GoTo 0 ' Turn error checking on.
' Now Check and see which error occurred and based
' on that you can decide whether file is already
' open
Select Case errorNum
' No error occurred so ErroNum is Zero (0)
' File is NOT already open by another user.
Case 0
IsFileOpen = False

' Error number for "Permission Denied." is 70
' File is already opened by another user.
Case 70
IsFileOpen = True

' For any other Error occurred
Case Else
Error errorNum
End Select

End Function

 

 

[]s

Mauro Coutinho

 
Postado : 13/01/2021 1:02 pm