Estou um pouco intrigado com o seu problema.
Quando eu tento executar sua rotina, ela fica imediatamente engasgada com a linha Set r =
,
porque Union()
deve receber pelo menos dois argumentos.
Mas, quando eu mudo isso para Set r = [a2:b3]
,
ele é executado e oculta a linha 2, mas deixa a linha 3 não exibida.
Isso é o que eu esperava que a rotina fizesse.
Ele verifica cada célula no intervalo A2:B3
individualmente e age nela.
Ele atravessa o intervalo de cima para baixo,
e depois da esquerda para a direita dentro de cada linha.
(Pelo menos esse é o comportamento padrão; talvez seja possível alterá-lo.)
Então é isso que acontece:
- Veja a célula
A2
. Tem um valor, por isso, un ocultamos a linha 2. - Veja a célula
B2
. Não tem um valor, por isso, ocultamos a linha 2. - Veja a célula
A3
. Não tem um valor, por isso, ocultamos a linha 3. - Veja a célula
B3
. Tem um valor, por isso, un ocultamos a linha 3.
E então a linha 2 acaba oculta e a linha 3 acaba sendo exibida.
Você precisa olhar o intervalo, não apenas um monte de células ,
mas como um monte de linhas (cada uma delas é um monte de células).
Você precisa ter outra variável,
que assumirá valores lógicos (True / False).
Para cada linha, comece definindo a variável como True,
o que significa "sim, esta linha não tem dados, até onde eu sei".
Então, para cada célula nessa linha, se a célula tiver um valor,
defina a variável como False, o que significa "não, essa linha não está em branco".
E depois de olhar para todas as células seguidas,
defina o atributo Hidden
da linha como o valor da variável.