formatare tabele
formatare tabele
Am o problema,
Am o suita de tabele (muuulte) si trebuie sa modific manual (trag de linii) latimea coloanelor, ca sa paginez cum trebuie.
Se poate face cu un script, in care sa declar coloana 1 = 10%, 2 - 33%, 3 - 5%, etc, la toate tabelele din document ?
Cu posibilitatea sa scad sau sa adaug (modificand scriptul), numarul de coloane si latimea lor ?
Am si o alta problema (iar)
In aceiasi ordine de idei, (alt script, ca se modifica mai usor) sa aliniez scrisul (din celule) pe coloane, in toate tabelele documentului: st, dr, mijloc declarand coloana 1=dr, 2=st, 3= mijloc, etc ?
Multumesc mult.
Am o suita de tabele (muuulte) si trebuie sa modific manual (trag de linii) latimea coloanelor, ca sa paginez cum trebuie.
Se poate face cu un script, in care sa declar coloana 1 = 10%, 2 - 33%, 3 - 5%, etc, la toate tabelele din document ?
Cu posibilitatea sa scad sau sa adaug (modificand scriptul), numarul de coloane si latimea lor ?
Am si o alta problema (iar)
In aceiasi ordine de idei, (alt script, ca se modifica mai usor) sa aliniez scrisul (din celule) pe coloane, in toate tabelele documentului: st, dr, mijloc declarand coloana 1=dr, 2=st, 3= mijloc, etc ?
Multumesc mult.
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: formatare tabele
Pentru asta se da urmatorul cod:
care din cate e observa si din comentarii iti permite sa modifici anumite coloane din tabele tale atata timp cat definesti matricea arrCols cu numarul de linii corespunzator pentru fiecare coloana pe care o doresti modificata dupa modelul:
arrCols(NumarColoana, ValoareLatime)
nu uita ca ValoareLatime este in procente... (wdPreferredWidthPercent) daca vrei sa fie exacta... in "puncte" modifca cu wdPreferredWidthPoints.
Tot in cod ai "comentat" si in situatia in care vrei sa modifici alinierea... creaza o alta functie in care pentru fiecare "pereche" coloana/valoare de aceasta data sa ai:
arrCols(NumarColoana, Aliniament)
iar codul care va face modificare va fi:
dar nu uita a comentezi codul care face modificare latimii... sau poate vrei sa definesti arrCols cu 3 coloane in asa fel incat pe a 3-a coloana sa ai modalitatea de aliniere... si astfel vei face o singura parcurgere a documentului...
Ai si exemplul atasat:
Cod: Selectaţi tot
Sub ResizeAllTables()
Dim tbl As Table
Dim i As Integer
'Defineste matricea pentru dimensiunile coloanelor
' (in acest exemplu - 3 linii pentru ca vom modifica numai 3 coloane din tabelele "desenate")
'Coloana 1 este pentru numarul coloanei ce va fi modificata
'Coloana 2 este pentru a stabili dimensiunea coloanei (in procente)
Dim arrCols(1 To 3, 1 To 2) As Long
arrCols(1, 1) = 2
arrCols(1, 2) = 10
arrCols(2, 1) = 3
arrCols(2, 2) = 30
arrCols(3, 1) = 4
arrCols(3, 2) = 20
For Each tbl In ActiveDocument.tables
'verifica numarul de coloane al tabelului sa fie cel putin cat al matricei de coloane
If tbl.Columns.Count >= UBound(arrCols, 1) Then
For i = 1 To UBound(arrCols, 1)
tbl.Columns(arrCols(i, 1)).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent
tbl.Columns(arrCols(i, 1)).PreferredWidth = arrCols(i, 2) 'Modifica cu dimensiunea ceruta
'Daca se doreste si alinierea poti pune in coloana 2 din arrCols valorile 0/1/2 dupa cum urmeaza:
' wdAlignRowLeft=0
' wdAlignRowCenter=1
' wdAlignRowRight=2
'tbl.Columns(arrCols(i, 1)).Select
'Selection.Rows.Alignment =arrCols(i, 2)
Next i
Else
Debug.Print "Tabelul nu are dimensiunea corecta" & tbl.Columns.Count ' Asta se vede numai in Immediate window
End If
Next tbl
End Sub
arrCols(NumarColoana, ValoareLatime)
nu uita ca ValoareLatime este in procente... (wdPreferredWidthPercent) daca vrei sa fie exacta... in "puncte" modifca cu wdPreferredWidthPoints.
Tot in cod ai "comentat" si in situatia in care vrei sa modifici alinierea... creaza o alta functie in care pentru fiecare "pereche" coloana/valoare de aceasta data sa ai:
arrCols(NumarColoana, Aliniament)
iar codul care va face modificare va fi:
Cod: Selectaţi tot
tbl.Columns(arrCols(i, 1)).Select
Selection.Rows.Alignment =arrCols(i, 2)
Ai si exemplul atasat:
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: formatare tabele
Sincer,
nu am inteles chestia cu ljniile si coloanele:
arrCols(1, 1) = 2
arrCols(1, 2) = 10
arrCols(2, 1) = 3
arrCols(2, 2) = 30
arrCols(3, 1) = 4
arrCols(3, 2) = 20
Te rog sa imi explici ce inseamna fiecare cifra:
(1, 1) = 2
(1, 2) = 10
etc
Sau inteleg dar ma sperii.
Ca sa modifici coloanele trebuie sa modifici NU coloanele, ci latimea fiecarei CELULE de pe fiecare RAND DIN TABEL ?
Multumesc.
nu am inteles chestia cu ljniile si coloanele:
arrCols(1, 1) = 2
arrCols(1, 2) = 10
arrCols(2, 1) = 3
arrCols(2, 2) = 30
arrCols(3, 1) = 4
arrCols(3, 2) = 20
Te rog sa imi explici ce inseamna fiecare cifra:
(1, 1) = 2
(1, 2) = 10
etc
Sau inteleg dar ma sperii.
Ca sa modifici coloanele trebuie sa modifici NU coloanele, ci latimea fiecarei CELULE de pe fiecare RAND DIN TABEL ?
Multumesc.
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: formatare tabele
In arrCols am pus datele "de intrare"... adica tu vrei sa modifici anumite coloane cu anumite dimensiuni... si eu am ales varianta mai "complicata" punand datele de intrare intr-o matrice arrCols (asta pentru ca mie nu imi place sa caut prin cod sa vad pe unde mai am cate ceva de modificat - ci incerc sa-l fac cat mai generic si apoi sa ma folosesc de "parametrii").
Ce inseamna acea matrice?... (sau daca vrei un vector cu 2 dimensiuni):
Ceva de genul acestui tabel:
Unde COL1 reprezinta coloana din tabel pe care vei dori sa o modifici iar COL2 reprezinta valoarea in procente cu care vrei sa setezi acea coloana, iar apelarea acelor valori se face ca si in excel pe baza liniei si a coloanei:
arrCols(linie,coloana) = valoare
arrCols(1,1)=2 - se "traduce" ca elementul din randul 1, coloana 1 va avea valoarea 2
arrCols(3,2)=20 - se "traduce" ca elementul din randul 3 coloana 2 are valaorea 20
De ce am ales varianta asta, de ce m0am "complicat"?... pentru flexibilitate - altfel codul ar fi aratat ceva de genul:
Si nu ar fi o problema... dar daca nu sunt de modificat numai 3 coloane ci 4 sau chiar 10... atunci trebuie sa fi foarte atent cu codul tau pentru ca ar trebui sa adaugi "perechi" de genul:
Si DACA nu mai sunt coloanele alea... iar iei la mana fiecare linie sa stai sa modifici... peste tot cu NumarColoana corect, etc...
Evident... astea sunt doar chestii de "preferinta"... asa ca daca tu preferi varianta 2 nu te opreste nimeni... dar sper ca acum ti-a mai trecut din "sperietura"...
Ce inseamna acea matrice?... (sau daca vrei un vector cu 2 dimensiuni):
Ceva de genul acestui tabel:
Cod: Selectaţi tot
COL1 COL2
2 10
3 30
4 20
arrCols(linie,coloana) = valoare
arrCols(1,1)=2 - se "traduce" ca elementul din randul 1, coloana 1 va avea valoarea 2
arrCols(3,2)=20 - se "traduce" ca elementul din randul 3 coloana 2 are valaorea 20
De ce am ales varianta asta, de ce m0am "complicat"?... pentru flexibilitate - altfel codul ar fi aratat ceva de genul:
Cod: Selectaţi tot
Sub ResizeAllTables()
Dim tbl As Table
For Each tbl In ActiveDocument.Tables
'verifica numarul de coloane al tabelului sa fie cel putin cat al matricei de coloane
If tbl.Columns.Count >= 3 Then
tbl.Columns(2).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent
tbl.Columns(2).PreferredWidth = 10 'Modifica cu dimensiunea ceruta
tbl.Columns(3).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent
tbl.Columns(3).PreferredWidth = 30 'Modifica cu dimensiunea ceruta
tbl.Columns(4).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent
tbl.Columns(4).PreferredWidth = 20 'Modifica cu dimensiunea ceruta
Else
Debug.Print "Tabelul nu are dimensiunea corecta - 3" ' Asta se vede numai in Immediate window
End If
Next tbl
End Sub
Cod: Selectaţi tot
tbl.Columns(NumarColoana).PreferredWidthType = wdPreferredWidthPercent
tbl.Columns(NumarColoana).PreferredWidth = DimensiuneColoana
Evident... astea sunt doar chestii de "preferinta"... asa ca daca tu preferi varianta 2 nu te opreste nimeni... dar sper ca acum ti-a mai trecut din "sperietura"...
Re: formatare tabele
Da ....
Despre corp, grup, inel si matrice am invatat acum vreo .... 45 de ani.
Ma rog, acum ca stiu ce fel mancare este ... sper ca pot alege si felul de vin potrivit.
Descrierea variabilelor la inceputul modulului, programului, imi este familiara.
Cea ce ne intoarce nedumerirea mea, ca in acest moment nu mai stiu cum se scrie o matrice.
Adica elementul 1,2,3 dinntr-o matrice cu .... 2 "coloane" ?.
Deci pentru 14 coloane din tabelul meu trebuie sa scriu cam asa ? :
arrCols(1, 1) = 2 (coloana 1 sa fie 2%)
arrCols(1, 2) = 10 (coloana 2 sa fie 10%)
arrCols(2, 1) = 3 (coloana 3 = 3%)
arrCols(2, 2) = 30 (coloana 4 = 30%)
arrCols(3, 1) = 4 (coloana 5 = 4%)
arrCols(3, 2) = 20 (coloana 6 = 20%)
arrCols(4, 1) = 2 (coloana 7 = 2%)
arrCols(4, 2) = 20 (coloana 8 = 20%)
......
arrCols(7,1) = 10 (coloana 13 = 10%)
arrCols(7, 2) = 20 (coloana 14 = 20%)
Cat desptre sperietura ce sa zic ?
Doar dementii nu se sperie de nimic.
Despre corp, grup, inel si matrice am invatat acum vreo .... 45 de ani.
Ma rog, acum ca stiu ce fel mancare este ... sper ca pot alege si felul de vin potrivit.
Descrierea variabilelor la inceputul modulului, programului, imi este familiara.
Cea ce ne intoarce nedumerirea mea, ca in acest moment nu mai stiu cum se scrie o matrice.
Adica elementul 1,2,3 dinntr-o matrice cu .... 2 "coloane" ?.
Deci pentru 14 coloane din tabelul meu trebuie sa scriu cam asa ? :
arrCols(1, 1) = 2 (coloana 1 sa fie 2%)
arrCols(1, 2) = 10 (coloana 2 sa fie 10%)
arrCols(2, 1) = 3 (coloana 3 = 3%)
arrCols(2, 2) = 30 (coloana 4 = 30%)
arrCols(3, 1) = 4 (coloana 5 = 4%)
arrCols(3, 2) = 20 (coloana 6 = 20%)
arrCols(4, 1) = 2 (coloana 7 = 2%)
arrCols(4, 2) = 20 (coloana 8 = 20%)
......
arrCols(7,1) = 10 (coloana 13 = 10%)
arrCols(7, 2) = 20 (coloana 14 = 20%)
Cat desptre sperietura ce sa zic ?
Doar dementii nu se sperie de nimic.
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: formatare tabele
Nope!...
Pentru 14 coloane din tabelul tau trebuie sa scrii asa:
mai intai si mai intai e defineste matricea (numarul de coloane ramane intotdeauna 2... adica 1 to 2)
Dim arrCols(1 To 14, 1 To 2) As Long
dupa care incepi sa definesti "perechile" de valori IDCOLOANA (aia din tabelul tau), DIMENSIUNE COLOANA (in procent):
'Pentru prima coloana de modificat din tabelul tau (nu este neaparat NR1 ci in acest exemplu este 2)
arrCols(1, 1) = 2 <= Elementul (rand1, coloana1) este ID-ul coloanei - in cazul de fata este vorba de coloana 2 din tabelul pe care il va gasi
arrCols(1, 2) = 10 <= Elementul (rand1,coloana2) reprezinta DIMENSIUNEA COLOANEI (10%) din Elementul (rand1, coloana1)
'Pentru a 2-a coloana de modificat din tabelul tau (nu este neaparat NR2 ci in acest exemplu este 4 - ca poate nu vrei de ex. sa moodifici coloana 3)
arrCols(2, 1) = 4 <= Elementul (rand2, coloana1) este ID-ul coloanei - in cazul de fata este vorba de coloana 4 din tabelul pe care il va gasi
arrCols(2, 2) = 20 <= Elementul (rand2,coloana2) reprezinta DIMENSIUNEA COLOANEI (20%) din Elementul (rand2, coloana1)
si tot asa pana ajungi la coloana 14
'Pentru a 14-a coloana de modificat din tabelul tau (nu este neaparat NR14 ci in acest exemplu este 20 - ca poate tabelul tau are 25 de coloane )
arrCols(14, 1) = 20 <= Elementul (rand14, coloana1) este ID-ul coloanei - in cazul de fata este vorba de coloana 20 din tabelul pe care il va gasi
arrCols(14, 2) = 10 <= Elementul (rand14,coloana2) reprezinta DIMENSIUNEA COLOANEI (10%) din Elementul (rand14, coloana1)
Acum este ceva mai clar?...
Pentru 14 coloane din tabelul tau trebuie sa scrii asa:
mai intai si mai intai e defineste matricea (numarul de coloane ramane intotdeauna 2... adica 1 to 2)
Dim arrCols(1 To 14, 1 To 2) As Long
dupa care incepi sa definesti "perechile" de valori IDCOLOANA (aia din tabelul tau), DIMENSIUNE COLOANA (in procent):
'Pentru prima coloana de modificat din tabelul tau (nu este neaparat NR1 ci in acest exemplu este 2)
arrCols(1, 1) = 2 <= Elementul (rand1, coloana1) este ID-ul coloanei - in cazul de fata este vorba de coloana 2 din tabelul pe care il va gasi
arrCols(1, 2) = 10 <= Elementul (rand1,coloana2) reprezinta DIMENSIUNEA COLOANEI (10%) din Elementul (rand1, coloana1)
'Pentru a 2-a coloana de modificat din tabelul tau (nu este neaparat NR2 ci in acest exemplu este 4 - ca poate nu vrei de ex. sa moodifici coloana 3)
arrCols(2, 1) = 4 <= Elementul (rand2, coloana1) este ID-ul coloanei - in cazul de fata este vorba de coloana 4 din tabelul pe care il va gasi
arrCols(2, 2) = 20 <= Elementul (rand2,coloana2) reprezinta DIMENSIUNEA COLOANEI (20%) din Elementul (rand2, coloana1)
si tot asa pana ajungi la coloana 14
'Pentru a 14-a coloana de modificat din tabelul tau (nu este neaparat NR14 ci in acest exemplu este 20 - ca poate tabelul tau are 25 de coloane )
arrCols(14, 1) = 20 <= Elementul (rand14, coloana1) este ID-ul coloanei - in cazul de fata este vorba de coloana 20 din tabelul pe care il va gasi
arrCols(14, 2) = 10 <= Elementul (rand14,coloana2) reprezinta DIMENSIUNEA COLOANEI (10%) din Elementul (rand14, coloana1)
Acum este ceva mai clar?...
Re: formatare tabele
Trebuia sa imi explici "vizual" dragule.
Adica:
In "celula" 1 din randul 5 al matricei definesti numarul coloanei din tabelul word si in "celula" 2 din matrice definesti latimea coloanei din tabel !
(5,1) = x inseamana: al cincilea rand din matrice, prima "celula", unde declar ca lucrez pe coloana x din tabelul meu word
(5,2) = y inseamana: al cincilea rand din matrice, a doua "celula", unde declar latimea coloanei x din tabelul meu word, ca fiind y,
In functie de cum vreau paginat tabelul, pentru web, tiparire pe hartie, dimensiune fixa in puncte, procentaj, etc. pot modifica % cu "puncte", inlocuind wdPreferredWidthPercent cu wdPreferredWidthPoints.
Restul fiind "birocratie" de programare de tipul:
> if else
> go to 438
Acum am priceput ?
Adica:
In "celula" 1 din randul 5 al matricei definesti numarul coloanei din tabelul word si in "celula" 2 din matrice definesti latimea coloanei din tabel !
(5,1) = x inseamana: al cincilea rand din matrice, prima "celula", unde declar ca lucrez pe coloana x din tabelul meu word
(5,2) = y inseamana: al cincilea rand din matrice, a doua "celula", unde declar latimea coloanei x din tabelul meu word, ca fiind y,
In functie de cum vreau paginat tabelul, pentru web, tiparire pe hartie, dimensiune fixa in puncte, procentaj, etc. pot modifica % cu "puncte", inlocuind wdPreferredWidthPercent cu wdPreferredWidthPoints.
Restul fiind "birocratie" de programare de tipul:
> if else
> go to 438
Acum am priceput ?
Re: formatare tabele
Buna,
Cu declararea tabrelului meu in matrice a mers. Adica m-am prins.
Dar imi da eroare referitor la latime CELULELOR !
Run-time eror '5992'
Cannot access individual colums in this colection because the table has mixed cell widts
la debug eroarea este aici:
tbl.Columns(arrCols(i, 1)).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent
Si este cert ca celule au si ele declarat preferred width, nu numai coloanele.
Ceva ar trebui sa elimine preferred width din celule, inainte de modificarea coloanelor.
Scriptul modificat de mine arata asa:
Multumesc
Cu declararea tabrelului meu in matrice a mers. Adica m-am prins.
Dar imi da eroare referitor la latime CELULELOR !
Run-time eror '5992'
Cannot access individual colums in this colection because the table has mixed cell widts
la debug eroarea este aici:
tbl.Columns(arrCols(i, 1)).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent
Si este cert ca celule au si ele declarat preferred width, nu numai coloanele.
Ceva ar trebui sa elimine preferred width din celule, inainte de modificarea coloanelor.
Scriptul modificat de mine arata asa:
Cod: Selectaţi tot
Sub ResizeAllTables()
Dim tbl As Table
Dim i As Integer
'Defineste matricea pentru dimensiunile coloanelor
' (in acest exemplu - 3 linii pentru ca vom modifica numai 3 coloane din tabelele "desenate")
'Coloana 1 este pentru numarul coloanei ce va fi modificata
'Coloana 2 este pentru a stabili dimensiunea coloanei (in procente)
Dim arrCols(1 To 6, 1 To 2) As Long
arrCols(1, 1) = 1
arrCols(1, 2) = 63
arrCols(2, 1) = 2
arrCols(2, 2) = 5
arrCols(3, 1) = 3
arrCols(3, 2) = 8
arrCols(4, 1) = 4
arrCols(4, 2) = 8
arrCols(5, 1) = 5
arrCols(5, 2) = 8
arrCols(6, 1) = 6
arrCols(6, 2) = 8
For Each tbl In ActiveDocument.Tables
'verifica numarul de coloane al tabelului sa fie cel putin cat al matricei de coloane
If tbl.Columns.Count >= UBound(arrCols, 1) Then
For i = 1 To UBound(arrCols, 1)
[b] tbl.Columns(arrCols(i, 1)).PreferredWidthType = wdPreferredWidthPercent 'Seteaza tipul modificari - procent[/b]
tbl.Columns(arrCols(i, 1)).PreferredWidth = arrCols(i, 2) 'Modifica cu dimensiunea ceruta
'Daca se doreste si alinierea poti pune in coloana 2 din arrCols valorile 0/1/2 dupa cum urmeaza:
' wdAlignRowLeft=0
' wdAlignRowCenter=1
' wdAlignRowRight=2
'tbl.Columns(arrCols(i, 1)).Select
'Selection.Rows.Alignment =arrCols(i, 2)
Next i
Else
Debug.Print "Tabelul nu are dimensiunea corecta" & tbl.Columns.Count ' Asta se vede numai in Immediate window
End If
Next tbl
End Sub
Ultima oară modificat Joi Ian 27, 2011 3:55 pm de către Anonymous, modificat 1 dată în total.
Motiv: Adăugare tag-uri CODE
Motiv: Adăugare tag-uri CODE
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: formatare tabele
E posibil ca eroarea sa apara datorita faptului ca in interiorul tabelului ai zone in care ai modificat manual latimea anumitor celule... daca vrei, ceva asemanator "merge cells" in excel si atunci nu mai stie ce sa faca.
Codul propus functioneaza NUMAI pe tabele cu aceeasi latime a coloanelor de sus pana jos...
Daca nu asta este problema, poate poti atasa o "bucata" de document cu un tabel (nu trebuie sa contina date) si codul VBA pentru a vedea unde este eroarea.
Codul propus functioneaza NUMAI pe tabele cu aceeasi latime a coloanelor de sus pana jos...
Daca nu asta este problema, poate poti atasa o "bucata" de document cu un tabel (nu trebuie sa contina date) si codul VBA pentru a vedea unde este eroarea.
Re: formatare tabele
Eu nu am modificat nimic.
Tabelele sunt scanate/ocerizate dintr-un fisier.
Si asa apar.
Pentru ca sunt multe si identice ca continut, dar urmare a scanarii/ocerizarii nu au coloanele de aceiasi dimensiune, am intrebat daca se poate face automat "paginarea".
Tabelele sunt scanate/ocerizate dintr-un fisier.
Si asa apar.
Pentru ca sunt multe si identice ca continut, dar urmare a scanarii/ocerizarii nu au coloanele de aceiasi dimensiune, am intrebat daca se poate face automat "paginarea".
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.