Uma macro do Excel para determinar se um livro está aberto

Como você pensar em abrir automaticamente planilhas do Excel, considere o que pode acontecer se você tentar abrir um livro que já está aberto. No mundo não-VBA, Excel tenta abrir o arquivo novamente, com a mensagem mostrada alertando que as alterações não salvas serão perdidas. Você pode proteger contra tal ocorrência, verificando se um determinado arquivo já está aberto antes de tentar abri-lo novamente.

Evitar essa mensagem de aviso.
Evitar essa mensagem de aviso.

Como as obras de macro

A primeira coisa a notar sobre esta macro é que é uma função, não um procedimento Sub. Como você vai ver, tornando esta uma função macro permite que você passe qualquer nome de arquivo a ele para testar se esse arquivo já está aberto.

A essência deste código é simples. Você está testando um determinado nome de arquivo para ver se ele pode ser atribuído a uma variável Object. Apenas pastas de trabalho abertas pode ser atribuído a uma variável Object. Ao tentar atribuir um livro fechado para a variável, ocorre um erro.

Se a pasta de trabalho dado pode ser atribuído, o livro é abertura, se ocorrer um erro, o livro está fechado.

Função FileIsOpenTest (TargetWorkbook As String) Como Boolean'Step 1: Declare seu variablesDim TestBook Como Workbook'Step 2: Diga Excel para retomar em errorOn Error Resume Next'Step 3: Tente atribuir o livro de destino para TestBookSet TestBook = pastas de trabalho (TargetWorkbook) "Passo 4: Se não houve erro, pasta de trabalho já está openIf Err.Number = 0 ThenFileIsOpenTest = TrueElseFileIsOpenTest = FalseEnd IfEnd Função

A primeira coisa a macro faz é declarar uma variável String que conterá o nome do arquivo que o usuário escolhe. TestBook é o nome da sua variável String.

Na Etapa 2, você diz Excel que pode haver um erro ao executar este código e, em caso de um erro, retomar o código. Sem essa linha, o código seria simplesmente parar quando ocorre um erro. Novamente, você testar um determinado nome de arquivo para ver se ele pode ser atribuído a uma variável Object. Se a pasta de trabalho dado pode ser atribuído, é abertura, se ocorrer um erro, é fechado.

Na Etapa 3, você tentar atribuir o livro dado à variável Object TestBook. O livro que tenta atribuir uma variável String chamada TargetWorkbook. TargetWorkbook é passado para a função nas declarações de função (ver a primeira linha do código). Esta estrutura elimina a necessidade de codificar um nome de pasta de trabalho, permitindo que você passá-lo como uma variável em vez.

Na etapa 4, você simplesmente verificar para ver se ocorreu um erro. Se não ocorrer um erro, a pasta de trabalho é aberta, assim você definir o FileIsOpenTest para True. Se ocorrer um erro, o livro não está aberto e você definir a FileIsOpenTest para Falso.

Mais uma vez, esta função pode ser usada para avaliar qualquer arquivo que você passar para ele, por meio de seu argumento TargetWorkbook. Esta é a beleza de colocar a macro em uma função.

A macro a seguir demonstra como implementar esta função. Aqui, você chamar a nova função FileIsOpenTest para se certificar de que o usuário não pode abrir um arquivo já aberto:

Sub Macro1 () 'Passo 1: Definir uma String variableDim FName Como VariantDim FNFileOnly Como String'Step 2: Método GetOpenFilename ativa de diálogo boxFName = Application.GetOpenFilename (_FileFilter: = "planilhas do Excel * xl *.", _Title: = "Escolha um livro para abrir ", _MultiSelect: = False) 'Passo 3: Abra o arquivo escolhido se não já openedIf FName lt;> False ThenFNFileOnly = StrReverse (Esquerda (StrReverse (Nm), _InStr (StrReverse (Nm), "") - 1)) Se FileIsOpenTest (FNFileOnly) = True ThenMsgBox "O arquivo de dados já está aberto" ElseWorkbooks.Open Matrícula : = FNameEnd IfEnd IfEnd Sub

Com esta macro implementado, você recebe a caixa de mensagem amigável mostrado.

Uma mensagem mais limpo, mais concisa.
Uma mensagem mais limpo, mais concisa.

Como usar o macro

Para implementar essa macro, você pode copiar e colar os dois pedaços de código em um módulo padrão:

  1. Ative o Editor do Visual Basic pressionando Alt + F11.

  2. direita; clique no nome do projeto / pasta de trabalho na janela do projeto.

  3. Escolha Inserir-Module.

  4. Digite ou cole o código no módulo recém-criado.

  5. (Opcional) Atribuir a macro a um botão.

menu