230 likes | 411 Views
Programiranje kroz aplikacije. Rad sa pasusima i tabelama u Word-u Word i Excel kroz primere. Objekt Paragraph. Objekt Paragraph je član kolekcije Paragraphs koja predstavlja sve pasuse specificiranog objekta tipa Document , Range ili Selection .
E N D
Programiranje kroz aplikacije Rad sa pasusima i tabelama u Word-u Word i Excel kroz primere
Objekt Paragraph • Objekt Paragraph je član kolekcije Paragraphs koja predstavlja sve pasuse specificiranog objekta tipa Document, Range ili Selection. • Pojedini članovi kolekcije Paragraphs se navode pomoću njihovog rednog broja, npr. ActiveDocument.Paragraphs(3).
Objekt Paragraph - Metode • Iz tabele sa osobinama vidimo da se uvlačenja, proredi i razmaci definišu u tačkama (pt). • Za pretvaranje milimetara, centimetara i inči u tačke se koriste metode MillimetersToPoints, CentimetersToPoints i InchesToPoints. • U pitanju su metode objekta Application.
Objekt Paragraph - Primer Napisati proceduru koja sve pasuse sa više od 7 rečenica uvlači po 1cm sa obe strane, postavlja im obostrano poravnanje i dvostruki prored, razmiče ih 1.5cm od susednih pasusa i postavlja okvir koji se sastoji od jedne linije iznad i ispod pasusa. Linije okvira formatirati po želji. .Alignment = wdAlignParagraphJustify .LeftIndent = CentimetersToPoints(1) .RightIndent = CentimetersToPoints(1) .SpaceAfter = CentimetersToPoints(1.5) .SpaceBefore =CentimetersToPoints(1.5) .Space2 With .Borders(wdBorderTop) .LineStyle = wdLineStyleSingle .LineWidth = wdLineWidth600pt .Color = wdColorDarkRed End With With .Borders(wdBorderBottom) .LineStyle = wdLineStyleDashDot .LineWidth = wdLineWidth075pt .Color = wdColorAutomatic End With • Sub Pasusi() • Dim Pas As Paragraph • For Each Pas InThisDocument.Paragraphs • If Pas.Range.Sentences.Count > 7 Then • With Pas • End With • End If • Next • End Sub
Objekti Tables i Table • Tabele se predstavljaju pomoću objekta Table, odnosno pomoću kolekcije Tables koja predstavlja sve tabele specificirane selekcije, opsega ili čitavog dokumenta. • Osobina Tables objekta Document vraća kolekciju Tables. • Pojedinačne tabele se dobijaju navođenjem rednog broja tabele u kolekciji Tables. Na primer, Documents("VBA.doc").Tables(1) vraća prvu tabelu u dokumentu VBA.doc
Kolekcija Tables – Metoda Add • Metoda Add kolekcije Tables kreira novu tabelu. • Sintaksa (pojednostavljena) metode je: Add(Range, NumRows, NumColumns) gde su argumenti (svi su obavezni) • Range – opseg u dokumentu gde smeštamo tabelu; • NumRows – broj vrsta nove tabele; • NumColumns – broj kolona nove tabele. • Na primer, kreiranje prazne tabele 2×3 na početku prvog dokumenta se vrši sa: Documents(1).Tables.Add Documents(1).Range(0,0), 2, 3 • Kreiranje prazne tabele 2×3 na kraju prvog dokumenta se vrši sa: Set Selek = Documents(1).Content Selek.Collapse wdCollapseEnd Documents(1).Tables.Add Selek, 2, 3
Kolekcije Rows i Columns • Korisno je navesti i metodeAddi Deletekolekcija Rows i Columns. • Metoda Add u tabelu dodaje nove vrste i kolone. U oba slučaja, ova metoda ima jedan opcioni argument - redni broj vrste (kolone), ispred koje su ubacuje nova vrsta (kolona). Ukoliko se ovaj argument izostavi, dodavanje se vrši nakon poslednje vrste (kolone). • Na primer, ubacivanje nove vrste ispred pete vrste prve tabele aktivnog dokumenta bi išlo: Dim T As Table Set T = ActiveDocument.Tables(1) T.Rows.Add T.Rows(4) • Brisanje specificiranih vrsta i kolona se vrši metodom Delete. • Na primer, brisanje druge kolone prethodno definisane tabele T bi bilo: T.Columns(2).Delete
Rad sa tabelama – Primer 1 U folderu C:\Temp\VBA se nalazi određeni broj Word dokumenata. Napisati proceduru koja kopira sve tabele iz svih dokumenata u datom folderu u dokument gde se nalazi makro. Sub KopTab() Dim S As String, Fold As String, T1 As Table, TekDok As Document Fold = "C:\Temp\VBA\" S = Dir(Fold & "*.doc") Do While S <> "" Set TekDok = Documents.Open(FileName:=Fold & S, Visible:=False) For Each T1 In TekDok.Tables T1.Range.Copy ThisDocument.Activate Selection.Paste Selection.TypeParagraph Next TekDok.Close S = Dir Loop End Sub Smeštanje kopirane tabele u ThisDocument
Rad sa tabelama – Primer 2 Folder C:\Temp\VBA sadrži određeni broj Word dokumenata, pri čemu u svakom dokumentu prvi pasus sadrži ime i prezime studenta, drugi pasus sadrži jedinstveni kod studenta i treći pasus sadrži naslov diplomskog rada. Napisati proceduru koja ove podatke iz svih dokumenata i smešta ih u tabelu u dokumentu gde se nalazi makro. Tabela sadrži tri kolone - prva odgovara imenu i prezimenu studenta, druga jedinstvenom kodu i treća naslovu diplomskog rada. Tabela treba da se nađe na kraju dokumenta. Sub Diplomski() Dim Dok As Document, R As Range, Tab1 As Table Dim I As Integer, S As String, Tekst As String, Putanja As String Set R = ThisDocument.Content R.Collapse wdCollapseEnd Set Tab1 = ThisDocument.Tables.Add(R, 1, 3) With Tab1 .AutoFitBehavior wdAutoFitContent .Borders.InsideLineStyle = wdLineStyleSingle .Borders.OutsideLineStyle = wdLineStyleDouble End With
Rad sa tabelama – Primer 2 (nastavak) Tab1.Cell(1, 1).Range.Text = "Ime i prezime" Tab1.Cell(1, 2).Range.Text = "Jedinstveni kod" Tab1.Cell(1, 3).Range.Text = "Naslov diplomskog rada" Putanja = "C:\Temp\VBA" S = Dir(Putanja & "\*.doc") I = 1 Do While S <> "" Tab1.Rows.Add I = I + 1 Set Dok = Documents.Open(FileName:=Putanja & "\" & S, Visible:=False) Tekst = Dok.Paragraphs(1).Range.Text Tab1.Cell(I,1).Range.Text = Left(Tekst, Len(Tekst) - 2) Tekst = Dok.Paragraphs(2).Range.Text Tab1.Cell(I,2).Range.Text = Left(Tekst, Len(Tekst) - 2) Tekst = Dok.Paragraphs(3).Range.Text Tab1.Cell(I,3).Range.Text = Left(Tekst, Len(Tekst) - 2) Dok.Close S = Dir Loop End Sub Eliminisanje karaktera Chr(13) i Chr(7) sa kraja stringa koji predstavlja sadržaj ćelije Word tabele.
Simultani rad sa Word-om i Excel-om • Iz jednog Word dokumenta možemo kreirati, modifikovati, zatvoriti ili brisati Excel radne sveske i obrnuto. • Povezivanje ove dve aplikacije ćemo ilustrovati kroz četiri primera. • Da bi iz Word dokumenta mogli raditi sa Excel radnim sveskama, potrebno je u VBE podesiti referencu na objektnu biblioteku Excel-a. Ovo se radi pomoću opcije Tools/References, čijim se odabirom dobija dijalog boks sličan onom narednog slajda. Referenca se traži u polju Available References. • U slučaju Office-a 2003, referenca je Microsoft Excel 11.0 Object Library. U slučaju Office-a 2000 i 2007, verzije objektnih bibliotekasu 9.0 i 12.0, respektivno.
Referenca na objektnu biblioteku Excel-a Podešavanje reference na objektnu biblioteku Excel-a
Primer 1 Word dokument sadrži jednu tabelu. Napisati Word makro koji će kreirati novu Excel radnu svesku i u njen prvi radni list iskopirati tu tabelu. Radnu svesku snimiti pod imenom TabelaIzWorda.xls. Sub TabelaIzWorda() Dim RS As Excel.Workbook, Tabela As Table DimI As Integer, J As Integer, S As String Set RS = Excel.Workbooks.Add I = 1: J = 1 Set Tabela = ThisDocument.Tables(1) For I = 1 To Tabela.Rows.Count For J = 1 To Tabela.Columns.Count S = Tabela.Cell(I, J).Range.Text RS.Worksheets(1).Cells(I, J) = Left(S, Len(S) - 2) Next Next RS.SaveAs ThisDocument.Path & "\TabelaIzWorda" RS.Close Set RS = Nothing End Sub Eliminisanje karaktera Chr(13) i Chr(7) sa kraja stringa koji predstavlja sadržaj ćelije Word tabele.
Primer 2 U datom Word dokumentu kreirati proceduru koja ćeu istom folderu kreirati Excel svesku Sveska.xls i u njen prvi radni list iskopirati sve reči iz Word dokumenta sa više od 7 karaktera, ne računajući blanko na kraju riječi. Riječi kopirati u treću kolonu (ćelije C1, C2, C3).Ukoliko ne postoji nijedna takva riječ, u ćeliju A1 prvog radnog lista upisati „Ne postoje riječiduže od 7“. Procedura sa poziva klikom na dugme unutar dokumenta. Sub Preko7() Dim RS As Excel.Workbook Dim I As Integer, Rec As Range Set RS = Excel.Workbooks.Add I = 0 For Each Rec In ThisDocument.Words If Len(Trim(Rec.Text)) > 7 Then I = I + 1 RS.Worksheets(1).Cells(I, 3) = Trim(Rec.Text) End If Next If I = 0 Then RS.Worksheets(1).Cells(1, 3) ="Ne postoje riječi duže od 7" RS.SaveAs ThisDocument.Path & "\Sveska" RS.Close Set RS = Nothing End Sub
Primer 2 – Kontrole u dokumentu • Osim na korisničku formu, kontrolu možemo dodati i u sam dokument. • Dodavanje kontrole se vrši koristeći Control Toolbox-a, u tri jednostavna koraka: • Aktivirati Design Mode na Control Toolbox-u • Pozicionirati se u dokumentu • Kliknuti na željenu kontrolu. • Na programski kod kontrole se prebacujemo dvostrukim klikom na kontrolu u Design Mode-u. • Kodovi svih kontrola kreiranih na ovaj način se nalaze u okviru objekta ThisDocument. Nakon programiranja, potrebno je izaći iz Design Mode-a da bi testirali i koristili našu kontrolu. • U našem primeru, ubacujemo dugme i procedura izgleda: Private Sub CommandButton1_Click() Call Preko7 End Sub
Još malo o kontrolama u dokumentu • Pošto su kontrole deo samog dokumenta, najjednostavnije ih je referencirati preko objekta ThisDocument. • Recimo da smo dokumentu dodali klizač i pomoću njega želimo da menjamo veličinu fonta prvog pasusa dokumenta. Procedura koja bi vršila ovu funkciju bi bila: Private Sub ScrollBar1_Change() ThisDocument.Paragraphs(1).Range.Font.Size = _ Val(ThisDocument.ScrollBar1.Value) End Sub ili Private Sub ScrollBar1_Change() Me.Paragraphs(1).Range.Font.Size = Val(Me.ScrollBar1.Value) End Sub • Pored korisničkih formi, gde smo koristili ključnu reč Me, pomoću te reči sebe mogu referencirati i objekti kao što su dokumenti (Word) i radne sveske i listovi (Excel).
Primer 3 Napisati Excel makro koji će kreirati novi Word dokument sa jednom tabelom u koju će kopirati trenutnu selekciju ćelija. Dokument snimiti pod imenom TabelaIzExcela.doc. Sub TabelaIzExcela() Dim Dok As Document, BrV as Integer, BrK as Integer BrV = Selection.Rows.Count BrK = Selection.Columns.Count Set Dok = Word.Documents.Add Dok.Tables.Add Dok.Paragraphs(1).Range, BrV, BrK For I = 1 To BrV For J = 1 To BrK Dok.Tables(1).Cell(I, J).Range = Selection.Cells(I, J) Next Next Dok.SaveAs ThisWorkbook.Path & "\TabelaIzExcela.doc" Dok.Close Set Dok = Nothing End Sub Prvo podesiti referencu na objektnu biblioteku Word-a!!!
Primer 4 Radna sveska Zalihe.xls predstavlja zalihe firme koja prodaje računarske komponente. Sveska sadrži šifre, nazive, jedinične cene i trenutnu količinu proizvoda, na način prikazan ispod. Potrebno je ažurirati stanje zaliha, pri čemu jespisak novopristiglih komponenti dat u Word dokumentu Doprema.doc, koji se nalazi u istom folderu. Ažuriranje se vrši tako što se postojećim komponentama uveća količina za iznos dat u fajlu Doprema.doc. U svesku Zalihe.xls dodati dugme koje vrši ažuriranje. Doprema.doc Zalihe.xls
Primer 4 Sub Azuriraj() Dim Dok As Document, list As Worksheet, vr As Integer, k As Integer Set list = ThisWorkbook.Worksheets(1) Set Dok = Word.Documents.Open(ThisWorkbook.Path & "\Doprema.doc") With Dok.Tables(1) For k = 2 To .Rows.Count vr = 2 Do While list.Cells(vr, 1) <> "" If list.Cells(vr, 1) = Val(.Cell(k, 1).Range) Then list.Cells(vr, 4) = list.Cells(vr, 4) + Val(.Cell(k, 3).Range) End If vr = vr + 1 Loop Next End With ThisWorkbook.Save Dok.Close Set Dok = Nothing End Sub
Primer 4 - Kontrole • Kod Excel-a, prvo odaberemo kontrolu, pa onda kliknemo gde želimo da se nađe ta kontrola. Naravno, to radimo u Design Mode-u. • Ako želimo da se kontrola prostire preko čitavih ćelija, potrebno je držati dugme Alt prilikom smeštanja kontrole. • Programski kod dodate kontrole se nalazi u okviru radnog lista koji sadrži kontrolu. • U našem slučaju, procedura je Private Sub CommandButton1_Click() Call Azuriraj End Sub