Dim wkbkdestination As Workbook
Dim destsheet As Worksheet
For Each ThisWorkSheet In wkbkorigin.Worksheets
'this throws subscript out of range if there is not a sheet in the destination
'workbook that has the same name as the current sheet in the origin workbook.
Set destsheet = wkbkdestination.Worksheets(ThisWorkSheet.Name)
Next
Basicamente, eu faço um loop por todas as planilhas na pasta de trabalho de origem e, destsheet
em seguida, configuro na pasta de destino para a planilha com o mesmo nome da atualmente iterada na pasta de trabalho de origem.
Como posso testar se essa folha existe? Algo como:
If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then
Respostas:
Algumas pessoas não gostam dessa abordagem por causa de um uso "inadequado" de tratamento de erros, mas acho que é considerado aceitável no VBA ... Uma abordagem alternativa é percorrer todas as folhas até encontrar uma correspondência.
fonte
ActiveWorkbook
vez deThisWorkbook
. O último se refere à pasta de trabalho que contém o código de macro, que pode ser diferente da pasta de trabalho que se deseja testar. Eu achoActiveWorkbook
que seria útil para a maioria dos casos (porém, situações planejadas estão sempre disponíveis).sht Is Nothing
seráTrue
se não há nenhuma folha com esse nome, mas queremos voltarTrue
se não é uma folha com esse nome, daí o não. É um pouco mais fácil (mas não válido) se você reorganizar um pouco paraSheetExists = sht Is Not Nothing
If wb Is Nothing Then Set wb = ThisWorkbook
paraIf wb Is Nothing Then Set wb = ActiveWorkbook
Se você estiver especificamente interessado apenas em planilhas, pode usar uma chamada simples de Avaliação:
fonte
Você não precisa de tratamento de erros para fazer isso. Tudo que você precisa fazer é iterar sobre todas as planilhas e verificar se o nome especificado existe:
fonte
Como verificar os membros de uma coleção é um problema geral, aqui está uma versão resumida da resposta de Tim:
Esta função pode ser utilizada com qualquer conjunto como objecto (
Shapes
,Range
,Names
,Workbooks
, etc.).Para verificar a existência de uma folha, use
If Contains(Sheets, "SheetName") ...
fonte
Set
palavra - chave. Descobri que ao invés de usarSet
, pedindo aTypeName
do membro dos trabalhos de recolha para todos os casos, ou sejaTypeName objCollection(strName)
Sub Test() On Error GoTo errhandler Debug.Print Contains(Workbooks, "SomeBookThatIsNotOpen") errhandler: If Err.Number <> 0 Then Stop End Sub
Corrigido: sem tratamento de erros:
fonte
Caso alguém queira evitar o VBA e testar se uma planilha existe puramente dentro de uma fórmula de célula, é possível usar as funções
ISREF
eINDIRECT
:=ISREF(INDIRECT("SheetName!A1"))
Isso retornará
TRUE
se a pasta de trabalho contiver uma planilha chamadaSheetName
e deFALSE
outra forma.fonte
Eu escrevi este aqui:
fonte
sheetExist = ActiveWorkbook.Sheets(sSheet).Index
Minha solução se parece muito com Tims, mas também funciona no caso de planilhas que não são de planilha - gráficos
.
fonte
Coloque o teste em uma função e você poderá reutilizá-lo e terá melhor legibilidade do código.
NÃO use "On Error Resume Next", pois pode entrar em conflito com outra parte do seu código.
fonte
Muitos anos atrasado, mas eu só precisava fazer isso e não gostei de nenhuma das soluções postadas ... Então inventei uma, tudo graças à magia de (gesto do arco-íris do Bob Esponja) "Avalie ()"!
Retorna TRUE se a planilha NÃO existir; FALSE se a planilha EXISTIR. Você pode substituir qualquer intervalo que desejar por "1: 1", mas não aconselho usar uma única célula, porque se ela contiver um erro (por exemplo, # N / A), retornará True.
fonte
wsExists
Função compacta ( sem dependência de tratamento de erros!)Esta é uma função curta e simples que não depende do tratamento de erros para determinar se uma planilha existe ( e é declarada corretamente para funcionar em qualquer situação!)
Exemplo de uso:
O exemplo a seguir adiciona uma nova planilha chamada
myNewSheet
, se ainda não existir:Mais Informações:
For Each
…Next
Declaração (VBA)Exit
Declaração (VBA)fonte
Por que não apenas usar um pequeno loop para determinar se a planilha nomeada existe? Digamos que você esteja procurando uma planilha chamada "Planilha1" na pasta de trabalho aberta no momento.
fonte
Se você é fã
WorksheetFunction.
ou trabalha de um país que não seja inglês com um Excel que não seja em inglês, esta é uma boa solução, que funciona:Ou em uma função como esta:
fonte
fonte
fonte
Altere "Dados" para qualquer nome de folha que você está testando ...
fonte
Sem nenhuma dúvida de que a função acima pode funcionar, acabei com o seguinte código que funciona muito bem:
Nota:
Sheets_Name
é onde eu peço ao usuário para inserir o nome, então ele pode não ser o mesmo para você.fonte
Fiz outra coisa: exclua uma planilha apenas se ela existir - para não obter um erro se não existir:
fonte
Eu descobri uma maneira fácil de fazer isso, mas não criei um novo sub para ela. Em vez disso, apenas "fiz uma verificação" no submarino em que estava trabalhando. Assumindo que o nome da planilha que estamos procurando é "Sheet_Exist" e queremos apenas ativá-lo se for encontrado:
Também adicionei um pop-up para quando a planilha não existir.
fonte
Eu sei que é um post antigo, mas aqui está outra solução simples e rápida.
fonte
Curto e limpo:
fonte
Na verdade, tive uma maneira simples de verificar se a planilha existe e, em seguida, executar algumas instruções:
No meu caso, eu queria excluir a planilha e depois recriei a mesma planilha com o mesmo nome, mas o código foi interrompido se o programa não foi capaz de excluir a planilha porque ela já foi excluída
fonte