Вы находитесь на странице: 1из 14

Apndice 2: Objetos

A2.1 Introduo
Este captulo trata com alguns dos assuntos mais avanados do VBA. A primeira parte do captulo introduz os objetos de
planilha, declaraes With, colees, names, e o pesquisador de objetos tambm so discutidos.
A2.2 Objetos Worksheet: Uma Introduo
Objetos so os blocos de construo bsicos do VBA. Embora voc talvez no esteja ciente que est usando objetos, a maioria das
coisas que voc faz no VBA exige a manipulao de objetos. Podemos pensar num objeto como uma espcie de reservatrio
(container) com variveis, funes, e subroutines dentro dele. Todos os componentes do Excel (pastas, planilhas, intervalos, e assim
por diante) esto representados por um objeto na hierarquia de objeto do VBA (ver apndice). Os dados do objeto so mantidos em
variveis especiais chamadas propriedades. Voc pode acessar as propriedades usando o operador Dot (.). A macro seguinte usa a
varivel objeto ActiveCell do VBA e trs de suas propriedades: Address, Formula, e Value:
Sub Act i vecel l Demo( )
Di mTemp
MsgBox " Voc est na: " & Act i veCel l . Addr ess _
& Chr ( 13) & " A Fr mul a na cl ul a : " _
& Act i veCel l . For mul a & _
Chr ( 13) & " O val or da cl ul a : " _
& Act i veCel l . Val ue
Act i veCel l . For mul a = Act i veCel l . For mul a _
& " * 2"
End Sub
Esta macro usa o objeto ActiveCell para fazer duas coisas:
1. Ela usa uma caixa de mensagem (message Box) para informar-lhe do contedo da clula A2. Este procedimento usa uma
Message Box VBA e as propriedades ActiveCell.Formulae ActiveCell.Value.
2. Ela usa ActiveCell.Formulapara mudar a frmula na clula. Note a maneira como a frmula mudada: O ltimo elemento na
frmula est multiplicado por 2. Assim, se voc tem a frmula 2 + A1 na clula A2, a nova frmula ser 2 + A1 * 2.
Se voc rodar a macro novamente na mesma clula, a nova frmula ser 2 + A1 * 2 * 2.
A macro produz os resultados seguintes:

Mtodos so funes contidas num objeto. Os mtodos so usados para manipular o objeto. Como as propriedades, os mtodos
podem ser acessados usando o operador Dot (.). A linha divisria entre mtodos e propriedades algumas vezes muito confusa. A
macro seguinte ativa os mtodos BorderArounde Cells da ActiveCell:
Sub Act i vecel l Demo1( )
MsgBox " Voc est na: " & Act i veCel l . Addr ess
Act i veCel l . Bor der Ar ound xl Doubl e, xl Thi ck, 3
Act i veCel l . Cel l s( 2, 2) . Sel ect
End Sub

E ela se parece com isto:














Note que a clula ativa na planilha moveu-se como resultado da ltima linha da macro.

A2.3 O Objeto Range
Os objetos tm tipos. Um dos tipos de objetos mais importantes no VBA o Range. Uma clula de planilha e um intervalo de clulas
so todos objetos do tipo Range. Por exemplo, um objeto varivel VBA ActiveCell que encontramos na seo anterior do tipo
Range. Esta seo apresenta algumas das propriedades e mtodos do objeto Range.
A2.3.1 Umintervalo como umParmetro para uma Funo
Suponha que definimos o retorno sobre um ativo no perodo t como i
t
=
Prco
t
-Prco
t-1
Prco
t-1
, e a mdia do retorno de um ativo
como r =
1
N
r
t
N
t=1
. A funo RetornoMedio aceita um intervalo coluna de preos de ativos como um parmetro e calcula o
retorno mdio do ativo. Uma funo auxiliar RetornoDoAtivo usada para calcular r .
Funct i on Ret or noDoAt i vo( P0 As Var i ant , P1 As _
Var i ant ) As Doubl e
Ret or noDoAt i vo = ( P1 P0) / P0
End Funct i on
Funct i on Ret or noMedi o( Rng As Range) As Doubl e
Di mNumer oDeLi nhas As I nt eger
Di mPr ecos As Var i ant
Di mTemp As Doubl e
Di mi As I nt eger
Numer oDeLi nhas = Rng. Rows. Count
Pr ecos = Rng. Val ue
Temp = 0
For i = 2 To Numer oDeLi nhas
Temp = Temp + _
Ret or noDoAt i vo ( Pr ecos( i 1, 1) , _
Pr ecos( i , 1) )
Next i
Ret or noMedi o = Temp / ( Numer oDeLi nhas 1)
End Funct i on

Aqui est a funo em ao:










Linhas de notas:

Numer oDeLi nhas = Rng. Rows. Count

O operador Dot usado duas vezes. Rng nosso objeto Range. Rows a propriedade do objeto Range, assim Rng.Rows um
objeto do tipo Collectionque representa todas as linhas no nosso intervalo. Count uma propriedade do objeto do tipo Collection
que armazena o nmero de membros na coleo, assim Rng.Rows.Count uma varivel que armazena o nmero de linhas no
nosso intervalo.
Pr ecos = Rng. Val ue

Value uma propriedade do objeto Rangecontendo os valores de todas as clulas no intervalo. Value do tipo Variant. Se o
intervalo for de mais do que uma clula em tamanho, Value um array bidimensional. O primeiro ndice de Value o ndice de linha
comeando em 1, e o segundo ndice o ndice de coluna comeando em 1.

A2.3.2 Tipos de Consideraes comVariants e Objetos como Parmetros

Algumas vezes as variveis Variantso digitadas depois da hora para o VBA usar o tipo de informao. O problema est ilustrado
pela funo RetornoDoAtivo na subseo anterior. Uma declarao melhor para a funo RetornoDoAtivoteria sido
Funct i on Ret or noDoAt i vo( P0 As Doubl e, P1 As _
Doubl e) As Doubl e

Infelizmente, quando tentamos usar a funo, o VBA verifica a exatido do nosso programa. Quando a verificao realizada (logo
antes da funo ser usada), as variveis Precos no ainda um array de doubles. Como conseqncia o erro seguinte emitido













:







A2.3.3 A Propriedade Itemdo Objeto Range

A propriedade Itemdo objeto Rangepermite-nos enderear uma clula especfica na planilha da qual o intervalo faz parte. Embora a
Itemseja referida como uma propriedade na documentao, ela realmente comporta-se duplamente como uma propriedade e um
mtodo. A funo seguinte retorna a frmula na clula trs linhas abaixo e duas colunas para a esquerda do seu argumento:
Funct i on DuasAEsquer daTr esPar aBai xo( Rng As Range) As St r i ng
DuasAEsquer daTr esPar aBai xo = Rng. I t em( 4, 3) . For mul a
End Funct i on

7
8
9
10
11
12
A B C
100.000 0,160 <=RetornoMedio(A7:A12)
110.000 0,100 <=RetornoMedio(A7:A9)
121.000 0,200 <=RetornoMedio(A9:A12)
145.200
174.240
209.088










Note que Rng.Item(1, 1) a clula no canto esquerdo superior do Rng.

A2.3.4 A Propriedade Range

A propriedade Range aquela maneira de se acessar um intervalo numa planilha. Range uma propriedade de muitos objetos do
Excel.
Quando usada de maneira apropriada, como na prxima macro, Range uma maneira curta de escrever ActiveSheet.Range.
Sub RangeDemo( )
Range( " A1" ) . For mul a = 23
End Sub

Como esperado uma macro configurar a frmula na clula "A1" da planilha ativa para 23. A prxima macro configura a frmula
De cada clula no intervalo "A1:B2" da planilha ativa para 23.

Sub RangeDemo1( )
Range( " A1: B2" ) . For mul a = 23
End Sub

A prxima macro configura a frmula de cada clula no intervalo "A1:B2" da planilha ativa para 23, usando a alternativa chamada
seqncia de Range. O primeiro argumento a clula no canto esquerdo superior do intervalo. O segundo a clula no canto direito
inferior do intervalo.
Sub RangeDemo2( )
Range( " A1" , " B2" ) . For mul a = 23
End Sub

Range tambm uma propriedade do objeto Range. O intervalo retornado pelo Rangequando usado este modo relativo ao objeto
Range. A prxima macro configura a frmula da clula "C2" da planilha ativa para 23.
Sub RangeDemo3( )
Range( " B1" ) . Range( " B2" ) . For mul a = 23
End Sub

Observao: Range("B1")retorna o intervalo (ou clula) "B1" da planilha ativa. Range("B1").Range("B2") retorna a clula
"B2" do intervalo que tem "B1" como o canto esquerdo superior. Em termos de planilha, Range("B1").Range("B2")
retorna a clula "C2."

A prxima macro configura a frmula de cada clula no intervalo "C2:D3" da planilha ativa para 23. A macro usa a clula "C2" como
ponto de partida, to bem quanto a alternativa chamada seqncia de Range.
Sub RangeDemo4( )
Range( " C2" ) . Range( " A1" , " B2" ) . For mul a = 23
End Sub
A2.4 A Declarao With

A declarao Withpermite voc realizar uma srie de declaraes sobre um objeto especificado sem falar novamente o bvio (o nome
do objeto e seu pedigree, que pode ser muito longo). Se voc tiver mais de uma propriedade para mudar ou mais de um mtodo para
usar para um nico objeto, use a declarao With. A declarao Withfaz seus procedimentos statements rodarem mais rpidos e
ajuda voc evitar digitao repetitivas. A macro seguinte, um pouco artificial, configura algumas propriedades da fonte da clula no
canto esquerdo superior da regio atual da clula ativa. A fonte est configurada como sendo Arial, negrito, vermelha, e 15 pontos de
tamanho.

15
16
17
18
19
20
A B C D E F G
DuasAEsquerdaTresParaBaixoemAo
8 <=3+5
=3+5 <=DuasAEsquerdaTresParaBaixo(A16)
Sub DemoSemWi t h ( )
Act i veCel l . Cur r ent Regi on. Range( " A1" ) . Font _
. Bol d = Tr ue
Act i veCel l . Cur r ent Regi on. Range( " A1" ) . Font _
. Col or I ndex = 3
Act i veCel l . Cur r ent Regi on. Range( " A1" ) . Font _
. Name = " Ar i al "
Act i veCel l . Cur r ent Regi on. Range( " A1" ) . Font _
. Si ze = 15
End Sub

O que segue masma macro usando a declarao With.
Sub DemoComWhi t ( )
Wi t h Act i veCel l . Cur r ent Regi on. Range( " A1" ) . Font
. Bol d = Tr ue
. Col or I ndex = 3
. Name = " Ar i al "
. Si ze = 15
End Wi t h
End Sub

Note o operador Dot(.)antes das propriedades na declarao With.

A2.5 Colees

Uma Coleo um conjunto ordenado de itens que podem ser referidos a elescomo uma unidade. Uma Coleo de objetos fornece
uma maneira conveniente de se referir a um grupo relacionado de itens como um objeto nico. Os tens, ou membros, numa Coleo,
precisam estar somente relacionados pelo fato que eles existem na Coleo. Os membros de uma Coleono tm de compartilhar o
mesmo tipo de dado.

Uma Coleo pode ser criada da mesma maneira que os outros objetos so criados. Os membros podem ser adicionados usando o
mtodo Adde removidos usando o mtodo Remove. Membros especficos podem ser referidos usando-se um ndice inteiro. O
nmero de membros atualmente numa Coleo disponvel via o mtodo Count. Nosso uso das Colees est restrito ao uso do
arsenal (bem numeroso) de Colees que so partes do Modelo Objeto Excel, como a Rows Collection mencionada na seo
anterior.

A2.5.1 A Declarao For Each emUso comArrays e Colees

A declarao For Each uma variao do lao Fornico para VBA. Esta declarao vem com dois sabores distintos.
A primeira variao usa a declarao para laar um array como demonstrado na funo seguinte:
Funct i on SomaPar aCada ( Rng As Range) As Doubl e
Di mEl ement o As Var i ant
Di mSoma As Doubl e
Soma = 0
For Each El ement o I n Rng. Val ue
Soma = Soma + El ement o
Next El ement o
Par aCadaSoma = Soma
End Funct i on


Pontos a serem notados:
23
24
25
26
27
A B C D E
1 4 7 6 <=SomaParaCada(A25:A27)
2 5 8 12 <=SomaParaCada(A25:C25)
3 6 9 45 <=SomaParaCada(A25:C27)
SomaParaCada

O membro atual do array est disponvel s declaraes dentro do corpo do lao atravs de varivel lao
(Elemento na funo).
A varivel lao tem que ser do tipo Variant independente do tipo de array.
Mudar o Elemento no ser refletida no array atual (uma situao de leitura somente).
Voc no precisa saber o nmero de dimenses ou intervalo de ndices para laar o array. A funo anterior funciona nos
intervalos colunas (como na clula E25), intervalos linhas (como na clula E26), e intervalos retangulares (como na clula E27)
da mesma maneira

A2.5.2 A declarao For Each emUso comColees

A segunda verso da declarao For Eachlaa as Colees:

Sub Zer oRange( )
Di mRng As Range
Di mCel l As Var i ant
Set Rng = Act i veCel l . Cur r ent Regi on
MsgBox " A r egi o at ual : " & Rng. Addr ess
For Each Cel l I n Rng
Cel l . For mul a = 0
Next Cel l
End Sub
Pontos a serem notados:
Elemento uma varivel usada para interagir por todos os membros da coleo.

Elemento tem que ser um dos tipos seguintes: Variant, Generic Object, ou o tipo especfico de elemento que a Coleo
feita.

Elementose refere ao membro atual da Coleo, e mudar o Elementser refletido na Coleo.

O uso da propriedade CurrentRegiondo objeto Range. CurrentRegion um objeto Rangeque representa a regio atual. A
regio atual um intervalo limitado por uma combinao de linhas e colunas em branco.

O uso de declarao Set. Uma explicao completa est alm do escopo deste livro. Para os nossos propsitos apenas
assinalar a palavra Setpara todas as tarefas do objeto. Se voc no fizer, o que segue acontecer:

Faltou
oSet
aqui
A2.5.3 A Coleo Workbooks e o Objeto Workbook

Todas as pastas abertas atualmente so representadas por um objeto Workbookna Coleo Workbooks. A macro seguinte lista
todas as pastas abertas numa coluna de clulas comeando na clula ativa:
Sub Li st ar Past asAber t as( )
Di mi As I nt eger
Di mEl ement o As Wor kbook
Act i veCel l . I t em( 2, 1) . For mul a = _
" Li st a das Past as aber t as"
Act i veCel l . I t em( 4, 1) . For mul a = " Cr i ada em: " _
& For mat Dat eTi me( Dat e, vbLongDat e) & " s: " _
& For mat Dat eTi me( Ti me, vbLongTi me)
Wi t h Act i veCel l . I t em( 2, 1) . Font
. Bol d = Tr ue
. Name = " Ar i al "
. Si ze = 12
End Wi t h
i = 5
For Each El ement o I n Wor kbooks
Act i veCel l . I t em( i , 1) . For mul a = _
El ement o. Ful l Name
i = i + 1
Next El ement o
End Sub

Esta a planilha aps a macro ter sido rodada:

Linhas de notas:
Act i veCel l . I t em( 4, 1) . For mul a = _
" Cr i ada em: " & For mat Dat eTi me( Dat e, _
vbLongDat e) & " s: " & _
For mat Dat eTi me( Ti me, vbLongTi me)

A funo Dateretorna a data atual do sistema.

A funo Timeretorna o tempo atual do sistema.

A funo FormatDateTimeformata as variveis Datee Timepara mostrar.

For Each El ement o I n Wor kbooks
Act i veCel l . I t em( i , 1) . For mul a = _

El ement o. Ful l Name
i = i + 1
Next El ement o

A declarao For laa por completo a Coleo Workbooks. Em cada interao o Element um dos objetos da Workbook na
Coleo. FullName a propriedade do objeto Workbookcontendo o caminho completo da workbook.

A prxima macro adiciona uma pasta Coleo Workbooks:
Sub Adi ci onaPast a( )
Di mPast a As Wor kbook
Di mPast aAnt i ga As Wor kbook
Set Past aAnt i ga = Act i veWor kbook
59
60
61
62
63
64
A
Lista das Pastas abertas
Criadaem:quintafeira,31dejulhode2008s:14:08:37
Pasta1
D:\Contabilidade\AdministraoFinanceira\Apostila\Cap02\PlanilhadeCustodeProdutosVendidos1.xls
D:\Excel\Macros\ExemploMacroFinanasemExcel#01.xls
Set Past a = Wor kbooks. Add
Past aAnt i ga. Act i vat e
MsgBox Past a. Ful l Name & " Adi ci onada"
End Sub

Adicionando uma pasta ColeoWorkbooks torna a pasta adicionada mais recentemente a pasta ativa. Se quisermos permanecer
onde estamos, precisamos reativar a velha pasta.

A2.5.4 A Coleo Worksheets e o Objeto Worksheet

Todas as planilhas numa pasta so objetos Worksheetna Coleo Worksheets a qual uma propriedade do objeto Workbook.
Podemos usar a Coleo Worksheets sem um objeto como uma forma curta para ActiveWorkbook.Worksheets.

A2.6 Nomes

A2.6.1 Nomeando umIntervalo Usando uma Macro

A macro seguinte nomeia a regio atual:
Sub NomeDaRegi aoAt ual ( )
Di mRng As Range
Di mMeuNome As St r i ng
Set Rng = Act i veCel l . Cur r ent Regi on
MeuNome = I nput Box( " A r egi o at ual : " & Rng. Addr ess _
& Chr ( 13) & " Ent r ar como _& Nome por f avor : " , " Nomear " , " MeuNome" )
Names. Add Name: =MeuNome, Ref er sTo: =" =" _
& Rng. Addr ess
End Sub











A linha interessante numa macro
Names. Add Name : =MeuNome, Ref er sTo: =" =" & _
Rng. Addr ess

Names uma Coleo de todos os nomes na pasta ativa. Add um mtodo da Cole Names usado para adicionar membros
coleo. Usamos somente os primeiros dois parmetros do mtodo. O primeiro parmetro MeuNome o nome a adicionar Coleo
Names. O segundo parmetro uma string contendo o endereo que o name adicionado se refere, precedido pelo "=".

A2.6.2 Procurando por Nomes Definidos

A funo seguinte procura por um name definido na pasta atual. A funo retorna o valor Boolean"True" se o name definido, e
"False" se ele no faz parte da Coleo Names.
Funct i on ONomeE( Name As St r i ng) As Bool ean
Di mEl ement o As Var i ant
Di mFl ag As Bool ean
Fl ag = Fal se
For Each El ement o I n Names
I f Name = El ement o. Name Then
Fl ag = Tr ue
Exi t For
End I f
Next El ement o
ONomeE = Fl ag
End Funct i on











Note que

Os Names so case sensitive.

O comando Exit Forpode ser usado com o For Each.

A2.6.3 Referindo-se a umIntervalo Nomeado

A funo seguinte calcula o Retorno Mdio de um intervalo nomeado de preos de ativos:

Funct i on Ret or noMedi oNomeado( RangeName As St r i ng) _
As Doubl e
Di mRng As Range
Di mPr ecos As Var i ant
Di mTemp As Doubl e
Di mi As I nt eger
Set Rng = Range( RangeName)
Pr ecos = Rng. Val ue
Temp = 0
For i = 2 To UBound( Pr ecos, 1)
Temp = Temp + ( Pr ecos( i , 1) - Pr ecos( i - 1, 1) ) / _
Pr ecos( i - 1, 1)
Next i
Ret or noMedi oNomeado = Temp / ( UBound _
( Pr ecos, 1) - 1)
End Funct i on

Note o novo modo de usar a propriedade Rangeintroduzida numa:
Set Rng = Range( RangeName)
A2.7 Usando o Pesquisador de objetos (Object Browser)

O Pesquisador de objetos uma maneira conveniente de se aprender sobre os diferentes objetos que esto disponveis ao uso no
VBA. O
pesquisador de objetos pode ser ativado pressionando seu boto na barra de ferramentas do VBA





Ou do menu (Exibir|Pesquisador de objetos...), ou ainda com a tecla de atalho F2.

A janela pesquisador de objetos constituda de dois painis, uma caixa de seleo, e uns poucos botes. Na caixa de seleo voc
pode escolher um conjunto mestre de objetos para observar (dois conjuntos mestres, VBA e Excel, esto sempre disponveis).
Selecione o conjunto mestre VBA para observar objetos que so internos quando se trabalha com o VBA. O conjunto mestre Excel lida
com objetos que so especficos ao Excel. (Ele est em toda parte de um plano master Microsoft, sem inteno de trocadilhos, onde o
VBA um centro de muitas aplicaes, no apenas o Excel.)

37
38
39
40
41
42
43
B C D
Nome ONome
Beny FALSO <=ONomeE(B40)
MeuNome VERDADEIRO <=ONomeE(B41)
meunome FALSO <=ONomeE(B42)
MEUNOME FALSO <=ONomeE(B43)
ONomeemAo



























Uma vez selecionado o conjunto de objetos mestres, os outros dois painis mudaro seus contedos para refletir o conjunto mestre
selecionado. O painel da esquerda uma lista de categorias (classificada em ordem alfabtica ascendente). O painel da direita uma
lista de Propriedades ou Mtodos atribuveis ao objeto selecionado na painel da esquerda. Clicando no boto ponto de interrogao
faz a tela ajuda apropriada ser mostrada. Clicando um nome no painel da direita (ONomeE na tela) mostrar a informao acerca dela
no fundo da tela.

Exerccios

1. Suponha que voc tenha uma planilha com uma srie de nmeros e frmulas:

















Suponha que voc queira transform-la nesta que segue:















Escrever uma macro que realize este propsito. Sua macro (aproximadamente ser baseada na macro ActiveCellDemoda
seo A2.2) dever:

Coloque um grupo de parnteses e multiplique o contedo das clulas por 100.

Mova para baixo uma clulal (ver ActiveCellDemo1, seo A2.2).

Pergunte se voc quer repetir o processo. (Se "yes," ela dever faz-lo; se "no," a macro encerrar).

Nota: Os parnteses tm que vir aps o "=." A funo Rightdever ser usada para esta operao.

Voc poder querer se referir seo A2.3 para mais informao on the funo MsgBox and the values it returns.

2. Reescreva a macro do exerccio 1 de modo que it deals corretamente with the end of the series. Um tratamento possvel no
perguntar para repetir o processo quando se tratar com a ltima clula na srie.


Para esta macro poderia ser til pensar na ltima clula na srie como a clula que cumpre o critrio Cell.Item(2,1).Formula="" (ver
seo A2.3).


3. Escreva uma macro que multiplique todas as clulas na regio atual por 2.

4. Reescreva a macro do exerccio 3 de modo que sua ao seja dependente dos contedos das clulas

Se os contedos da clula forem frmulas ele ser trocado pela mesma frmula multiplicado por 2.
1
2
3
4
5
6
7
8
9
10
A B C
Preo Retorno
1.000,00
1.019,66 0,019660 <=A3/A21
1.020,79 0,001108 <=A4/A31
1.025,36 0,004477 <=A5/A41
1.045,42 0,019564 <=A6/A51
1.065,90 0,019590 <=A7/A61
1.076,74 0,010170 <=A8/A71
1.091,68 0,013875 <=A9/A81
1.101,61 0,009096 <=A10/A91

1
2
3
4
5
6
7
8
9
10
A B C
Preo Retorno
1.000,00
1.019,66 1,966000 <=(A3/A21)*100
1.020,79 0,110821 <=(A4/A31)*100
1.025,36 0,447692 <=(A5/A41)*100
1.045,42 1,956386 <=(A6/A51)*100
1.065,90 1,959021 <=(A7/A61)*100
1.076,74 1,016981 <=(A8/A71)*100
1.091,68 1,387522 <=(A9/A81)*100
1.101,61 0,909607 <=(A10/A91)*100

Se os contedos da clula forem nmeros ele ser trocado por um nmero igual to the nmero antigo multiplicado por 2.

Sobre todas as outras clulas na regio atual nada ser feito.

Nota: Para os propsitos deste exerccio uma frmula qualquer coisa comeando com "=," e um nmero qualquer coisa
comeando com os caracteres "0" a "9."

5. Reescreva a macro do exerccio 4 de modo que ela use um outro mtodo (o correto) para detetar a existncia de uma
frmula na clula. Observe as diferentes propriedades do objeto Range no arquivo ajuda.

6. As anotaes para as frmulas de planilha neste livro foram feitas com uma macro. Por exemplo rodando uma macro
Nesta planilha, "B16" sendo a clula ativa:










Produz a planilha seguinte:









Note que a coluna mudou de largura. Escreva uma macro para realizar a anotao. Se a clula imediatamente direita da clula
ativa no estiver vazia, uma macro dever sobreescrev-la somente aps receber a confirmao do usurio.

7. O objeto Selectionrepresenta a seleo atual na planilha. Selection geralmente, e para nossos propsitos sempre, um objeto
Range. Reescreva a macro ido exerccio 6 de modo que ele funcione num intervalo selecionado.

Note o seguinte:

Se o intervalo selecionado uma clula nica ative a macro do exerccio 6.

Se o intervalo selecionado um intervalo linha as anotaes devero ir para baixo do intervalo selecionado.

Se o intervalo selecionado mais do que uma coluna ou uma linha, a macro dever abortar com uma mensagem
apropriada.

8. As funes Array (Matriz) so funes que retornam com mais do que um valor. Por exemplo, a funo de planilha TRANSPOR
1

retorna seu argumento girando por 90 graus, como demonstra a seguinte planilha:








As chaves no foram digitadas, mas foram adicionadas pelo Excel para indicar uma frmula array. A macro seguinte criou a planilha
anterior.

1
EstafunoembutidadoExcelencontrasenaCategoriaProcuraereferncia

1
2
3
4
5
6
A B C D E F
TranspoeMeemAo
1 2 3 4 1 <{=TRANPOR(A3:D3)}
2 <{=TRANPOR(A3:D3)}
3 <{=TRANPOR(A3:D3)}
4 <{=TRANPOR(A3:D3)}
15
16
17
18
19
B C D
1
1 <=SOMA($B$15:$B15)
2
4
8
15
16
17
18
19
B C D
1
1
2
4
8
Sub Tr anspoeMe( )
Range( " E3: E6" ) . For mul aAr r ay = _
" =Tr anspose( A3: D3) "
End Sub

A prxima macro uma verso mais complicada que poder tratar com qualquer tamanho ou lugar no intervalo de linha.

Sub Tr anspoeMeTambem( )
Di mL As I nt eger , C As I nt eger
C = Sel ect i on. Col umns. Count
L = Sel ect i on. Rows. Count
I f C = 1 Then uma Col una
MsgBox " Eu no f ao Col unas"
El seI f L = 1 Then uma Li nha
Sel ect i on. Cel l s( 1, C + 1) . Range( " A1: A" _
& C) . For mul aAr r ay = " =Tr anspose( " & _
Sel ect i on. Addr ess( Fal se, Fal se) & " ) "
El se O que el a ?
MsgBox " O que el a ?"
End I f
End Sub

Reescreva o TranspoeMeTambem de modo que ele possa tratar com intervalos de colunas to bem quanto intervalos de
linhas.

9. Reescreva o TranspoeMeTambem do exerccio 8 de modo que ele possa tratar com todos os intervalos a primeira vista.

Apndice: Hierarquia do Objeto Excel

Objetos do Microsoft Excel





























Microsoft Excel Objects (Worksheet)

Вам также может понравиться