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.
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.
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:
Ative o Editor do Visual Basic pressionando Alt + F11.
direita; clique no nome do projeto / pasta de trabalho na janela do projeto.
Escolha Inserir-Module.
Digite ou cole o código no módulo recém-criado.
(Opcional) Atribuir a macro a um botão.