O bloco With - End With no VBA é usado para informar ao VBA que vamos usar o objeto fornecido e ele deve considerar as propriedades do objeto fornecido apenas quando usarmos o operador ponto. Veremos exemplos posteriormente neste artigo.
Sintaxe com - Fim com bloco
Com [Objeto] 'Código para alterar ou usar [Objeto]' - '- Terminar com
Portanto, agora que sabemos a sintaxe do bloco With - End With, vamos ver seu uso.
Exemplo de com - Fim com bloco
Digamos que eu queira fazer várias alterações no intervalo A2: A10. Eu quero selecionar este intervalo, alterar suas cores de preenchimento, estilo de fonte, etc. Como eu faria isso em geral? Provavelmente assim:
Subteste () Intervalo ("A1: A10"). Selecione Intervalo ("A1: A10"). Interior.ColorIndex = 8 Intervalo ("A1: A10"). Font.Name = "Algerian" Intervalo ("A1: A10 ") .Font.ColorIndex = 12 Range (" A1: A10 "). Font.Underline = xlUnderlineStyleDouble Range (" A1: A10 "). Copiar Range (" B1: B10 ") Range (" A1: A10 "). Limpar End Sub
O acima seleciona o intervalo A1: A10. Altera a cor interna do intervalo para índice de cor 8. Altera a fonte para argelino. Muda a cor da fonte para o índice de cores 12. Sublinha o texto na faixa com sublinhados duplos. Em seguida, ele copia o intervalo A1: A10 para o intervalo B1: B10 da mesma planilha. Por fim, ele limpa o intervalo A1: A10.
Você pode notar que para fazer todas as operações com intervalo A1: A10, temos que escrever todas as vezes. Em seguida, o operador ponto acessa suas propriedades. Isso diminui a velocidade de processamento e aumenta a sobrecarga de trabalho para programadores VBA. A alternativa para fazer isso é usar um bloco With: O código abaixo faz o mesmo que o código acima, mas mais rápido.
Subteste () With Range ("A1: A10") .Select .Interior.ColorIndex = 8 .Font.Name = "Algerian" .Font.ColorIndex = 12 .Font.Underline = xlUnderlineStyleDouble .Copy Range ("B1: B10" ) .Clear End With End Sub
Vamos ver outro exemplo.
Se você criou um objeto do Outlook Mail, você pode usar esse objeto para inicializar todas as suas propriedades e usar métodos.
Definir outMail = Outlook.Application.CreateItem (0) Com outMail .To = "abcd.mail.com" 'Obrigatório. Aqui você define o id de e-mail de destino… cc = "cc.mail.com" 'opcional. Cc mail id se você quiser … BCC = "bcc.mail.com" 'opcional. ID de correio Cco se você quiser … Assunto = subj 'deve ter. A massagem no corpo da correspondência… Corpo = msg 'opcional. A massagem no corpo da correspondência… Anexos.Adicionar "C: /exceltip.com \ test.xlsx" .Enviar Terminar com
Como funciona?
Bem, quando escrevemos With Range ("A1: A10"), vba bloqueia sua referência ao intervalo do objeto ("A1: A10"). Portanto, sempre que escrevemos o operador ponto (.), O VBA lista todos os membros dessa classe de intervalo que afetará apenas o objeto Range ("A1: A10") ou qualquer objeto que você mencionou. O bloqueio de referência é liberado quando o VBA lê a instrução End With.
Aninhado com blocos
Podemos ter um bloco dentro de outro bloco. No exemplo acima, usamos um objeto range para selecioná-lo. Então usamos Range.Font várias vezes para trabalhar com fontes. Novamente, isso é repetitivo. O código acima também pode ser escrito assim:
Sub test () With Range ("A1: A10") .Select .Interior.ColorIndex = 8 'Usando outro With dentro de um With Block With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With .Copy Intervalo ("B1: B10") .Clear End With End Sub
O bloco com interno deve se referir a um objeto que é um sub-membro do objeto externo. Podemos nos referir ao com externo como objeto com e ao interno com como criança com. Quando você inicia o inner com, o objeto deve ser escrito com o operador de ponto anterior.
Uma vez que você é um filho, você não pode acessar as propriedades específicas dos pais. Por exemplo, o código abaixo está errado.
Sub test () With Range ("A1: A10") .Select .Interior.ColorIndex = 8 'Usando outro With dentro de um bloco With With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble' O código abaixo irá gerar um erro porque os métodos de copiar e limpar não pertencem à classe de fonte… Faixa de cópia ("B1: B10") .Clear End With End With End Sub
Totalmente qualificado com bloco
Se eu quiser fazer algumas alterações com a fonte do intervalo A1: A10 da planilha2 no código que contém a pasta de trabalho, devemos usar um bloco totalmente qualificado.
Os dois códigos abaixo funcionarão da mesma forma.
Sub test2 () With ThisWorkbook With .Sheets ("Sheet2") With .Range ("A1: A10") With .Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End With End With End With End Sub
'Totalmente qualificado com o bloco Sub test3 () With ThisWorkbook.Sheets ("Shee2"). Range ("A1: A10"). Font .Name = "Algerian" .ColorIndex = 12 .Underline = xlUnderlineStyleDouble End With End Sub
Você pode ver a diferença. Portanto, quando você souber que usará vários métodos e propriedades de um objeto, forneça um nome totalmente qualificado no início. Se você for usar objetos filhos, use a abordagem anterior. Programadores experientes usam ambos os métodos em situações adequadas.
Então, sim pessoal, é assim que usamos o bloco With - End With no VBA. Espero ter sido explicativo o suficiente e este artigo ajudou você a entender o conceito de With - End With. Se você tiver alguma dúvida sobre este artigo, ou qualquer outro assunto, pergunte-me na seção de comentários abaixo. Terei todo o gosto em ajudá-lo.
Variáveis VBA no Excel| VBA significa Visual Basic for Applications. É uma linguagem de programação da Microsoft. É usado com aplicativos do Microsoft Office, como MSExcel, MS-Word e MS-Access, enquanto as variáveis VBA são palavras-chave específicas.
Escopo de Variável Excel VBA| Em todas as linguagens de programação, temos especificadores de acesso à variável que definem de onde uma variável definida pode ser acessada. O Excel VBA não é exceção. O VBA também tem especificadores de escopo.
Argumentos ByRef e ByVal | Quando um argumento é passado como um argumento ByRef para uma subfunção ou função diferente, a referência da variável real é enviada. Quaisquer alterações feitas na cópia da variável, serão refletidas no argumento original.
Exclua planilhas sem prompts de confirmação usando VBA no Microsoft Excel | Como está excluindo planilhas usando o VBA, você sabe o que está fazendo. Você gostaria de dizer ao Excel para não mostrar este aviso e excluir a maldita planilha.
Adicionar e salvar nova pasta de trabalho usando VBA no Microsoft Excel 2016| Neste código, primeiro criamos uma referência a um objeto de pasta de trabalho. E então o inicializamos com um novo objeto de pasta de trabalho. A vantagem dessa abordagem é que você pode realizar operações nesta nova pasta de trabalho facilmente. Como salvar, fechar, excluir, etc.
Exibir uma mensagem na barra de status do Excel VBA| A barra de status no Excel pode ser usada como um monitor de código. Quando seu código VBA é longo e você executa várias tarefas usando o VBA, geralmente desativa a atualização da tela para não ver a tela piscando.
Desativar mensagens de aviso usando VBA no Microsoft Excel 2016| Este código não apenas desabilita alertas VBA, mas também aumenta a eficiência de tempo do código. Vamos ver como.
Artigos populares:
50 atalhos do Excel para aumentar sua produtividade | Torne sua tarefa mais rápida. Esses 50 atalhos farão você trabalhar ainda mais rápido no Excel.
A função VLOOKUP no Excel | Esta é uma das funções mais usadas e populares do Excel, que é usada para pesquisar valores em diferentes intervalos e planilhas.
CONT.SE no Excel 2016 | Conte valores com condições usando esta função incrível. Você não precisa filtrar seus dados para contar valores específicos. A função Countif é essencial para preparar seu painel.
Como usar a função SUMIF no Excel | Esta é outra função essencial do painel. Isso ajuda você a somar valores em condições específicas.