Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 11. 6. 2015 16:20:06

ferik
Člen
Registrace: 11. 6. 2015
Příspěvků: 2

Cyklus makro

Chcel by som Vás poprosiť o radu, kombinujem tu pár makier čo mi už aj funguje, len by som ho chcel trocha skrátiť.
Cyklus by mi bodol, len sa s tým trápim nejaký ten den a neviem ako dalej. Je to makro pre kopírovanie hodnôt. V prvom liste vyhladá a vpíše do druhého listu (do správnej bunky). Viem skopírovať celé makro a namiesto jmeno = zdroj_list.getCellRangeByName("E1").string pridám "E2" a tak dalej budem kopírovať, len to bude moc velké a neprehladné. Vedeli by ste mi s tým pomôcť?
Vopred dakujem.

sub testovacie_makro
doc = thisComponent
listy = doc.sheets()
zdroj_list = listy.getByName("Sheet1")
ciel_list = listy.getByName("Sheet2")
mesiac = zdroj_list.getCellRangeByName("A1").string
doch = zdroj_list.getCellRangeByName("C1").string
jmeno = zdroj_list.getCellRangeByName("E1").string 'e2,e3,e4 až po e30 tu by som potreboval urobiť cysklus

for i = 0 to 20 ' pro sloupce 0 - 24
hledej_doch = zdroj_list.getCellByPosition(i, 3).string ' (A-Y:4)
if hledej_doch = doch then
  exit for
endif
next i
for j = 1 to 20
hledej_jmeno = zdroj_list.getCellByPosition(0, j).string ' (A:1-100)
if hledej_jmeno = jmeno then
  exit for
endif
next j

suma = zdroj_list.getCellByPosition(i,j) 
export = suma.string

for i = 0 to 24
hledej_mesic = ciel_list.getCellByPosition(i, 0).string ' (A-Y:4)
if hledej_mesic = mesiac then
  exit for
endif
next i
for j = 0 to 100
hledej_jmeno = ciel_list.getCellByPosition(0, j).string ' (A:1-100)
if hledej_jmeno = jmeno then
  exit for
endif
next j

kde = ciel_list.getCellByPosition(i,j)
kde.string = export
End Sub

Editoval ferik (11. 6. 2015 16:20:59)

Offline

#2 11. 6. 2015 20:23:11

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,527

Re: Cyklus makro

Nějak tomu nerozumím. Proč chcete přepisovat názvy buněk, když dál běžně užíváte tvar například .getCellByPosition(i, 3). To je adresa buňky stejně jako .getCellRangeByName("A1"). například pro buňku "A1" je to .getCellByPosition(0, 0) - počítá se od nuly 1=0.....
například pro buňku "E2" je to .getCellByPosition(4, 1)
například pro buňku "E11" je to .getCellByPosition(4, 10)
Takže to dáte do cyklu tak jak už děláte For i = 1 To 100 ...next i a je to
Pro ošetření bloku buněk :-
For i = 1 To 100 '-řádky   2. až 101
For j = 0 To 4   '-sloupce 1 až 5 (A-E)
....kód 1 IF....
Cell_1 = zdroj_list.getCellByPosition(i, j)
....kód 2 If....
Cell_2 = ciel_list.getCellByPosition(i, j)
................
Next j
Next i
    Vidím tam sice základní řešení, ale měl byste si poradit. Jestli chcete pomoci bude lepší když sem dáte vzor. Nejvíc práce dá simulovat data - a navíc vždy se při tom ukáže něco nečekaného. Takže raději pošlete ukázku (například přes uložto.cz (sk), nebo LeteckaPosta.cz ap.


PS : napadlo mne, že je to asi porovnání tabulky X1:Y1 proti tabulce X2:Y2, tedy vlastně relace A:B. Tam je řešení složitější - musel byste vnořit 4 cykly do sebe. Ale ukázka napoví víc.

Editoval neutr (11. 6. 2015 20:31:47)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 12. 6. 2015 08:38:08

ferik
Člen
Registrace: 11. 6. 2015
Příspěvků: 2

Re: Cyklus makro

Pekný den,
šupol som to na uschonu,

http://moja.uschovna.zoznam.sk/link/b08 … 069bfdfa55

Je to funkčné (tak ako to potrebujem), ak by ste mi vedeli poradiť, skrátiť môj divoký zápis.

Dakujem

Offline

#4 12. 6. 2015 17:39:08

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,527

Re: Cyklus makro

Nejdříve se podívejte jestli jsem to pochopil správně. Takhle nějak by měl vypadat vzor. Tabulku na prvním listu jsem dovodil z poznámek v makru. Přidal jsem výběr pomocí roletek. Je to výběr v buňce kde je červená tečka. Až sem je to myslím logické.
     Ale dál už mi logiku nic moc nedává.
1. - Co znamenají ty jednotlivé testy?
2. - A když se spustí naráz má se vykopírovat celý sloupec?
3. - První okénko pro výběr cíle (kam se má kopírovat?) - to by měly být měsíce - celkem podle makra 24. Já jsem do listu 2 zavedl jen jeden rok. Není ale problém například napsat Február 2015, a podobně jen např. Febr 15...
4. - Vypadá to jako celé směny (nebo jen hodiny) pracovníků. Tedy nejspíš odpracované na různých provozech (pracovištích). Do listu 2 by se měly asi sčítat tyto hodnoty tak aby list 2 ukázal odpracované hodiny pracovníků v souhrnu za osobu. - Tohle ale jde řešit jen vzorci, nebo zcela jednoduchými makry - mnohem snadnějšími nežli je Váš postup.
5. - Jenže ono by to mohlo být také ještě jinak - skutečně vybírat po jednotlivém pracovníku. Pak bych zase očekával, že se na listu 2 bude opakovat stejné jméno několikrát za sebou na různých místech. Tohle ale musíte popsat.
6. - Soustřeďte se na to, co je potřeba - co od toho očekáváte - popis účelu je rozhodující.
7. - Podmínky prováděné jsou jaksi nelogické vzhledem k tomu co se má udělat př:
----------------------------
if hladaj_meno = meno then ' zhoda (při shodě se řádek přeskočí)
  exit for
endif
----------------------------
if hledej_mesic = mesiac then 'zhoda (při shodě se řádek přeskočí)
  exit for
endif
----------------------------
Nakonec když hledáte všechno tak ty testy se navzájem přepíší - a je to tak samé jako když vykopírujete celý sloupec. Takže i když zvážím, že skutečná podmínka bude asi jiná (tato je možné jen ilustrační), tak nejspíš z této koncepce nic dobrého nesetrojíte.


     Podívejte se jak jsem to poupravil a napište co ano, co ne ale hlavně co to má dělat. Tohle je fakt nelogické.


PS : Mustr

Editoval neutr (12. 6. 2015 17:47:05)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

Zápatí