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

#1 2. 8. 2012 09:48:47

elmo
Člen
Registrace: 2. 8. 2012
Příspěvků: 2

Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Zdravím prosím Vás jak přepsat tento VBA kód z MS Excelu do Basicu OO Calcu?

VBA kód z excelu:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And IsNumeric(Target.Value) = True Then
Cells(Target.Row, 1) = Cells(Target.Row, 1) + Target.Value
Target.Value = 0
End If
End Sub

Jde o přičítání hodnoty ze 4.buňky každého řádku do 1.buňky daného řádku.
Procházím fórům a snažím se přijít na příkazy a funkce, ale bohužel nedaří se mi to.

Předem děkuji.

________________________________________________
Značím jako vyřešené

;o)

Editoval sedlacekdan (13. 8. 2012 18:16:09)

Offline

#2 2. 8. 2012 13:20:54

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

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Takhle bych to "nepřekládal", ale postavil bych nové makro. Je jen otázkou, zda se má provádět jako podprocedura na definovaném "Range" (Tam je totiž deklarován sešit spolu s úsekem). Pokud tomu tak není, pak je možné postavit makro, které má definován sešit - (také nemusí, ale pak se spustí kdekoliv, což může být problém). Makro určitě není postaveno pro jedinou buňku, ale pro oblast (např. A1:D1000 ap).
Výkon makra tedy musí procházet pole řádek po řádku - přičíst hodnotu ze sloupce "D" pokud je to číselná hodnota - a buňku v "D" smazat (což je popsáno ve Vámi zveřejněném kódu VBA). Při tom se Vámi uvedený kód přepsaný do Basicu OO asi nedá naroubovat zpět na VBA. Proto raději popiště celou funkci. Jde o poměrně jednoduché zadání, ale upřesněte to. Stačí sešit (buď název, nebo index, a nebo v jakémkoliv aktivním listu), úsek (zda jde o pevný úsek, nebo se má načítat aktuální - nejspíš z buňky sloupce "A").

Editoval neutr (2. 8. 2012 13:23:30)


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

Offline

#3 3. 8. 2012 06:28:44

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Vítejte na fóru,


samotné makro není takový problém.


Jak píše neutr je problém v adresování buněk. VBA využívá jiný objektový model než Basic. Tzn. že adresování buněk je jiné.


Pro úspěšné napsání kódu je nutné vědět v jakém listu se má makro provádět. Zda jde o právě aktivní list nebo jeden konkrétní. Adresa buněk je vždy stejná nebo se mění? Může se také jednat o označenou (vybranou) oblast.
Makro má pracovat samostatně? Nebo navazuje na nějaké předchozí makro, které mu předává právě adresu buněk?


Popište prosím požadavky na makro co nejpodrobněji, případně můžete vložit i vzorový soubor, ve kterém bude vše popsáno.

Takto by veškeré rady "střílely" na slepo


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
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

#4 3. 8. 2012 11:42:26

elmo
Člen
Registrace: 2. 8. 2012
Příspěvků: 2

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Již jsem, ač třeba trochu primitivně, kód napsal:

Sub Main
Dim i as integer
oSheet = ThisComponent.sheets(0)
For i=1 To 600
A = oSheet.getCellbyPosition(0,i)
D = oSheet.getCellbyPosition(3,i)
if D.value<>0 then
A.value= A.value + D.value
D.value=0
end if
Next i
End Sub

Nebo soubor: pkr.ods
Teď bych jen potřeboval toto makro spustit vždy po zadání hodnoty do sloupce "nové body" a stisknutí entru. Pokaždé klikat na spuštění makra je trochu otravné a zapomenout kliknout na něj může přinést dost velké potíže.
Je to možné automaticky spustit? Děkuji

Offline

#5 3. 8. 2012 13:03:48

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

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Tak to makro je sice dobře, ale původní testovalo, zda v "D" je číselná hodnota. Což možná nehraje úlohu, ale není to úplně samozřejmé ani ve VBA (asi to není jen klišé z deklarace).
Viz : "If Target.Column = 4 And IsNumeric(Target.Value) = True Then"
Jinak je to správně.
Problém č 2. - bohu žel. Takhle by se choval vir. OOo nemá prostředky k reakci na stisknutí klávesy. Už jsem je několikrát googloval a nic. Je však možné například pomocí podmíněného formátování buněk zbarvit sešit (buňky, řádek, sloupec ap.) pro případ, že data nejsou uložena. Stejně tak lze jinak (jinou barvou) zbarvit v případě, že se pokusíte připsat další údaj.

Makro může být postaveno tak, aby nejprve detekovalo, zda jsou data konzistentní. Takže například určená buňka může automaticky detekovat skutečnost, že nejsou uloženy 2 a více posledních záznamů (stejně jako pro podmíněný formát). Makro může upozornit například MsgBoxem o co se jedná a skončit ještě před chybným zpracováním dat.


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

Offline

#6 3. 8. 2012 19:32:08

sedlacekdan
Moderátor
Místo Nehvizdy
Registrace: 21. 6. 2010
Příspěvků: 617

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

neutr napsal(a)

Tak to makro je sice dobře, ale původní testovalo, zda v "D" je číselná hodnota. Což možná nehraje úlohu, ale není to úplně samozřejmé ani ve VBA (asi to není jen klišé z deklarace).
Viz : "If Target.Column = 4 And IsNumeric(Target.Value) = True Then"

Tento problém řeší řádek

if D.value<>0 then

pokud buňka obsahuje text, tak jeho hodnota (D.value) je vždy 0

elmo napsal(a)

Teď bych jen potřeboval toto makro spustit vždy po zadání hodnoty do sloupce "nové body" a stisknutí entru. Pokaždé klikat na spuštění makra je trochu otravné a zapomenout kliknout na něj může přinést dost velké potíže.
Je to možné automaticky spustit?

Není, ale můžete makro spouštět například klávesovou zkratkou.


;o)


Linux Mint 16 Petra - Apache OpenOffice 4.0.1
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

#7 4. 8. 2012 05:08:40

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

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Pro Dana:
Test na to, jestli je to číselná hodnota může mít význam. Nevím sice moc o Excelu, ale deklarace tam bývají jednodušší, nežli v Calcu, a myslím si, že se Excel chová stejně jako Calc. Tedy že string se přičte jako nula k číselné hodnotě. Test tedy má nějaký účel. Může se stát, že čísla budou zadána jako text (například nějakým omylem někdo napíše místo desetinné čárky tečku ap - tedy číslo ve formátu "text"). Makro pak tento řádek vynechá (jinak by se přičetla nula a text by se ve sloupci D smazal).  To aby bylo možné například chybu opravit.

Snadno si představíme, že sešit natahuje data z různých zdrojů od různých lidí a někdo prostě místo čísla 5 napíše slovy "pět" (Také se podobné chyby vyskytují zde na fóru dost často - například přenos čísla z vybíracích seznamů a další podobné). Velmi často se asi stane, že nějaký horlivec napíše místo čísla slovo "nic", nebo napíše "" (zkratka pro opakování hodnoty předchozího řádku) - tedy tak jak to vyžadují například daňové formuláře. častou chybou asi bude připsání tečky za číslem a je tu chyba. Pak bychom asi nechtěli slovo "pět", nebo číslo s tečkou (a texty číslu "podobné") smazat, ale opravit.

Nejspíš však ve sloupci "D" mohou být také texty, které se nesmí smazat. V deklaraci je slovo "private", což má asi stejný význam jako v Calcu. Popisované makro bude přístupné pro více účelů. Také jsem psal, že to "možná" nehraje úlohu - tedy pro potřeby autora (elmo).

Editoval neutr (4. 8. 2012 06:04:08)


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

Offline

#8 4. 8. 2012 19:55:39

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

Re: Makra z Excelu do Calcu - přičítání - VYŘEŠENO

Musím se opravit. Je to jinak. Otestoval jsem obě různá makra na stejných "formátech" buněk. Tedy na datumu měně, zlomku, textu atd. Makro s Isnumeric (zřejmě obdoba Isnumber z VBA ?) smaže všechny buňky ve sloupci "D" tedy jak připočtená čísla, tak text (mimo formántu Datum, které se převede na počáteční  v 19. století 31.12.1899 - to ale dělají oba typy). Předpokládal jsem něco jiného - zejména to že se vyloučí přičtení čísla z data, že tedy nebude detekováno datum jako formát čísla, ale přičtou to oba typy jako hausnumero. Tady jsou oba typy maker.

Sub Main
oSheet = ThisComponent.sheets(0)
For i= 0 To 10
A = oSheet.getCellbyPosition(0,i)
D = oSheet.getCellbyPosition(3,i)
if D.Value <> 0  then
A.value= A.value + D.value
D.value=0
end if
Next i
End Sub
Sub Main1
oSheet = ThisComponent.sheets(0)
For i= 0 To 10
A = oSheet.getCellbyPosition(0,i)
D = oSheet.getCellbyPosition(3,i)
if ISNUMERIC(D.Value) = True  then
A.value = A.value + D.value
D.value=0
end if
Next i
End Sub

Omlouvám se všem koho jsem uváděl v omyl.

Editoval sedlacekdan (13. 8. 2012 18:15:46)


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

Offline

Zápatí