Você está na página 1de 42

23/10/06 Matria

1. 2. VBAcomintegraonoExcel; ModelosdeSimulao;

Avaliao
Exame+Projectonummximode20valores. VBAVisualBasicForApplication.

30/10/06
OVisualBasicForApplication(VBA)umaferramentaquevemcomtodososprogramasdaMicrosoftetemcomo funcionalidade,permitirfazerextensesprprias. Existem objectos especficos para cada uma das aplicaes da Microsoft, ou seja, o Word tem uma lista de objectosespecficos,talcomooExcel,oPowerPoint,oOutlook.

NoExcel,ostrsobjectosprincipais,so:

1) Application;
Dizrespeitoprpriaaplicao,nestecasoaoExcel,etemcomofunoverificarseesteseencontradisponvel.

2) WorkBook;
DepoisdeoobjectoApplicationverificarqueoExcelseencontradisponvelepodendoounoestarumficheiro aberto, ou seja, o Excel encontrarse carregado em memria, este objecto, WorkBook, vai verificar se um determinadoficheiroestounoaberto.

3) WorkSheet;
Encontrandoseumficheiroaberto,etendodentrodecadaficheirodadosorganizadosporWorkSheets(Folhasde Clculo),esteobjectovaipermitiracederaocontedodessasmesmasFolhasdeClculo. Estestrsobjectosencontramseorganizadosdeuma formahierarquica,istoquerdizerque, porexemplo,para existir uma WorkSheet necessrio que exista orbigatoriamente um WorkBook e por sua vez, para que este WorkBook exista, necessrio que exista o objecto Application. No entanto, o objecto Application pode existir, sem que exista a seguir um WorkBook e uma WorkSheet e pode tambm existir um objecto Application e um WorkBooksemqueexistaumaWorkSheet. Porexemplo:

2005 (WorkSheet)

Excel (Application) WorkBooks Custo Despesas (WorkBook) (WorkBook) WorkSheets 2006 (WorkSheet)

WorkSheets Vendas Anuais (WorkSheet)

Nesteexemplotenhodoisficheirosabertos,oCustoseoDespesas.NoficheirodoExcelDespesasapenastenho umaWorkSheet(FolhadeClculo)aVendasAnuais.EnquantonoficheiroCustostenhoduasWorkSheets,a2005e a2006.

NoVisualBasicforApplicationstenhoaindamdulos.Estespodemser:

a. MdulosdeClasse
MdulosdeClasse,somdulosqueassociadosaobjectosqueseencontramnoVisualBasicforApplications, nacolecodoExcel.Soespecficosdecadatipodeobjectos. Osnomes,osparmetrosdeentradaedesadanopodemseralterados.

b. MdulosGerais
SomdulosqueseencontramaonveldaFolhadeClculo,sendogenricoseexternosetemacapacidade depoderemseracederaesta.

Exerccio1 IntroduoaoVisualBasicforApplicationsnoExcel.
ParaacederaoVisualBasicforApplicationsnoExcel,necessrio: 1AbrirumficheirodeExcelvazio;

2AcederaomenuToolsnabarrademenus;


EscolheromenuMacrosedentrodeste,osubmenuVisualBasicEditor;

3DentrodoVisualBasicEditor,escolhoProjectExplorer,casonoseencontreaberto,nomenuView;

AoescolheroProjectExplorersomeapresentadasastrsWorkSheetsqueoExcel tempordefeito. O Project Explorer funciona como o Microsoft Windows Explorer, sendo uma estrutura hierarquizada e permitindome visualizar os elementos de um projecto e navegaratravsdestes.

4 Efectuar um duplo click em ThisWorkBook na janela do Project Explorer, de modo a passar para a parte de ediodecdigo;

5Paracriarummdulogeral,nomododeediodecdigoescrevoSubseguidodonomeparaessemdulo.Ao fazerEnterelefechaautomaticamenteomdulocomEndSubeescrevefrentedonomedomduloparntises. dentrodesteparntisesqueescrevoosparmetrosdeentradaedesada.Entreoinciodomduloeofimdo mesmo,escrevoocdigo.

SubTeste() EndSub

Aofazeristo,estouacriarummdulo quegeralparatodo oWorkBook.Ficandoestemduloassimtambm, automaticamentereferenciado.EsteWorkBookreconhecidoemtodasasWorkSheetspertencentesaeste,pois estouatrabalharsobreumnvelhierarquicosuperiorsWorkSheets,ouseja,estouatrabalharnoWorkBook.

Paraefectuarcomentrios,atravsdoapostrofe(),seguidodocomentrio. 'Comentrio

6ParadeclararvariveisatravsdapalavrareservadaDim.Onomedavariveladesignaoatravsdaqual ela pode ser referenciada, o tipo de dados define o tipo de informao que esta pode conter e o contedo representaovalorefectivodavarivel.Assim,paradeclararumavarivel:

Dimnome_da_varivelAstipo_de_dados

Porexemplo:
SubTeste() DimabcAsInteger EndSub

Nestecaso,avarivelabcumavarivellocalequeserinstanciadaquandoomduloarrancarequedesparece quandoestemesmomdulotermina.

Integer:tipodedadosqueassumevalorespositivosenegativos.

7Dentrodeummesmomdulo,possotervriasvariveiseefectuaroperaesentreestas: SubTeste2() DimnomeAsString Dimidade1AsInteger Dimidade2AsInteger Dimidade3AsInteger nome="Manuel" idade1=12 idade2=23 idade3=idade1+idade2 EndSub OtipodedadosStringapresentaumtamanhodefinido,masdevesesempredefinir,quandosesabe,umtamanho para esta varivel, pois quando no se efectua a atribuio de um tamanho mximo, ele disponibiliza toda a capacidade deste tipo de dados, mesmo quando no necessrio, tornando assim o programa mais lento e ocupandoestemaisespaoemdisco. OvalordeumavariveldotipoStringapresentadoentreaspas(valor_da_varivel). nome_da_varivel=valor_da_varivel Porexemplo: nome="Manuel" AocontrriodoqueaconteceemSQL,emqueamesmainstruoestartodaescritanamesmalinha,ouemlinhas separadasteriaomesmoefeito,emVisualBasicforApplications,cadalinhaumasinstruo. 8EmVisual BasicforApplicationsexiste tambmaposibilidadede interagircomoutilizador,ou seja,receber informaodestemesmo.

AinteracocomoutilizadorpodeserfeitaatravsdeInputBoxoudeumaMessageBox,porexemplo. ComomduloQual_o_Peso,apresentadoaoutilizadorumaInputBox,naqualesteintroduzoseupeso. Omdulocriadoparaefectuartaloperaofoi: SubQual_o_Peso() DimtotalAsInteger total=InputBox("Qualopeso)","ISTEC") EndSub UmaInputBoxapresentaumparmetroobrigatrioeumconjuntodeparmetrosopcionais. Oparmetroobrigatriodizrespeitoperguntaquefeitaaoutilizadoreoprimeiroparmetroaserdefinido. Osegundoerestantesparmetrossoopcionais.OsegundoottuloqueaInputBoxapresenta,nestecasoser ISTEC,eoterceiroparmetroovalorquevempordefeitonolocalemqueoutilizadorescreveasuaresposta. Pordefeito,esteterceiroparmetrovemembranco. Ento,todososparmetrosqueumaInputBoxpodeterso:

Paraexecutarumdeterminadomdulo,colocoocursornolocalemqueessemduloseencontraescritoecarrego emF5. Ento,aoefectuarF5nomduloSubQual_o_Peso(),aInputBoxqueapresentadaaoutilizador:

AInputBoxumafunoecomotalretornaumvalor,sendoestaadiferenaparaumprocedimento,poiseste noretornaqualquervalor. Ovalorqueafunoretornaguardadonavarivelassociadafunoquenestecasofoiavariveltotal. Otipodeinformaotemqueserdomesmotipodosdadosdavarivel,porexemplosecolocarabcnototaliria darerro. 9 Para alm de poder receber informao do utilizador (InputBox), posso tambm enviar informao para o utilizador,eparatalrecorresescaixasdemensagens,isto,MessageBox. Ento,parareceberinformaodoutilizadoreenviarinformao,escreviomduloseguinte:

SubQual_o_Peso2() DimtotalAsInteger DimpesoAsString total=InputBox("Qualopeso)","ISTEC") peso="Opeso:"+CStr(total) MsgBox(peso) EndSub

Nestemdulo,outilizador,talcomonoanterior,insereoseupeso,masdeseguidalheapresentadaumacaixa detextocomovalorqueesteintroduziu.

Inicialmenteemquenomdulohaviaalinhadecdigo:

peso="Opeso:"+total

davaerro,erro13.Esteerrorelativocompatibilidadedosdados,eistoverificavasedevidoanesteexemplo porquequeriajuntarumaString(MessageBox)comumInteger(valorintroduzidopeloutilizador),eassimsendo para poder juntar (+) tenho que converter o valor introduzido na varivel (total) para String e para isso uso o ConvertoToStringouCStr.

peso="Opeso:"+CStr(total)

AfunoMessageBox,talcomoafunoInputBox,apresentaapenasumparmetroobrigatrioeumconjuntode parmetrosopcionais.Oparmetroobrigatriodizrespeitoaoquedevesermostradoaoutilizador,nestecaso,o valorintroduzidonaInputBox.OsegundoparmetrootipodeMessageBox,isto,seficarovalorprdefinidoo nico boto que apresentado ao utilizador o boto de Ok, mas posvel escolher outro valor para este parmetroemfunodoquesedeseja,porexemplo,podeserapresentadaumaMessageBoxcomosbotesde Yes,NoeCancelequeemfunodobotoemqueoutilizadorefectuarumclick,aconteceumeventodiferente.O terceiroparmetroottulodaMessageBox,quequandonoalterado,aparececomoMicrosoftExcel. AlistadeparmetrosdafunoMessageBox:

Exerccio2 Efectuaroclculodareadeumquadradoemfunodadimensodoladoqueoutilizador introduzir.


Paraesteexerccio,talcomoparaoexerccioanterior,crieiumficheirodeExcelnovoeembranco.

PasseiparaoVisualBasicforApplications,nomenuTools,MacroeVisualBasicEditorouAlt+F11.

De seguida no Project Explorer efectuei duplo click no WorkBook sobre o qual quero trabalhar e passei para o modo de edio de cdigo. No modo de edio de cdigo criei o mdulo Area_Quadrado. Ser este mdulo responsvelporpediraoutilizadorovalordoladodoquadradoemostrarareadeste. Ento,omduloArea_Quadradofica: SubArea_Quadrado() Dimlado1AsInteger DimareaAsLong lado1=InputBox("QualoValordolado?","Cculodarea") area=lado1*lado1 MsgBox(area) EndSub Quandoexecutado(F5),primeiramenteapresentadaumaInputBoxondeoutilizadorcolocaovalordoladodo quadrado.

Tendoporexemploovalordelado2,depoisdeefectuadoumclicknobotoOKapareceumaMessageBoxcomo valordarea,queser4.

AvarivelareafoideclaradocomosendodotipoLong(DimareaAsLong).Estetipodedadosemtudoigualao tipoInteger,masapresentaumamaiorcapacidade.

Propriedades
Tudo o que visual tem objectos e esses mesmos objectos apresentam caractersticas, propriedades. Estas propriedadesso,porexemplo,oName,oCaption,oValue/Text,aColor,esopropriedadespassiveisdeserem manipuladas. AlgumasdestaspropriedadessocomunsaoutrosobjectoscomoapropriedadeName,noentanto,algumasso especficasde alguns objectoscomo a propriedadeValue / Text,em queporexemplo oboto j noapresenta estapropriedade.ApropriedadeColor,emfunodoobjectoeemfunodasituaopodeounoencontrarse disponvel. Uma propriedade que exclusiva das TextBox permitirem a Mask, ou seja, esta propriedade transformatudooqueforintroduzidoemasteriscos. Estaspropriedadespodemseralteradasdedoismodosdistintos: 1. Quandoestouadesenharoobjecto,todasassuaspropriedadespodemseralteradas; 2. Nafasedeexecuo,apenaspossoalteraralgumaspropriedades.PorexemploapropriedadeNameno pode ser alterada nesta fase, pois ao criar objectos e estando instanciados se alterase a propriedade Namedeixariadeopoderreferenciar.

Exerccio3 AlterarapropriedadeCaptiondeumbotoatravsdeumclick.
Com este exerccio quer poderse alterar a propriedade referente ao aspecto (Caption) de um boto, quando o utilizadorefectuarumclicksobreeste. PrimeirocrieiumnovoficheirodeExcel.NesteficheirofuiaomenuView,ToolbarseescolhiControlToolbox.

TendoaControlToolboxdisponvelseleccioneiobotodecomando(CommandButton).


ComoCommandButtonseleccionado,noExceldesenheiumboto.

ApsterdesenhadooCommandButton,seleccioneioecomobotodoladodireitodoratosobreobotoescolhi a opo Properties e apresentada a janela de propriedades do objecto.

Aspropriedadesapresentadasnestajanelasoemfunodoobjectosquaissereferem,ouseja,cadaobjecto temassuaspropriedades,soespecficas. ApropriedadeCaptionreferenteaoaspectocomqueoobjecto(CommandButton)apresentadoaoutilizador. Faoduploclicksobreobotoepassoparaomododeediodecdigo,masreferenteaoobjectoboto. Nomododeediodecdigo,notopoesquerdoedireitotenhoduasComboBoxquesoreferentesa: Objectos(ComboBoxesquerda)

Eventos(ComboBoxdireita)

Oeventoclickoeventoquepordefeitoseencontraassociadoaoobjectodotipoboto. AoescreverCommandButton1seguidodeponto(.)apareceumalistacomtodasaspropriedadesemtodosdeste objecto.Aspropriedadessodefinidascomsmbolo eosmtodoscomosmbolo . Ento,comoapropriedadequequeroquesejaalteradaaCaption,escrevidentrodoprocedimentocriadoparao CommandButton1comoeventoclick: PrivateSubCommandButton1_Click() CommandButton1.Caption=Now EndSub

O que isto significa que cada vez que o utilizador efectuar um click sobre o boto CommandButton1, a sua propriedadeCaptionigualaNow,ouseja,devolvidocomopropriedadeCaptiondoCommandButton1otempo actual.

2/11/06 Mtodos
Os mtodos so as aces que os objectos podem desenvolver. Consuante o objetco, existem diversos tipos de mtodosdisponiveis. Porexemplo: OmtodoMovepermitemoverumdeterminadoobjecto Representaodeummtodo: nome_do_objecto.nome_do_mtodo Osmtodosapresentamumasriedeopes.

Eventos
ParaalemdasPropriedadesedosMtodos,osobjectospossuemaindaEventos.Oseventosrepresentamaquilo queosobjectosreconhecemcomosendopossveldeaco.Porexemplo,oeventodeclickdeumboto. Porobjecto,tenhoumconjuntodeeventos,eemfunodoobjectotenhoumdeterminadoevento. Associadoaumeventotenhoumaaco,queumalinhadecdigo,eassimsendo,porcadaeventoexisteum procedimentoassociadoquepodeounoterlinhasdecdigoassociadas. Vamosusar,basicamente,mdulosassociadosaeventos,mtodosemdulosgenricos.

MdulosGenricos
Os mdulosgenricos, so mdulos de cdigodentro de uma folhade clculoque executa umafuno quando chamado. TemosdoistiposdeMdulosGenricos: Mdulos Genricos de Folhas de Clculo (WorkSheet): So reconhecidos na WorkSheet em que so escritos e apenasnessa; MdulosGenricosdoWorkBook:SoreconhecidosnumdeterminadoWorkBook.Servemparaquandosequer aplicarumdeterminadocdigoatodasasWorkSheetsquepertencemaesseWorkBook; Quandoseabreumfolhadeclculo,eseacedeaocdigoesteencontrasevazio.Aoadicionarumcomando,cria umprocedimentoparatodososeventosdocomando,nprocedimentos. Seadicionar,porexemplo,umacaixadetexto,criadooutroprocedimento. Snoseverificaacriaodeprocedimentosparacadaobjecto,nocasodetermosumarraysdebotes,emque cadabotoreconhecidopeloseuindexenoporumprocedimentodiferente.

Porexemplo:

10

Queroquesemprequeseverificardeterminadasituao,elelimpeotexto: FaoummduloparaoWorkSheet.PassaassimaserumprocedimentogenricoparaessaFolhadeClculo. TiposdeDadosdoVisualBasic TipodeDados Capacidade Observaes Byte 0a255 Integer 32.768a32.768 2.147.483.648a igualaoInteger,masapresentamaiorcapacidadede Long 2.147.483.648 armazenamento; 3.40E38 a1.40E45para negativos Singlee Apenasparainteirosedecimais; a Double 38 3.40E positivos 922.377.203.685.477,5807 Currency a Quinzeesquerdaequatrodireitadavrgula; 922.377.203.685.477,5807 Fixaat65.536caracteres String AsStringspodemterdoistamanhos; Varivel2.147.483.648 PodealbergarData(MM/DD/AAAA),Hora(HH:MM:SS),Datae Date 11100at31129999 Hora; Boolean TrueouFalse VerdadeiraouFalso; Objects umavarivelquepermitereferenciarumficheiro; umtipodedadosquevariaemfunodautilizaoquelhe dada.Quandonodefinootipo,entoassumidocomosendo Variant dotipoVariant.Adpataemfunodasnecessidades. Consomemmuitamemriaetornamosprogramaslentos; Permitecriarumtipodedadosespecficoscomainformao Personalizados queeuquero;

Exerccio1 Determinaravalidadedetiposdedados.
Byte DimvalorAsByte valor=6Estacorrecto,poisestadentrodoslimites; valor=12.6Nofaztruncagem,mastemacapacidadedearredondar,ficando13internamente; valor=23Estaerrado,poisnoadmitenmerosnegativos; valor=330Erradoporqueestforadolimite; Integer DimidadeAsInteger

idade=23Estcorrecto,poisestdentrodacapacidade; idade=330Tambmseencontracorrectoporestardentrodacapacidade; idade=24.5Admite,emborainternamentearredondepara25; idade=50000Errado,porquesaiforadoslimites;

11

Single DimtxAsSingle DimfundoAsDouble tx=2.17Correcto; tx=5E49Errado,saiforadacapacidade; fundo=0Correcto; fundo=2.22223458Correcto; Currency DimjurosAsCurrency juros=16.75Correcto; juros=13.45672Correcto,masarredondadevidoaonmerodecasasdecimais,poisnoadmitetantas; juros=16.75Errado,devidoaocaracterespecial(); Date DimdiaAsDate DimhorasAsDate DimagoraAsDate dia=#5875#Estcorrecto; dia=#131285#Esterrado,poisnoexistem13meses: hora=#12:34:54#Correcto; agora=#6/6/200612:32:23#Correcto; dia=#12_12_2012#Errado,poisapenasadmiteea/comoseparadordodia,mseano; Variant DimA DimB DimC DimD DimE A=10DefinecomosendodotipoByte; B=30000ComosendodotipoInteger; C=ZDotipoString; D=A*BDefinecomosendodotipoLong,poisamultiplicaodeAporB,superiorcapacidadedoIntegerou doByte; E=A+CDotipoString,juntandoZcom10; Personalizados PublicTypeCliente NomeAsString IdadeAsInteger DescontoAsSingle EndType

12

SubRegistar DimTop_ClienteAsCliente Top_Cliente.Nome=CarlaF Top_Cliente.Idade=34 Top_Cliente.Desconto=12.34 EndSub Neste exemplo, o tipo de dados Cliente. criado no Declarations da minha WorkSheet. Public para poder ser conhecidonoWorkSheet.TerminaainstruoemEndType. Apartirdestemomento,almdetodososoutrostiposdedadospossveis,existeaindamaiseste(Cliente). OprocedimentoRegistar,foicriado,porexemplo,naWorkSheet1esequiserutilizaremnumaoutraWorkSheet, tenhoqueescreverWorkSheet1.Regista(WorkSheet1.Nome_do_Procedimento).

Ao invs de fazer assim, como se pode tratar de um procedimento que queira usar em vrias WokSheets, posso, na Janela Project Explorer, criar este mesmo procedimento dentro de um Mdulo (boto do lado direito do rato, fazer Insert e depois escolher Module), criandodestaformaumMduloGenrico,oqualposso usarechamar,emqualqueraltura,bastandoescrevero nomedessemesmoMdulo. Para alm dos procedimentos, tambm posso fazer o mesmoparaasvariveis,criandoassimvariveisglobal.Paraissoescrevo: Globalnome_da_variavelAsTipodeDados Podemexistirdoistiposdeerros: 1. Overflow:Quandotentamosarmazenaralgomaiordoqueacapacidadedessamesmavarivel; 2. Mismatch: Quando quero passar um tipo de dados que no suportado, ou seja, falta de compatibilidade;

Arrays
OsArrayspodemserdedoistipos: 1. UnidimensionaisEstticos Dimalunos(33)AsString Dimdisciplinas(1to8) alunos(3)=AnaEstacorrecto,poisoindex3pertenceaoarray; alunos(34)=CarlaErrado,poispassaotamanhodoarray; disciplinas(4)=ProgCorrecto; disciplinas(0)=SimulaesErrado,poisoprimeiroindexo1; Nestecaso,temosumarrayunidimensionalestticode34elementos(alunos(33)),poiscomeaem0eacabaem 33.Osegundo(disciplinas(1to8))apresenta7elementos,poisvaide1a8.

13

2. UnidimensionaisDinmicos Dimdias()AsDate dias(0) = #12122012# Est errado, pois nos arrays dinmicos, no escrevo o index e para isso tenho que redimensionaroarray(Redim). Redimdias(3)Redimensionamentodoarray.Passaaterosindex0,1,2e3.Quatroelementos; dias(0)=#12122012#Estacorrecto; RedimPreservedias(Ubound(dias)+9)Paraalteraradimensodeumarrayepreservarocontedousoapalavra reservadaPreserveassocidaaoRedim.Estouaaumentaroarrayem9,ficandocom13(4+9=13); 3. Multidimensionais Dimficheiro(7,2)AsString ficheiro(3,0)=Santos O primeiro valor (7), referente ao nmero de linhas e o segundo valor (2)ao nmero de colunas de umarray multidimensional. Nestetipodearray,spossoindicarseforemtodosdosmesmotipodedados(linhasecolunasdomesmotipode dados),casocontrrioterqueserdotipoVariant. NosarraysmultidimensionaisspossofazerRedimPreserveaoltimolimite,ouseja,scolunas. Porexemplo, RedimPreserveficheiro(7,3).

6/11/06 EstruturasdeControlo
As estruturas de controlo so utilizadas quando existe uma necessidade de controlar o fluxo das rotinas, saltandoalgumasdeclaraes,executandoalgumasmltiplasvezes,etestarcondiesparadeterminaroquea rotinadeveexecutaremseguida,casoalgoseverifique. Estasestruturasdecontroloapresentam: Condies; Ciclos; AsestruturasdecontrolomaisutilizadassoaIfThen,aestruturaSelectCase,aestruturaWhile,aUntil,oForeo ObjectRange.

1. EstruturaIfThen
provavelmenteaestruturadecontrolomaisutilizadaemVBA.Estaestruturautilizadafrequentementepermite atribuiraumaaplicaoacapacidadedetomardecises.Umaboacapacidadededecisoachaveparaescrever programasdequalidade.UmaaplicaodesucessoemExcelbasicamenteteracapacidadedetomardecisese agiremconcordnciacomestas. AsintaxebsicadaestruturaIfThen: IfCondioThenInstruo_Verdadeira[ElseInstruo_Falsa]

14

InstruoVerdadeira:Executaestainstruo,casoacondioseverifique; InstruoFalsa:Estaexecutadaseacondionoseverificar; Estaestruturautilizadaquandosequerexecutarumaoumaisdeclaraesdemodocondicionado. AclusulaElseopcional,masseincluda,deixaaoprogramadorexecutarumaoumaisinstruesenquantoa condioqueeuestouatestorfrfalsa. AestruturaIfThenpodesermontadadediferentesformas:

Testenumaslinha;
IfNome=FilipeThenIdade=33

Testeemlinhasdiferentes;
IfIdade<0Then MsgBox(Erro) Idade=1 EndIf Neste formato, comease por testar a condio (Idade < 0) e depois executar as instrues caso a condiosejaverdadeiras.

UtilizaodaclusulaElse;
IfMensagens=10Then MsgBox(CaixaCheia) Disponivel=0 Else MsgBox(XPTO) Disponivel=1 EndIf Comea, como sempre, por efectuar o teste condio e caso seja verdadeiro, executa as intrues (MsgBox(CaixaCheia)eDisponivel=0), casootestecondiosejafalso,executaoqueseencontra depoisdaclusulaElse(MsgBox(XPTO)eDisponivel=1).

ClusulaElseIf
IfNota=0Then Avaliacao=Norealizouprova ElseIfNota>=8AndNota<10Then Avaliacao=Oral ElseIfNota>=10Then Avaliacao=Aprovado Else Avalicao=Reprovado EndIf

15

Quando a estrutura de controlo apresenta as clusulas If e Else If, executa se as condies que apresentam forem verdadeiras. Salta para a clusula Else, apenas quando nenhumas das condies se verificar. Com a utilizao destasclusulas tenho que garantir que estouaabranger todoas as hiptese posiveis. Porexemplo,seovalordavarivelNotafriguala9,aoefectuarostestesapenasirdarverdadeirono segundo (ElseIf Nota >= 8 And Nota < 10 Then), executando assim, a instruo que corresponde (Avaliacao=Oral). DeveapenasusarseaestruturaIfThenapenasquandosequertomardecisesbinriassimples.

2. EstruturaSelectCase
AestruturaSelectCase,tilquandosetemqueescolherentretrsoumaisopes.Trabalhatambmcomduas opes,sendoconsideradaumaboaalternativaestruturadecontroloIfThenElse. AsintaxegeraldeumSelectCase: SelectCaseExpresso_a_Testar [CaseNmero_do_Teste Condies] [CaseElse [Condio_por_Defeito]] EndSelect Nestaestrutura,aocontrriodaestruturaIfThen,acondiofeitalogoaoincioesdepoisverificoosvalores. Exemplo: SelectCaseCategoria Case1 Bonus=Salario*0.1 Case2,3 Bonus=Salario*0.09 Case4To6 Bonus=Salario*0.08 CaseIs>8 Bonus=100 CaseElse Bonus=0 EndSelect Neste exemplo, estou a efectuar o teste varivel categoria. Se fr por exemplo igual a 1, executa o que se encontradentrodoprimeiroCase.Sefr7ou8cainoCaseElse,poismaisnenhumcontemplaahiptesede aCategoriaseriguala7ou8,tendoentoestesumBonus=0. Na estrutura Case, tambm se pode utilizar a vrgula (,) para separar mltiplas hipteses (Case 2, 3) que ao se verificaremtemtodasamesmaopo. Talcomoemmatemtica,tambmposveldefinirintervalos(Case4To6)ashipteses,emqueosextremos(4e 6),tambmficamincludos. OVBAsaidaestruturaSelectCaseassimqueencontraroCaseverdadeiro,porisso,porumaquestodeeficincia devecolocarselogocomoprimeiroCaseoqualtemmaisprobabilidadesdeseverificar.

16

3. EstruturaDoWhile
OcicloDoWhileexecutadoenquantoumadeterminadacondioseverificar,ouseja,forverdadeira. Asintaxegeral: Do[Whilecondio] [intrues] [ExitDo] [instrues] Loop Porexemplo: Subexemplo_while() numero=20 DoWhilenumero>10 numero=numero1 contador=contador+1 Loop MsgBoxOciclofoiexecutado.&contador EndSub OLoopfazcomqueexecuteociclo.

4. EstruturaDoUnitl
AestruturaDoUntil,muitoparecidacomaestruturaDoWhile.Adiferenaencontraseapenasnaalturaemque acondiotestada.NumaestruturaDoWhile,oLoopexecutadoenquanto(while)acondioverdadeira.Na estruturaDoUntil,oLoopexecutaat(until)acondioserverdadeira,isto,executadoenquantoacondio forfalsa. Asintaxegeral: Do[Untilcondition] [instructions] [ExitDo] [instructions] Loop Porexemplo: Subexemplo_until() numero=4 DoUntilnumero=0 numero=numero1 contador=contador+1 Loop MsgBoxXPTO EndSub

17

Comoociclo(Loop)repetidoenquantoacondioforfalsa,quandoestaforverdadeirasaidociclo.Enquanto umacondionoforfalsa,nofazociclo.

5. EstruturaFor
OcicloForapresentaasintaxegeral: Forcontador=inicioTofim[Stepvalordeincremento(pordefeito1)] [instrues] [ExitFor] [instrues] Next[contador] Porexemplo: SubSor() Forcontador=1To5 Beep Nextcontador EndSub Enquanto o contador estiver entre 1 e 5 enviado um beep. Tem inicio em 1 e vai at 5. O incremento feito automaticamentenainstruoNextcontador. Quantonodefinidoovalor doincremento,utilizadooseuvalor pordefeitoque1,mas possodefinirum incrementoatravsdainstruoStep.

Exemplo1: Forcontador=2To20Step2 Nestecasoocontadorinicializadoa2evaiat20,sendoincrementadode2em2. Exemplo2: Forcontador=20To2Step2 Ocontadorinicializadoem20,edecrementadode2em2,atseriguala2. Para alm da sintaxe geral do ciclo For, este pode apresentar uma variao, que latente com a utilizao da instruoEach. Exemplo3: SubCiclo() ForEachfolhaInApplication.Sheet MsgBoxfolha.name Next EndSub UmForEachvaipesquisarumconjuntodeobjectosdentrodaApplication,todasasfolhasdeclculodentrodeum WorkBook.

18

Exemplo4: SubCiclo_Matrix() Dimmatrix(9)AsInteger DimelementoAsVariant ForEachelementoInmatrix MsgBoxmatrix(elemento) Next EndSub Dentrodamatrizvoupesquisartodososelementosdamatriz,squeutilizoavarivelelementocomondiceda matrizparaprocuraroselementos.

6. EstruturaObjectRange
OObjectoRangepermitemanipularasfolhasdecalculo.Apresentaasfunesvalue,select. Range(A1).value=100atribuicelulaA1ovalor100; Range(B4).SelectseleccionaaclulaB4; Range(A1:B6)=10todasasclulasdeA1aB6apresentamovalor10;

Exerccio1
1 Cria um boto de comando; 2 O utilizador deve colocar um valor em escudos na clula B3; 3 Quando precionaroboto,ovalordaclulaB3deveserconvertidoparaeuroseapresentadonaclulaB4;4Deveexistir umaformadetratarospossveiserros; Paraesteexercciocoloqueiumboto,noqualaltereiapropriedadeCaptionparaConverter.Introduziumalabel quemostraqualafunodoboto. NomododoVisualBasicEditor,escreviocdigo: PrivateSubCommandButton1_Click() ConstfactAsSingle=200.482 DimescudosAsLong DimeurosAsDouble OnErrorGoToErro escudos=Range("B3").Value euros=escudos/fact Range("B4").Value=euros ExitSub Erro: MsgBoxError EndSub

19

9/11/06 Exerccio1

Tendoporbaseofluxogramadeumprograma,construirestemesmo,quetercomofunodeterminaromximo divisor comum entre dois nmeros. Os valores sero introduzidos nas clulas B1 e B2. Este clculo deve estar associadoaoprecionardeumbotoeovalordomximodiivsorcomumdeveserescritonaclulaB3. PrivateSubCommandButton1_Click() 'Variveis DimN1,N2AsLong DimMaior,Menor,DivisorAsLong DimMDCAsLong 'ValoresdasClulas N1=Range("B1").Value N2=Range("B2").Value IfN1<=0ThenErro"Primeiro" IfN2<=0ThenErro"Segundo" SelectCaseN1 CaseIs=N2 MDC=N1 Range("B3").Value=MDC ExitSub CaseIs>N2 Maior=N1 Menor=N2 CaseIs<N2 Maior=N2 Menor=N1 EndSelect Divisor=Menor DoWhileDivisor>=1 IfMaiorModDivisor=0AndMenorModDivisor=0Then MDC=Divisor ExitDo Else

20

Divisor=Divisor1 EndIf Loop Range("B3").Value=MDC EndSub SubErro(OrdemAsString) MsgBox"O"&Ordem&"deveser>0" Range("B3").Value=Empty End EndSub EndSub

SelectCaseN1 ExitSubSairdoprocedimento; OrdemAsStringpassaraentrar;

Exerccio2 Idade Nome 1Colocaraseguinteinformaonafolha1,nasclulasA1:B7; 1 AB 2Colocarainformaonumarray; 2 CD 3Apagartodaainformaodointervaloindicado; 3 EF 4 GH 4Copiarainformaodoarrayparaafolha2,namesmalocalizao; 5 IJ 6 KL 5Seleccionarafolha; 13/11/06 FunesdeTexto
LCase a=Len(VBA) UCase Left AfunoLeftirdevolverosxprimeiroscaracteresdeumaStringacomeardaesquerdaparaadireita.

21

Esquerda=Left(OlMundo,5) NestecasoirdevolveraparteOlM,poisirdevolveros5primeiroscaracteres. Right AfunoRightirdevolverosxprimeiroscaracteresdeumaStringacomeardadireitaparaaesquerda. Direita=Right(OlMundo,5) NestecasoirdevolveraparteMundo,poisirdevolveros5primeiroscaracteres. Mid A funo Mid identica s duas anterior mas como segundo argumento leva o nmero no qual ir comear a contaroscaracteresqueirdevolver. Meio=Mid(OlMundo,3,3) AssimirdevolverM. Assim,Meio=Mid(OlMundo,2,8),ircomearacontarapartirdo2caractereirdevolveros8seguintes, mascomosuperioraonmerodecaracteresdastringnoirdevolvernada. Sequiseroltimo,procurooltimoespaoecontocomocomprimento(lenght). Space Devolve uma determinada string com trs espao em branco. Space(x), em que o x o nmero de espaos deixadosembranco. Porexemplo: Espao=Space(3) MsgBoxBom&Espao&Dia Resultandoassimnamensagem:Bom___Dia. LTRIM AfunoLTRIMretiraosespaosembrancodoladoesquerdodastring. Porexemplo: a=LTRIM(_Ol_) Ol_ RTIM Retiraosespaoembrancodireitadastring. Porexemplo: b=RTRIM(_Ol_) _Ol TRIM Retiratodososespaosembranconumastring. Porexemplo: c=TRIM(_Ol_) Ol ASC AfunoASCdevolveocdigoASCIIdeumadeterminadatecla,daprimeiraletradeumastring.

22

Porexemplo: Cod=ASC(A)=65 Cod=ASC(a)=97 Cod=ASC(Antnio)=65 ComoalgumasfunessoKeySensitive,paranocorreroriscodecometerumerrobsico,sequisersobverter essasituao,transformotudoparamaiscula. UCase(a)=Ucase(A),ousejaA=A. Porexemplo: Var=TextBox1.Text Var=UCase(TextBox1.text)Assimtudooqueousercolocarnacaixadetexto,passaaserletramaiscula Char SetiverocdigoASCIIafunodevolverorespectivocaracter Car=Char(65)=A InStr Esta funo compara sedentro de umastringexiste outra string. Devolveum (1)se existir outrastring,devolve zero(0)senoexistiroutrastring. Pos=InStr(Start,String1,String2) Pos=InStr(local_onde_inicia_a_procura,expresso_a_pesquisar,o_que_pesquisar) Porexemplo: Pos=InStr(1,VBA,v),ouseja,comeanoprimeirocaracter(1),ondeirpesquisar,isto,aminhaprimeira string(VBA),vaiverificarseexisteocaracterv. Esteexemploirretornarumerro,devidoString2serminsculaeaString1(ondeefectuaapesquisa),sertoda emmaiscula. ParaalmdoStart,daString1edaString2,apresentaaindaomtodoCompare,sendoesteCaseSensitive. OCompareapresentadoismtodos: 1. VBBinaryCompareomtododecomparaopordefeitoeCaseSensitive.Quandonosediznada, estequeutilizado; 2. VBTestCompareseadicionarumquartoelemento,eleutilizaestemtododecomparao,assim,jno ligasemaisculasouminsculas; Pos2=Pos=InStr(1,VBA,v,VBTestCompare),sendooresultadoum,ouseja,encontrouaString2naString1, istoporque,jnodistinguemaisculasdeminsculas.

23

FunesDataeHora
a=Datedevolveadataactualdosistema; b=Timedevolveahoraactualdosistema; c=Nowdevolveadataeahoraactualdosistema; Porexemplo: agora=Now dia=Day(agora) mes=Month(agora) ano=Year(agora) hora=Hour(agora) minuto=Minute(agora) segundo=Second(agora) dia_de_semana=Weekday(agora)devolveumfalorinteiro(1paraDomingo,2paraSegunda,..,7paraSbado); dia_de_semana_nome=Weekday(dia_de_semana)devolvenavarivelonomedodiadasemana,mostrandona lnguaemqueosistemaestdefinido; DateDiff Dadiferenaentreduasdatas.Apresentaosmtodos: Internaloqueestouapesquisar(serpordia,msouano); Date1; Date2; FirtsDayOfWeeksegundafeirapordefeito; FirstWeekOfJanuary; VBFirstJan1semanaemqueocorreoumdeJaneiro; VBFirstFourDayssemanaquetemquatrodiasdonossoano; VBFirstFullWeeksetediascompletosnumano; Data1=#05/08/2006# Data2=#05/27/2001# Dif_Dias=DateDiff(d,Data1,Data2)Quantosdiasentreasduasdatas; Dif_Dias=DateDiff(M,Data1,Data2)Mesesdediferenaentreasduasdatas;

24

Funes
Teste=IsNumeric(12)devolveTrueorFalse,everificasenumrico; QuandoqueaminhavarivelMyCheckvaiserTrue,ouseja,MyVarNull? Teste=IsNumeric(12A) DimMyVar,MyCheck MyCheck=IsNull(MyVar)IsNullverificasedeterminadaexpressonula(TrueorFalse); MyVar=umastringvazia,oquediferentedeumastringnula; MyCheck=IsNull(MyVar) MyVar=Null MyCheck=IsNull(MyVar)snestequedevolveTrue,poisantesdeMyVar=NulldissequeMyVarnula,assim depoisoMyCheckdevolveTrue.Asvariveissoinicializadas,soemvazioenoemNull.

Exerccio1
O programa deve, recorrendo funo InputBox, ler do teclado dois valores inteiros separados por vrgulas, correspondentes ao dividendo e divisor de uma diviso. O resultado da diviso deve ser arredondado para o inteiromaisprximoedevlovidonumaMessageBox. 1Tereiquetestarseexiteavrgula; 2Seestodoisnmeros; 3Spodeterumavrgula(lercaracteracaractercomumcicloFor); SubGeral() DimQuocienteAslong DimExp,Dividendo,DivisorAsLong Dimnum_v,Pos_v,CompAsInteger Exp=InputBox(IndiqueoDivisoreoDividendo) Comp=Len(Exp) Num_v=0 CicloForparapercorreraStringparaverquantasvrgulastem; ForCara=1ToComp IfMid(Exp,Cara(apenasvariaondeinicia),1(tamanhodasubstring))=,Then Num_v(verqtsvirgulas)=Num_v+1(incrementaavarcontadoriniciadaa0 EndIf NextCara IfNum_v>1Then(setivermaisqueumavrgula) GotoErro2 EndIf IfNum_v<1Then(sentivernenhuma) GotoErro1

25

EndIf (setiverumavrgulapassaparaaqui) Pos_v=Instr(1,Exp,,) Dividendo(parteesqdavrgula)=Left(Exp,Pos_v1) Divisor(partedireitadavrgula)=Right(Exp,Comppos_v) (Testarsenonumrico) IfNotIsNumeric(Dividendo)OrIsNumeric(Divisor)Then GotoErro2 EndIf (Seforemnumricospassaparaaqui) Quociente=CLng(Dividendo)/CLng(Divisor) MsgBoxOresultado:&Quociente ExitSub(antesdasrotinasdetratamentodeerroporquesenocontinua) Erro1: Resposta=Msgbox(Indiqueavrgula!Repetir?,vbyesno) IfResposta=vbysThen Geral Else ExitSub EndIf Erro2: Resposta=MsgBox(ValoresInvlidos.Repetir?,vbyesno) IfResposta=vbyesThen Geral Else ExitSub EndIf

27/11/06
Crieumprogramaquefaaoseguinte: Gerarumachavedetotolotocompleta(6+osuplementar); ApresenteoresultadonumaMsgBox; UtilizeafunoRnd; Osnmerosnopodemserrepetidos; Achavedeveserordenada;

26

Aseparaodosnmerosdeveserfeitacomumespaoembrancoeodosuplementarcomum+;

ObjectBrowser
OVisualBasicforApplicationassociadoaoExcelapresentaoObject Browser. Paraacederaeste,nomododeediodecdigo,escolhonomenu ViewaopoObjectBrowserouF2. OObjectBrowserumaferramentaquelistatodasaspropriedades emtodosparatodososobjectosdisponveis. O Object Browser apresenta uma Drop Down List com cinco biblitecas, isto , onde so guardadas as referncias para os objectosexistentesparacadabiblioteca. Ascincobibliotecas(libraries)soasseguintes: BibliotecaExcelapresentatodososobjectosreferentesaplicaoExcel; BibliotecaOffice,todososobjectosdosprogramasquefazempartedoMicrosoft Office,comautilidadedepoderinteragircomoutrosprogramas; Biblioteca Stdole, contm os objectos que permite interagir com outros programas; BibliotecaVBAtemosobjectosdoVisualBasic; BibliotecaVBAProject,osobjectosdoprojectoemqueseestatrabalhar; ObjectApplication OObjectApplicationrepresentaaprpriaaplicaoExcel,oobjectome,etemumconjuntodepropriedades. Essaspropriedadesso: ActivateCell:referenteaumaclulaqueestactiva; ActivateSheet:refereseaumafolhaqueseencontraactiva; ActivateWorkBook:devolveumficheirodeExcel;

Porsuavez,oApplicationObject(queoExcel),contmoutrosobjectosquerespeitamumahierarquia,ento,os outrosobjectos,donvelhierarquicosuperiorparaoinferior,sooWorkBook,WorkSheet,Cell. Cell Estapropriedadepermitemeseleccionarumadeterminadaclula. Assim,paraseleccionaraclulafaoCells(Linha,Coluna). Porexemplo: Cells(1,5).SelectRetornaaclulaE1; Cells(1,A).SelectRetornaaclulaA1;

27

Cells(0,5).SelectDerro,poisnoexistelinhadendicezero; Cells(4,A).SelectDerro,poisnacolunafaltamasaspas; Cells(A,1).SelectDerro,poisaslinhasnotmletras; Range Tal como o Cell, esta propriedade do Application Object permite seleccionar clulas, mas tambm blocos de clulas,retornandoumobjectodotipoRange. Porexemplo: Range(A1:A5).SelectSeleccionaasclulasda15,dacolunaA; Range(A1,A5).SelectApenasseleccionaasclulasA1eA5; Range(A1;A5,A8).SelectSeleccionaasclulasda15,dacolunaAeaclulaA8damesmacoluna; Rows/Columns Atravsdestasduaspropriedadesacedoalinhaseacolunas. Porexemplo: Rows(4).SelectSeleccionatodaalinha4; Rows.SelectSeleccionatodaalinha; Columns(1)Seleccionatodaacoluna1; AtravsdaspropriedadesCell,Range,RowseColumns,consigoacedereseleccionarvaloresdeumaclula,deum blocodeclulas,deuma(s)linha(s)edeuma(s)coluna(s).

PropriedadesAssociadasaoObjectoApplication
O objecto Application apresenta o objecto WorkSheet e o objecto Sheet. O objecto WorkSheet apenas pode referenciar folhas de clculo, o objecto Sheet tem duas propriedades associadas, o Sheet e o Graph. Se quiser referenciarfolhasdeclculoquecontenhamgrficostenhoqueutilizarapropriedadeSheet,masparafolhasde clculo queapenastenhamnmeros,utilizooWorkSheet(quedevolveum objectodotipoWorkSheet,que por suaveztempropriedadesemtodos). Porexemplo: Application.WorkBooks(Book1).Close fecha a folha de clculo Book1, mantendo a aplicao aberta e as restantesfolhasdeclculo;

OutrasPropriedades
WindowState,estapropriedadereferenteaoaspectodajanelaeapresentatrsestados: 1. xlNormal;

28

OestadoxlNormalreferenteaotamanhoquedefinipreviamente. 2. xlMaximized; Esteestadoquandoajanelaseapresentamaximizada,ocupandoassimtodooecran. xlMinimized;

3. QuandoestamesmajanelaseencontraminimizadanabarradetarefasdoWindows. QuandotenhooWindowStatecomoestadoxlNormal,possomudarasuaposioeassuasdimenses,epara issoutilizooTop(distnciaaotopo),oLeft(distnciaesquerda),oHeight(alturadajanela)eoWidth(largurada janela). Com a propriedade (associada ao objecto Application) WorkSheetFunction, posso aceder a toas as funes do Exceleparaisso bastacolocarantesdonomedafuno doExcelApplication.WorkSheetFunction.Porexemplo, usando a funo soma (sum) do Excel para somar um conjunto de valores, Application.WorkSheetFunction.Sum(12,34,20). DependendodotipodefunodoExcelescolhida,osparmetrosvosealterando.

ObjectoWorkBook
Este objecto referente aos livros de clculo existentes. Para adicionar um novo WorkBook vazio atravs do mtodoAdd.WorkBook.Add. OmtodoOpentambmassociadoaoWorkBook,permiteabrir(inportar)umdeterminadoficheiroparaoExcel. Estemtodoapresentavriosargumentos: a) FileName o nico argumento obrigatrio, e referente ao ficheiro ao nome do ficheiro que quero abrir; b) Update Links tem como funo permitir a actualizao das ligaes. Para escolher utilizase uma numerao de 0 a 3, em que o 0 no faz nenhuma actualizao, o 1 do WorkBook actual, o 2 de WorkBooksexternoseo3deWorkBooksinternoseexternos; c) ReadOnlyabrirumficheiroapenasnomododeleitura; d) Formatreferenteaomododecomoestoseparadasascolunas,decomoimportootexto.tambm atravsdenumeraoqueescolhootipodeseparaoeestavaide1a6.O1quandoaseparaodas colunasfeitacomTabelao(Tab),o2quandoporvrgulas,3porespaos,o4porpontosevrgulas,o 5pornenhumaseparaoeo6poroutrotipo(feitaaidentificaonoargumentoDelimiter). Porexemplo,sedeumficheirovierosdados12,14,16comFormat:=1,elecolocariatodosestesnmeros numasclulatalcomosomostrados.MascasooFormatfosseFormat:=2,jcolocariaumvalorem cadaclula,poisreconheceasvrgulaseseparacadavalorparacadacoluna. e) Passwordpasswordparaabriroficheiro; f) WriteResPasswordparaocasodequererescrevernoficheiro; g) IgnoreReadOnlyparaignoraroavisodequeapenasdeleitura;

29

h) Originosistemaoperativoondefoicriadooficheiro.EstepodeserxlMacintosh,xlWindowsexlMSDOS; i) Delimiter; Porexemplo,WorkBook.Openfilenamec:\teste.txt,format:=1 Assim,vouimportaroficheirotestecomaextensotxt,fazendoaseparaodascolunasporTabs. WorkBook(Book2.xls).ActiveSheet.Range(A1).Value = Teste vai colocar na folha de clculo activa do WorkBook,Book2,naclulaA1ovalordeTeste. Num_g=WorkBook(Despesas.xls).Charts.CountavarivelNum_gvaiguardarquantosgrficosexistemnolivro Despesas.xls.

Eventos
Posso criar eventos. Quando crio algo, por exemplo, um boto, por defeito j tem um conjunto de eventos. ExistemeventosparaosWorkBookeparaosWorkSheet,masnoestopreviamentecriados. Sequiserfazerumevento,escrevonajaneladecdigo: PrivateSubWorkBook_NomeDoEvento() EndSub Porexemplo,comooeventoOpennoexistecriadoparaoWorkBook,paracriaresteeventofao: PrivateWorkBook_Open() MsgBosOl EndSub Oquefazcomque,quandooWorkBooksejaaberto,apareaumacaixadetextocomamensagemOl. Existemvrioseventos,talcomooOpen,masparaosquaistemosquecriarcdigo.Outroseventosparaosquais temosquecriarocdigoso: BeforeSafe:esteeventocorreantesdeefectuarumSavenodiscodeumdeterminadoficheiro.Apresentavrios parmetros; Activate:Correquandoolivroestactivo; Deactivate:Correantesdeestaractivo; NewSheet: Acontece antes de criar uma nova folha para o WorkBook. Posso colocar cdigo dentro do evento paraocontrolar.

Exerccio1
Imaginequetemdoislivros:

30

Principal.xls, que contem duas Sheets, uma compras e uma vendas. Cada uma apresenta as seguintes colunas Produto,Fornecedor,Quantidade,Custo.NolivroAuxiliar.xls,tenhoapenasumaSheet,aDespesascomacoluna Custo. Sempre que alterar um valor da coluna custo da folha Compra, este dever ser copiado para a coluna Custo da folhaDespesas. OlivroAuxiliar.xlsdevesercarregadoquandoforcarregadoolivroPrincipal.xls. QuandofecharoPrincipal.xls,devefecharoAuxiliar.xls.

30/11/06
OobjectoWorkSheetficaporbaixodoobjectoWorkBook.UmWorkBookpodeterumconjuntodeWorkBook. AWorkSheettemdoistiposdeobjectos: 1. WorkSheets; Estasapenasfuncionamemfolhasdeclculo. 2. Sheets; Estesfuncionamemfolhasdeclculoeemgrficos.

Mtodos
Add OmtodoAddadicionaumafolhadeclculovazia. Before/After Seanovafolhadeclculocolocadaantes(Before)oudepois(After)daactual. Count Quantasfolhasdeclculoqueroadicionar. Type SedotipogrficooudotipoWorkSheet. Delete WokSheets(Sheet1).Rows(2).DeleteIreliminaralinhadoisdafolha1; WokSheets(Sheet2).Columns(2).DeleteIreliminaracolunadoisdafolha1; Range ParaalmdoRange,possousaraindaoRow,ColumneCellparareferenciarvaloresoublocosdevaloresquese encontremnumaSheetounumaWorkSheet.

ORangeparaalmdepermitiraselecodeumaclulaoudeblocosdeclulas,permiteaindaintervalosmulti dimensionais,ouseja,seleccionarclulascomdiferentesorigensecomdiferentesparmetros. IntervalosMultiDimensionais:

31

IntervaloBidimensional Range(A1;Clientes!A2) Estetipodeintervalo,funcionadentrodo mesmoWorkBook.Nestecaso,vaibuscara clulaA1 da folha emque o cdigo est a correrevai bucar a clulaA2 WorkSheet ClientesquefazpartedomesmoWorkBook; IntervalosTridimensional Range(A1;Aulas6!Vendas!A5:C5) Estedeintervalo,funcionadentrodomesmoWorkBookeemoutrosWorkBooks(mas quetemqueseencontrarcarregadosemmemria).Nestecaso,vaibuscaraclulaA1 da folha em que o cdigo est a correr e vai bucar o bloco de clulas A5:C5 da WorkSheetVendas,queseencontranoWorkBookAulas6;

SubTeste() WidthWorhSheets(Sheet2) .Previous.Range(A1).Value=Teste .Next.Range(A1).Value=Valor EndWith EndSub OWidthoinciodeumblocodecdigoeofimdessemesmoblocodecdigoencontraseemEndWidth. QuandodigoWidth,atravsdeumponto(.),estouareferenciarmtodosoupropriedadesdoqueseencontra frentedoWidth. NestecasoestouareferirmefolhaSheet2,edigoqueafolhaanterioraesta(.Previous),naclulaA1vaificar comovalorTeste,equeafolhaaseguirfolhaSheet2,naclulaA1vaiapresentarovalorValor. Previous/Next Assim,asWorkSheetsapresentamduaspropriedades,aPreviouseaNext,quereferemsefolhaanteriorsobrea qualestouatrabalharefolhaseguintesobreaqualestouatrabalhar. Font Paraalmdeindicarasfolhas,possvelatravsdapropriedadeFontqueapresenta umconjunto deatributos quemepermitemmodificaraformataodotextoquelseencontra.Porexemplo: Range(A1:C5).Font.Bold=True Nestecaso,tudooqueseencontranoblocodeclulasA1:C5irficaraBold;possoaindaalterarcores,tamanhos, formatos,etc. Frmulas possvelrealizaroperaesmatemticasentreclulas,atravsdeexpressesescritaspormimouutilizandopara issoasfrmulasqueoprprioExcelapresenta. Range(A3).Formula==A1+A2

32

IrrealizarasomaentreosvaloresqueseencontranaclulaA1enaclulaA2eapresentaroresultadonaclula A3. Range(A5).Formula==SIN(0.7) VaicalcularoSinde0,7ecolocarovalornaclulaA5. Find DentrodeumRange,possoquererencontrardeterminadainformao,eparaissotenhoquerecorreraomtodo Find. Estemtodotemcomoargumentos: What:onicoargumentoobrigatrio,ereferenteaoqueeuqueropesquisar; After:Indicoaclulanaqualqueroefectuarapesquisa,masaclulaqueindiconocontaparaapesquisa; LookAt:Refereseaomodocomofaoapesquisa,ouseja,sequeroprocurarumaStringcompleta(J<>Joo)ou apenasumapartedaString(XLPartJ=Joo); SearchOrder:Aordempelaqualqueropesquisar,isto,secomeoapesquisapelaslinhasousepelascolunas; Search Direction: Se vai efectuar a pesquisa para a frente (SearchDirection = 1) da clula que indicamos no argumentoAfterouseparatrs(SearchDirection=2)destadandonestecasoavoltatoda.Quandonosecoloca esteargumento,pordefeitoapesquisafeitaparaafrentedaclulaqueindicamosnoAfter; MatchCase:SeapesquisaserounoCaseSensitive; AoefectuarumapesquisaatravsdoFindeleapenasirdevolveraquelquerespeiteascondiesimpostaseno todososqueassatisfaam,ouseja,apenasdevolveoprimeiroqueencontrar. PorExemplo: Tendoatabela,digaoquedevolvidopeloFindnasdiferentessituaes.

A1 Nome A2 Ana A3 Rita A4 Joo A5 Lusa A6 Jos A7 Joo

Range(A1:A7).Find(Joo) IrdevolveraclulaA4; Range(A1:A7).Find(Joo,Range(A4)) IrdevolveraclulaA7;

33

Range(A1:A7).Find(j,Range(A4),LookAt=XLPart) IrdevolveraclulaA6: Range(A1:A7).Find(j,Range(A4),LookAt=XLPart,SearchDirection=2) IrdevolveraclulaA7; Range(A1:A7).Find(j,Range(A4),LookAt=XLPart,SearchDirection=2,MatchCase:=True) Noirdevolvernada; DimResultadoasRange SetResultado=Range(A1:A7).Find(Joo) SetResultado=Range(A1:A7).FindNext(Resultado) DepoisentraemcicloecomoFindNextvouprocurarosseguintesemfunodosanteriores.

4/12/06 Forms
ParapoderinserirumForm,entronomododecdigoefaoInsert,UserForm.

NaToolBoxaparecemtodososcontrolosquepossotrabalhar. mesemprepossveldefiniraspropriedadesdasForms: Caption PermitedefinirottulodoForminserido. BackColor Defineacordefundo.Porexemplo,FormISTEC.BackColor=RGB(20,30,40). Posicionamento Left:Distnciaesquerda; Top:Distnciaemrelaoaotopo;

34

Altura:DefineaalturadaForm; Largura:DefinealarguradaForm; StartUpPosition Apresentaquatrovaloresposveis: 0Vaiusarapropriedadepordefeitoevaiterematenooquedefininoposicionamentoinicial; 1VaiserapresentadacentradaemfunodaposiodoExcel; 2Emfunodoecran; 3OFormficaencostadoaocantosuperioresquerdo; Enabled IndicaqueoForm(objecto)estvisvelmasnolhepossointeragir,ouseja,alterarvalores.Hosobjectosdotipo Containers (podem conter outros objectos). Se a propriedade deste se encontrar disabled, todos os objectos contidosneleficamtambmdisabled. Visible Indiqueseumdeterminadoobjectoestounovisvel. Show FazaparecerumdeterminadoForm(quandosetemmaisqueum).Estepodeserfeitodedoismodos: Modal: Se tiver um Form aberto no me permitido mexer em outras, enquanto no fechar a que se apresentasobreposta; NonModal:onormal,epermitidonavegarentreForms; QuatroEventosAssociadosaosFoms: Initialize:Secarregadoounoemmemria; Activate/Desactivate:SeumFormseencontraactivooudesactivo; Terminate:descarregadodamemria(quandofecha); Resize:AlterarotamanhodoForm;

Label
Caption EventClick TextAlign Estarelacionadocomaposibilidadedeautomaticamentealinharotexto: 1Esquerda; 2AoCentro; 3Direita;

35

AutoSize AlabelvaidiminuindoouaumentandoemfunodoqueescrevemosnoCaption. ControlTipText Quandopassooratosobreumdeterminadocomando,elemostrauminformaosobreessecontrol. Default QuandoprecionooEnter,obotoreconheceateclaeefectuacomosefosseumclick. Cancel QuandocarregoemESCassociaaobotocancel.

TextBox
Recolheinformaovindadoutilizador. Apresentaduaspropriedades: MaxLength Tamanhomximodacaixadetexto. TextLength SelStart Seleccionaotextoinseridonacaixadetexto. SelLength Atondequeroseleccionarotexto. Locked QuandoumobjectoestLockednopodeseralteradapormimnaForm,maspossoalterarovalorindirectamente nocdigo. TabIndex Aordemdotab,ouseja,asuaposionateclatab. TagStop Quandoumobjectonoestsujeitoatab. ControlSource AssociaumadeterminadacaixadetextoaumacluladoExcel. Text1.ControlSource=A1 Change EfeitopordefeitodeumaTextBox.

ListBoxeComboBox
Permitelistarumconjuntodevaloresdeumobjecto.

36

ColumnCount ReferenteaonmerodecolunasqueaListBoxouaComboBoxvaiapresentar.Pordefeitostemumacoluna. List Permiteacederaumitemeparaissotenhoquepassarondicedeumitem.Comeaem0evaiataonmerode elementos1. AddItem Vaiadicionaritemsslistas.Temdoisparmetros,umobrigatrio,oitem,eumopcionalondice. Combo1.AddItenAna,0 Onicoproblema,quandodigoqueoColumnCounttemmaisdoqueumacoluna,aodizerquetemduas. Combo1.ColumnCount=2 Tenhoassimquedizer,qualalinhaecoluna,tenhoquedefinirprimeiroumarray: DimAr(2,2)AsString Ar(0,0)=Ana Ar(0,1)=Malhoa Ar(1,0)=Ana Ar(1,1)=Isabel Ar(2,0)=Rute Ar(2,1)=Marlene Combo1.List=Ar() Para saber o contedo de um item da lista, tenho que passar o ndice. A propriedade que tem o ndice o ListIndex.Aoseleccionarumitemelepreencheautomaticamenteondice. List(ListIndex) Docontedodoitemseleccionado. MatchEntry quandoestounumalistagrande,epesquisovalores. 0Apenasusoumcarcterparaefectuarapesquisa.Porexemplo,setiveraspalavrasLISBOA,LOURESe IDANHAANOVA, ao pesquisar com a letra L, devolve Lisboa e Loures, ao pesquisar com a letra LI, j devolveIdanhaaNova; 1Fazapesquisacomvrioscarcteres; 2Noefectuaqualquertipodepesquisa; MultiSelect Permitefazeraselecoentreoselementosdalista. 0Seleccionaapenasumelementodalista; 1Seleccionavrioselementosdalista,desdequeestessejamcontguos; 2Permiteumselecolivrenalista;

37

Style ApenasaplicaseComboBox. 0PermitequeapessoadigiteinformaonaComboBox.Acaixaencontraseactiva; 1TransformaseapenasnumDropDownList; Text AXN=Combo1.Text GuardaovalorqueescrevonaComboBoxnumavarivel. RemoveItem Eliminaumitemdalistaatravsdoparmetrondice. Clear Limpaalista.

CheckBoxeOptionButton
NaCheckBoxpossomarcarvriasopes,enquantoquenoOptionButton,apenaspossoseleccionarum(dentro domesmogrupo). Tenho que ter em ateno que os grupos so criados dentro de objectos containers, por noma, num objecto frame. ApropriedadeValuecontrolaaCheckBoxeoOptionButton,sendoTrueorFalse. OobjectoframeocontainerenormalmenteusaseapropriedadeCaptionqueindicaqualogrupo. AocontrriodoVB.NET,oVBAnopermitedefinirarraysdeobjectos.

11/12/06 ADO
Aprimeiracoisaquetenhoquefazer,referenciaroADO,eparaissovouaoVisualStudioEditor(Alt+F11),Tools, Referenceeescolhoaverso2.5.

OstrsobjectosdoADO,so: 1Connection;

38

PermitemedefinirosparmetrosdeligaoBasedeDados. Exemplo1ConnectioncomautentificaodoWindows DimCnStateAsConnection SetCnState=NewConnection .Provider=sqloledb .ConnectionString=Server=Server11;TrusterConnection=Yes;DataBase=Elearning .Open EndWith Esta Connection apresenta a autentificao do Windows TrusterConnection = Yes. Caso colocase nome de utilizadorepasswordjseriaaautentificaodoprprioservidordoSQL. Setudocorrerbem,abrealigao,casocontrriodumerrodoconjuntodoserros. Exemplo2ConnectioncomautentificaopornomedeutilizadorepassworddoSQLServer DimCnStateAsConnection SetCnState=NewConnection .ConnectionString=UserId=user;Pwd=password;InitialCatalogue=Elearning;DataSource= Server11 .Open EndWith Quandojnonecessitodaligao,devofecharaligao,eparatal: CnState.Close SetCnState=Nothing Eassim,libertotodososrecursosqueutilizeidesdequeefectueialigaoBasedeDados. EventosdaConnection: AbortTransactionOcorrequandoinvocoomtodoRollback; BeginTransactionQuandoinvocoomtodoBeginTransaction; CommitTransactionquandoumaligaotemsucesso,falhououquandoocorreoTimeOut; ConnectCompletePodeocorrerquandoseverificaumadetrscoisas,aligaoocorreucomsucesso; aligaofalhou;atingiuoTimeOut; DisconnectQuandofechoaligaoBasedeDados; ExecuteCompleteQuandoainvocaodomtodoExecutefoiconcluda; 2Command; DimCursoUpdateAsCommand SetCursoUpdate=NewCommand WithCursoUpdate

39

.ActiveConnection= .CommandText=UpdateCursosSetCusto=Custo*1.1 .Execute EndWith O ActiveConnection abre e cria a Connection apenas com a ConnectionString (parmetros para a ligao). O CommandTextainstruoSQLquevaiserexecutada,oExecute,fazcomqueainstruodoCommandTextseja executadanaBasedeDados. OCommandpermiteexecutarcomandosdirectamentenumaBasedeDados. 3RecordSet; Permitenavegar,aceder,alterareeditar(efectuaroperaes),directamenteaosregistosdaminhaBasedeDados. PropriedadesdoRecordSet: ActiveConnectionTemamesmafunoque noCommand,ouseja,abreecriaaConnectionapenas comaConnectionString(parmetrosparaaligao); CursorType Define apontadores para a informao (por defeito dbOpenFoward), tendo que ter a certeza do que quero fazer, se andar para a frente, para trs ou para ambos os lados, devido aos requisitosquesonecessrios; LockTypeTipodelockquetenhosobreosdados.Possodeixaralgumacutalizeouquenoactualize osdados,quandoestouanavegar; MaxRecordsNmeromximoderegistosqueoRecordSetapresenta; RecordCountDevolveonmeroderegistosqueoRecordSettem; Exemplo1AbrirumRecordSet DimCnStateAsConnection DimRsStudentsAsRecordSet DimCommandSelectasCommand SetCommandSelect=NewCommand WidthCommandSelect .ActiveConnection=CnState .CommandText=Select*FromAlunos EndWith SetRsStudents=CommandSelect.Execute Tenho dois objectos, um do tipo RecordSet (RsStudent) e um do tipo Command (CommandSelect). O ActiveConnection = CnState tem os parmetros da ligaoanteriormente aberta, o CommandTextir efectuar a selecodetodososcamposdatabelaAlunos.ORsStudente=CommandSelect.Execute,farcomqueoresultado sejaigualaoqueoExecutedecolvereserguardadonoCommandSelect. Exemplo2OutromododeabrirumRecordSet

40

DimRsStudentsAsRecordSet SetRsStudents=NewRecordSet RsStudents.Open = Select * From Alunos, Provider = sqloledb; UserId = SA; DataSource = XPTO; InitialCatalog=Elearning

NestecasonoutilizenenhumaConnectionnemnenhumCommand,faotudonoRecordSetdemododirecto. Os parmetros de ligao Base de Dados pode ser estes, como tambm podem ser os da ligao TrustedConnection=Yes. ParanavegardentrodeumRecordSet,temosoMove,queapresentavriosmtodos(variantes): MoveFirstColocasenoprimeiroregisto; MoveNextMoveseparaoregistoseguinte; MovePreviousMoveseparaoregistoanterior; MoveLastColocasenoltimoregisto; Para ter a certeza que a propriedade RecordCount do RecordSet est correcta, colocome no ltimo registo (MoveLast)ecolocomedeseguidonoprimeiroregisto(MoveFirst). SemprequeapagoumelementodeumRecordSet,eoapontadorcontinuaaapontaralgoquejnoexiste,vai darerroaotentaracederaoRecordSet,portanto,tenhoquemoverparatrs(MovePrevious)poissejestiverno primeiro(testarBOF(BeginOfFile),ecasojestejanoprincipiotenhoqueandarparaafrente. Exemplo3ActualizarinformaonaBasedeDados DimRsStudentsAsRecordSet SetRsStudents=NewRecordSet RsStudents.CursorType=AdOpenKeySet RsStudents.LockType=AdLockOptimistic RsStudents.Open=Select*FromAlunos,CnState RsStudents.AddNew RsStudents.First_Name=Joaquim RsStudents.Last_Name=ALeixo RsStudents.Update ComAdOpenKeySet,apenastragoaschavesprimriasdoregistoe,medidaquememovonosregistos,vaicom basenaschavesprimriasdoRecordSetvaibuscaroregistocompleto.OAdLockOptimistic,vaopartilharareserve dosdadoscomoutrosutilizadores.Nesteexemplo,estautilizaraligaoCnStatejexistente(RsStudents.Open= Select*FromAlunos,CnState).RsStudents.AddNewqueaoadicionarumnovoregistopartodoprincipioque apenasoscamposFirst_NameeLast_Namesoobrigatrios.EcomRsStudents.Updatevoutentarcriarumnovo registonaBasedeDados. Ordenar/FiltrarumRecordSet RsStudents.Sort=Last_NameAsc RsStudents.Filter=First_NameLikeA% Assim,apstercriadooRecordSet,estouaordenloeafiltraroregistos.

41

possvel trabalhar com qualquer um dos trs objectos de um modo isolado, isto , posso usar o objecto Command e o objecto Record Set para efectuar a ligao em vez de usar o objecto Connection. Posso ainda trabalharapenascomoobjectoRecordSet. OADOapresentatrstiposdeconjuntos: 1. Erros:Conjuntoquecontmoserros; 2. Parameters:QuandousoeinvocoumaStoredProceduresefunesquecontmparmtros; 3. Fields:Refereseaoscamposoutabelasdasqueries;

14/12/06 ROI(ReturnOnInvestment)
OROImostraorcionoretornodeuminvestimento. OExcelapresentaaferramentaGoalSeekdeROI,aqualapresentaumaclulaeoobjectivo.OGoalSeekalterao valor da clula para que seja possvel atinguir um determinado objectivo. Apeas podemos alterar os valores de umaclulaquenotenhaumafrmula. ParachegarpercentagemdoROI,tenhoquecalcularpCustoTotal,quecustadevalorespercentuais. OGoalSeekalteraosvaloresqueseencontranacolunaF(tendoporbaseoexerccoqueoProfessordeunaaula). UtilizooOffsetquandoqueroafectarumaclulaemfunodaanterior. Offset (0 ,1) o zero indica a linha, como zero a mesma em que me encontro; o um a coluna direita,sefosse1seriaacolunaesquerda,sefossezeroseriaaprpriacoluna;

42