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

#1 Re: Calc » Formulář - respektive Dialog » 18. 10. 2018 04:55:18

Díky za ukázku já raději když vše nastavím nejlepe v jednom, a ohledně kodu jsm se moc nepodíval Standard2 má heslo smile ale to je možná zaměrně.
Max

#2 Re: Calc » InsertSheetFromFile » 16. 10. 2018 21:21:52

Ježiši kriste to jsem asi blbě vysvětlil a nebo to načtení bude složitější než jsem čekal.
Otevřu sešit zasoby v tomto sešitě je list Vysledek ten je samo aktivní spuštěním makra se tímto

cUr_zasoby = x+"Zasoby1.csv"
ImportCSVPrepisList(cUr_zasoby , "Zasoby")............

viz předešlé příspěvky se vloži prozatím 1list s názvem Zasoby aktivním listem však zůstává list Vysledek jenže já potřebuji aby se stal aktivním list Zasoby ma kterém se provedou další změny... jenže kód

dim vzoreck(0) as new com.sun.star.beans.PropertyValue
vzoreck(0).Name = "Nr"
vzoreck(0).Value = "Zasoby"
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, vzoreck())

se sice provede, ale aktivím (vybraným) listem zůstává stále Vysledek.

Pravě jsem zkusil nahrat makro a následně tedy použit kod s číslem a ejhle ono to jde ale to nechápu proč to nejde tím jménem. Proto jsem ty jmena chtěl abych mohl jednoznačně ty listy identifikovat.

Ale za kody díky to zjištění čísla z názvu lisu se může hodit.

Zatím díky max

#3 Re: Calc » Formulář - respektive Dialog » 16. 10. 2018 20:45:51

Chápu na co narážite já jsem zrovna jeden z těch co k smrti nesnáší doplňující otázky smile. Mohl bych to do aleluja obhajovat, ale to bychom jen tlachali. Nepředpokládal bych že kvuli jedné věci musím udělat 5jiných o kterých nemám ani páru. Tak snad to pak nějak pochopím.

Jedná se stále o stejné makro které spolu řešíme Zde
o makro které upraví a následně porovná soubory csv.

Pro zpřijemnění obsluhy makra jsem vytvořil 2 dialogy jeden obsahuje (pro případ že uživatel bude tele a uloží soubory jinam) pouze textové pole kam napíše cestu k souborum (libil by se mi tam FileControl1 jenže ten požaduje vybrání souboru já potřebuji jen složku a to jsem nepřišel jak) a pak už jen tlačítko Spustit (stále to běží v jednom makru) tím se načte soubor upraví se a vyexportuje pro 2 dodavatele. Jakmile toto dodělá spustí se druhý dialog kde jsou zaškrtávací tlačítka dobrovsky pemic kosmas euromedia a 2 tlačítka volby ze souboru a ze schránky,ty bych rád aby byly skryty do okamžiku, kdy uživatel vybere tlačítko dobrovsky. Poté se zobrazí a já si navolím jak mi momentálně daný dodavatel vyplivl výsledek. Jakmile navolím kliknu na tlačítko porovnat a už to jede vloží to pouze dodavatele které jsem zaškrtl a navíc v případě bobrovského list bud vloží nebo ho vytvoří vložením ze schránky. Tedy alespoň teoreticky to tak funguje. Ten druhý dialog vlastně tvoří pauzu než vyexportované soubory protlačím přes dodavatele a jakmile mám vysledky vyplnim dialog a jedu dál. Předpokládal bych že jakmile zavřu tento dialog vrátim se do puvodního makra prvního dialogu. Ale takto to funguje jen teoreticky prakticky jsem tam ještě nedošel smile.

Tak to asi vše lépe to snad nedokážu ani popsat a zbytek co by to mělo dělat je psíš do toho původního příspěvku. Viz odkaz dríve.

Předem díky
Max

Sub Dialog2Show
Dim dlg As Object
Dim Cesta As Object
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


DialogLibraries.LoadLibrary("Standard")
dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2 )
dlg.Execute()

x = dlg.model.Cesta.text
 
cUr_zasoby = x+"Zasoby1.csv"
ImportCSVPrepisList(cUr_zasoby , "Zasoby")
y="file:///"+x+"dobrovsky.csv"
dim dobrovsky(2) as new com.sun.star.beans.PropertyValue
dobrovsky(0).Name = "URL"
dobrovsky(0).Value ="file:///"+x+"dobrovsky.csv"
dobrovsky(1).Name = "FilterName"
dobrovsky(1).Value = "Text - txt - csv (StarCalc)"
dobrovsky(2).Name = "FilterOptions"
dobrovsky(2).Value = "59,34,33,1,,0,false,true,true,false"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, dobrovsky())

dim vzoreck(0) as new com.sun.star.beans.PropertyValue
vzoreck(0).Name = "Nr"
vzoreck(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, vzoreck())

Rem vložení a úprava vprvního sloupce vožení zakaznického čisla pro pemic
dispatcher.executeDispatch(document, ".uno:InsertColumns", "", 0, Array())
dim fomat(0) as new com.sun.star.beans.PropertyValue
fomat(0).Name = "NumberFormatValue"
fomat(0).Value = 100
dispatcher.executeDispatch(document, ".uno:NumberFormatValue", "", 0, fomat())
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "StringName"
args6(0).Value = "02516"
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

Rem vložení zákaznického čísla do všech buněk 1 sloupce tedy až po konec hodnot 2 sloupce
Rem nejdřive vpravo nahoru
dim args10(1) as new com.sun.star.beans.PropertyValue
args10(0).Name = "By"
args10(0).Value = 1
args10(1).Name = "Sel"
args10(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args10())
Rem směrem dolu na konec dat
dim args11(1) as new com.sun.star.beans.PropertyValue
args11(0).Name = "By"
args11(0).Value = 1
args11(1).Name = "Sel"
args11(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args11())
Rem Zpět vlevo na začátek dat
dim args12(1) as new com.sun.star.beans.PropertyValue
args12(0).Name = "By"
args12(0).Value = 1
args12(1).Name = "Sel"
args12(1).Value = false
dispatcher.executeDispatch(document, ".uno:GoLeftToStartOfData", "", 0, args12())
Rem a nahoru na začátek dat
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "By"
args13(0).Value = 1
dispatcher.executeDispatch(document, ".uno:GoUpToStartOfDataSel", "", 0, args13())
Rem vložení zkopirovaného zak čísla do právě vybraných buněk
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())

rem nazev2 = InputBox("Zadejte název souboru exportu pro načtení ko,eu,doKterý bude uložen na C:\" ,,"Pemic")

Rem uložení sešitu jako pemic
dim args1(2) as new com.sun.star.beans.PropertyValue
 args1(0).Name = "URL"
 args1(0).Value = "file:///"+x+"pemic.csv"
 args1(1).Name = "FilterName"
 args1(1).Value = "Text - txt - csv (StarCalc)"
 args1(2).Name = "FilterOptions"
 args1(2).Value = "59,34,33,1,,0,false,true,true,false"
 dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())    
    
    
    
    
    
    
    
    
    
Rem až sem to funguje pak se spustí druhý dialog a už to právě vázne na tom zobrazení tlačítek volby   
Dialog1Show
Rem a tady bych teoreticky předpokládal zbytek kodu
End Sub

#4 Calc » Formulář - respektive Dialog » 16. 10. 2018 09:14:57

max2005
Odpovědí: 6

Zdravím

prosím o radu vytvořil jsem nově dialog jsou zde zaškrtávací ltačítka (pro náš účel stačí jedno jediné) a 2x tlačítko volby, která by při načtení formuláře byla skrytá. Rád bych aby při výběru zaškrtávacího políčka se obě tlačítka volby zobrazila.

Bohužel mi to nefunguje. Mám nastaveno že při změně hodnoty zaškrtávacího tlačítka se spustí makro

Rem makro voláno při změně zaškrtávacího tlačítka
Sub policko
Dim dlg As Object
Dim pole As Object


 DialogLibraries.  LoadLibrary ( "Standard" )
      dlg = CreateUnoDialog (DialogLibraries.Standard.getByName ("Dialog1"))
      pole = dlg.  getControl ( "volba1" ) 
      pole.Visible = True

Rem dalším pokusem byl následující kod ale ani ten nepřinesl výsledky
Rem a taktéž nefunguje
Rem následující 2 řádky původně removány nebily ale nefunguje to tak ani tak.
   rem DialogLibraries.LoadLibrary("Standard")
   rem  dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )


Rem následující kod nic nenačte respektive se provede ale načte pouze 0 bez ohledu na to jestli je pole vybráno nebo ne
a=dlg.model.Euromedia.state 
b=dlg.model.Kosmas.state
c=dlg.model.Pemic.State
d=dlg.model.Dobrovsky.State



někde tuším v nize o makrech v openoffice od Pastierika jsem tuším někde našel
dlg.model.OptionButton1.enabled = true 'nebo false ale ať je skrytý v úvodu nebo obráceně nic to nedělá

end sub

Ale ať se snažim jak chci tak to nejde.
Předem děkuji za radu Max

#5 Re: Calc » InsertSheetFromFile » 16. 10. 2018 08:15:59

Narazil jsem na problem vládání těch listu funguje to je super použil jsem to i na vložení prvního listu na kterém se pak provádí upravy než se vyexportuje dodavatelům jenže list se sice vloži používám..

Sub Dialog2Show
Dim dlg As Object
Dim Cesta As Object
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")


DialogLibraries.LoadLibrary("Standard")
dlg = CreateUnoDialog( DialogLibraries.Standard.Dialog2 )
dlg.Execute()

x = dlg.model.Cesta.text
Rem dlg.dispose() - toto jsem zkusil přidat, ale to nepomohlo 
cUr_zasoby = x+"Zasoby1.csv"
ImportCSVPrepisList(cUr_zasoby , "Zasoby")
Rem přepnití se na list zásoby
dim vzoreck(0) as new com.sun.star.beans.PropertyValue
vzoreck(0).Name = "Nr"
vzoreck(0).Value = "Zasoby"
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, vzoreck())
..
..
End Sub

Sub ImportCSVPrepisList(ByVal cUrl as string, ByVal sList as string)
Dim oDoc
oDoc = ThisComponent
cFO = "59,,0,1,,1033,false,true"
'cFO = "59,[1. posice separátor] nyní středník (59), ale nejčastěji 44 (obyčejná čárka) 
'cFO = "59,,[2. pozice oddělovač textu] nyní prázdný, ale často uvozovky jednoduché (39), nebo dvojité (147) 
'Viz odkaz dole. Když to nebude fungovat musíte laborovat, ale myslím že to bude chodit bez úprav
cFN = "Text - txt - csv (StarCalc)"
    Mysh = ThisComponent.getSheets()
    if not Mysh.hasByName(sList) then Mysh.InsertNewByName(sList, 0)
    sh = Mysh.getByName(sList)
    sh.link(cUrl, sList, cFN, cFO, com.sun.star.sheet.SheetLinkMode.VALUE)
End Sub

Ale nevloží se aktivní čož jsem sice myslel že není potřeby vždyť ho mohu kdykoli vybrat jenže to nejde v calcu s ním normálně mohu pracovat list tam skutečně je ale makro ho prostě nevybere a to ani když vyskočím uplne z formuláře a použiji jiné makro.

Zkusil jsem použít i

oList = thisComponent.sheets.getByName("Zasoby")
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, oList())

ale to hodilo chybu BASIC - chyba při běhu.
Vyskytla se výjimka
Type: com.sun.star.lang.IllegalArgumentException
Message: cannot coerce argument type during corereflection call:
arg no.: 4 expected: "[]com.sun.star.beans.PropertyValue" actual: "void"

Někde sem musel udělat chybu, ale netuším kde.

Předem díky za pomoc.
Max

#6 Re: Calc » InsertSheetFromFile » 9. 10. 2018 20:10:43

Aha už jsem na to možná přišel to se asi dělá v dialogových oknech no zkusím to.

Max

#7 Re: Calc » InsertSheetFromFile » 9. 10. 2018 19:24:10

Netušim jestli se obrázek zobrazí tak je dole když tak jen zkopírovaný odkaz na uložto.

Ty nespecifikované podmínky co mě postupně napadli jsou jen díky tomu, že puvodní postupné vkládání se vždy zeptalo a mě by nenapadlo že by to šlo taaak jednoduše smile takže pak postupně přidávám vždy to tvořím za běhu a dodělávám postupně nové a nové věci smile

Formulář je vytvořen tak že jakmile zaškrtunu Dobrovský tak se zobrazí volba jestli chci importovat soubor nebo to chci vložit ze schránky bohužel tento dodavatel neustále mění výslený soubor buď si ho musím zkopírovat či si ho tvořím na 2x a to pak z toho vznikne soubor. Bohužel na začlenění jak se to kurna jmenuje feedu který dokáže komunikovat s inshopem a tím aktualizovat online sklady nemáme navíc to samé zboží odebíráme od vícero dodavatelů a každý dodavatel vychrlí jiný soubor s eaný které nemá ty se porovnají s tím co jsme vyexportovali z pohody a výsledek je ty které již nemají odbyt to je jedninný (tedy alespoň jediný co nás napad) způsob jak jednoduše aktualizovat naše sklady.

Excel formulář
https://uloz.to/!lpC5ICGn9DcK/formular-png

Díky Max

#8 Re: Calc » InsertSheetFromFile » 7. 10. 2018 20:33:35

neutr napsal(a)

Tak změna plánu otestujte tohle :
   Něco se pokazilo v plánu takže jsem při čekání testoval ale nejspíš se plán jen posouvá tak raději posílám první pokus. U mne to funguje. Udělal jsem jen volací makro a bez úprav mi to chodí.


     Ještě detail. Jsou to odkazy. Podívejte se na volbu ÚPRAVY > ODKAZY NA EXTERNÍ SOUBORY. Takže odkazy lze rozpojit, ale když tam budou nové soubory se stejným jménem tak je vše v pohodě. Můžete také opakovat propojení.


Mnohokráte děkuji, problém je vyřešen. Koukal jsem již dřív a zkoušel a funguje to bez chyby jen sem minule nějak přehlédl ty odkazy a tak jsem dnes pátral a nevypátral v úpravách calcu jsou pouze šedivě odkazy a v makrech nic podobného a sic sem projel narychlo i ostatní nabídky nic jsem nenašel. Mimochodem se mi líbí že makro nehodí chybu když ten sešit nenajde prostě vloží list s textem bla bla něco... Sic neumím udělat podmínku že když neexistuje tak ho nevkládej a hodnotu celkem_pocet_dodavatelu poniž o jeden, ale jsem to schopen nacpat do makra až po vložení listu těžkopádné ale jistě to půjde a poté chci vytvořit (mimochodem myslel jsem si, že v libreoffice jde vytvořit okno formuláře takové jako se v Ecelu dělá ve VBA, ale nenašel jsem to) formulář zatím je jen v sešitě, kde mu zatržítkama vyberu které dodavatele chci vložit. Tuto podmínku jsme tuším schopen vložit. Byť jistě mnohem krkolomněji než profík smile
Takže návrhům se nebráním.

Prozatím všem děkuji za odpovědi.

Max

#9 Re: Calc » InsertSheetFromFile » 3. 10. 2018 07:44:00

Zdravíčko,

máte pravdu zbytečné otázky nemám moc rád, nicméně beru dotaz jako opodstatněný. Jedná se o sešit Zasoby.odt který vždy při spuštění makra tedy ve výchozím stavu bude obsahovat jeden list s názvem vysledek a kde po dokončení makra bude po dohromady 6 listu. Makru je úplně jedno jestli se vložený list vloží před nebo za. Taktéž je mu jedno jaký bude mít název následně po vložení list přejmenuje (pokud by to však šlo parametrem odpadlo by alespoň pár řádků kódu). Nejprve vloží jeden list přejmenuje na Zasoby a poté s ním provede pár úprav a sešit uloží jako csv (samozřejmě po otevření právě uloženého csv bude mít už jen jeden list původně aktivní, ale vzhledem k tomu že sešit nezavírám má v současné chvíli 2 listy) dále provede další úpravy a uloží opět jako jiné csv. Tyto 2 soubory proženu externími aplikacemi a ty mi vychrlí prozatím 4 sešity csv. Ty já opět jeden po druhém importují do stále otevřeného sešitu s původním názvem Zasoby.odt. Tim musím provést nejmenně 16 kliknutí aby operace byla zdárně dokončena. Pokaždé právě vložený list přejmenuje na požadovaný název.

Poté všechny právě vložené listy porovná a zapíše do prvotně importovaného listu Zasoby pomocí příkazu Countif kde každý ze 4 listu má vlastní sloupeček výsledek je buď 1(nelze objednat) nebo 0(lze objednat) tyto hodnoty se pak po řádcích sečtou seřadí vyberou se pouze ty hodnoty co mají výsledek 4 opět countif a překopírují do listu vysledek přidají ještě nějaké doplňující informace a tento aktivní list se uloží jako dbf.

Ty 4 sešity budou vždy na stejném místě se stejným názvem starý bude vždy přepsán.

Pokud jde nějak skrytě otevřít všechny 4 sešity a poté jednotlivě rozkopírovat to mi nevadí prostě aby to vyžadovalo co nejméně uživatelského přístupu. Soubor vlastně porovnává zboží, které lze ještě objednat či nikoli u jednoho ze 4 dodavatelů tedy výsledek 4 znamená, že nejde objednat ani u jednoho a tedy zboží již nemá odbyt.

Řekněme, že sešity od dodavatelů mají názvy dodavatel1, dodavatel 2,.... a listy po přejmenování v1, v2,... .

Jinak jsem právě zkoušel to udělat to formou těch parametrů nicméně vlastně to byla jen kosmetická náhražka neboť stejně sem soubor musel vybrat a stejně sem mu musel zvolit kódování dohromady opět 4 kliknutí smile. Všechny mají kódování windows 1250 latin 2.

#10 Calc » InsertSheetFromFile » 2. 10. 2018 21:44:12

max2005
Odpovědí: 14

Zdravím,

prosím o radu mám sešit do něhož chci vložit list csv ze souboru.

prozatím k tomu používám tento příkaz

 dispatcher.executeDispatch(document, ".uno:InsertSheetFromFile", "", 0, Array()) 

nicméně musím soubor vybrat a několikrát potvrdit.

Tento kód vzešel ze záznamu makra a víc v záznamu nebylo.

Protože takto vkládám postupně více listů je to dosti otravné.
Potřeboval bych jestli tento příkaz má nějaké parametry, kterými bych případně obešel neustále dotazovaní který soubor chci otevřít a  jaké kodování má použít bla bla bla.....

Pokaždé to budou ty samé soubory na stejném místě taktéž stejně kódované.

Existuje nějaký způsob jak vkládat soubor do listu sešitu bezobslužně?

Předem děkuji za reakce

Max

#11 Re: Další součásti » Makro R1C1 Vyřešeno - Nově knihovna Moje makra » 16. 7. 2017 22:27:15

Díky

nakonec jsem použil příkaz z VBA: ActiveSheet.Cells(Radek, hx). Chvíli jsem si myslel, že zmíněný příkaz funguje i bez Option VBASupport 1 což jsem sem chtěl s radostí napsat, ale to jsem se krutě zmílil smile po smazání Option VBASupport 1 to přestalo fungovat. sad

S příkazem to však jede tak aspoň tak.

Radek je generovanej cyklem, sl je v tomto případě určovan podmínkou IF dle zadané podmínky samozřejmě hx je míneno třeba h1-h100.

Jinak jsem díky Vašemu přikazu našel něco asi velmi podobného čím se po listu pohybovat: Cell = thisComponent.Sheets.getByIndex(0).getCellByPosition(0,0) a příkaz Cell.formula = "=něco(úsek s notací R3C3)" mi pak vlastně hodnotu vloží do buňky fajn to zkusím schválně přepracovat.

A teď už mi zbývá jen jak to vše dostat do, jak, že knihovny? moje makra. Tak nějak si myslím že by mu mohlo stačit že mu nějak žeknu že má pracovat v otevřeném sešitu xyz a na sešitu zyx, ale to se mi prostě nepodařilo ale klidně otázku můžu dát pod jiný dotaz.

#12 Další součásti » Makro R1C1 Vyřešeno - Nově knihovna Moje makra » 11. 7. 2017 05:59:03

max2005
Odpovědí: 3

Zdravím všechny,

prosím kdo zná příkazy makra k pohybu v listu pomocí R1C1

dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

Jde to nějak pomocí tohoto, či je na to uplně jiný?

Ať sem hledal jak sem hledat nic užitečného jsem nenašel

vlastně jediné co jsem našel je INDIRECT("R2C3") jenže to je podle mě jen něco jako vzoreček

pak jsem také zde na webu v nějakém článku našel kód

doc = thisComponent
list = doc.sheets(0)
sloupce = list.columns
sloupec1 = sloupce.getByIndex(0)
radky = list.rows
radek1 = radky.getByIndex(0)

pomocí kterého by to možná také šlo, ale nebyl jsem schopný to zrealizovat.

Předem díky Max

#13 Re: Calc » Makro v calc nové makro » 7. 7. 2017 22:54:04

Tak po delší odmlce jsem konečně dal dohormady makro co tak nějak funguje smile

a k neutrovi i moje čtyčleté dítě co dítě i debil by pochopil že ve formulaci nejsem.. úplný začátečník je asi překlep a má být jsme..úplný začátečník. (mimochodm jste ze své formulace vypustil slovo bohužel, které jsem ve větě měl takže pak to dalším můžou vidět v uplně jiném světle)

a mimochodem dobrá je vaše věta  ---Asi by bylo lepší co nejkratším způsobem odkázat na zdroj, nebo vzor který existuje a to tak že vítězí filozofie "pochop to jak umíš" - nauč se základy nebo nech být.

protože to ani v jednom z vašich přispěvku neplatí , vlastně ono to neplatí snad ani na jednom z vašich přispěvku zde na foru jak sem je pročítal.tipnul bych jen pro to abyste se cítil dobrej. Ale to nic jak jste sám řek všichi nejsou stejní že smile

ke všemu dávate milion úplně zbytečných otázek protože to nejste schopnej pochopit ale to možná přoto že jak sám tvrdíte---- Tak jsem šel na pivo. Na první křižovatce jsem se musel zastavit a nejednou jsem věděl ---- Kolikrát na to pivo jdete 30x deně? To už bych pak nic nechápal to je fakt.
A nebo je to tim abyste jste napady ostatních mohl dopilovat a pak nějde vesele vydavat za své.

No nic děcka jsou vzhuru tak se jdu raději věnova jim než ztracet čas Vami užijte si tu vaši hloupost možná že v hospodě jste tím ohromující.



ale protože nikdo nereaguje tak to smáznul.
Nazdar

#15 Re: Calc » Makro v calc nové makro » 12. 6. 2017 22:38:50

Tak hned na úvod proč se otevírá respektive nabízí otevření souboru?

Nicméně ve spustit makro jsem zkusil spustit všechna makra ruzně po sobě, ale očekávaný výsledek se nedostavil smile.

Nabídne se otevření souboru, vyberu soubor něco xls a nedeje se nic sad co mám spustit?

Jak se ale řekl monentálně v Pohodě otevřu faktury v calcu v té chvíli bych chtěl z nabídky moje makra spustit makro, které provede již probírané změny a uloží popřípadě se i zavře. Zjistil jsem že soubor který se z pohody v calcu otevýrá se načítá do složky temp.

Zkoušel jsem však z exportu adres ods. načíst do zásilkovny vadil mu číselný formát a pak i zatrhával možnost přistupno 18+. Ale jinak dobrý viz náhled obr

Max

#16 Re: Calc » Makro v calc nové makro » 11. 6. 2017 13:40:02

pro kabi,

ano toto makro řeší to samé jen díky tomu že už nemusím nic otvírat a následně se přepínat je dle mého jednodušší byť jsou tam přidány nové funkce které v původním sice nebyli, ale měli být to byla už jen má zapomětlivost. Ale onehdy jsem usoudil, že to pro vyzkoušení není až tak potřeba.

Četl jsem samozřejmě každý přispěvek a samozřejmě je i zkoušel, ale ptrotože mi to nedělalo to co to dělat dle popisu mělo dělat tak se se stále vyptával abych přišel na kloub tomu proč vám to jistě funguje a mě ne.

S tim souvisí to, že nemam rád když dělám něco, čemu vlastně tak uplně nerozumím, protže když nastane problém pak absolutně netuším co s tím. Proto to chci pochopit, mám za to že nemusím být programátor profesionál, abych si dokázal naprogramovat nějaké jednoduché makra. Zjištuji však že ač jsou to velmi podobné produkty calc je v tomto ohledu "stupidnější" než excel ať se pokusím o co chci furt to na mě řve hlášku buď BASIC - chyba v syntaxi.
Syntaktická chyba. nebo něco jako procedura není definována a tečka. Samé dim smile tomu se snad musí říct že oheň pálí. Neberte to jako že produkt uřážim. To ne díky již dost podobné propracovanosti jako je excel se s tím to produktem velmi dobře pracuje jen ta makra hodl pokulhávají. Možná to však bude tím že tento BASIC neovládám, nepředpokládál sem že v tom bude takový rozdíl. Doprvace má v pohodě vlastní agendu, nicméně jak jsem napsal výše nejde tam definovat dlouhý název takže lecky i 60ti znakový nazev tam prostě nevleze. A pamatovat si pobočku podle ID je neraálné. Z eshopu se nám do pohodi importuje jen název pobočky a to jen jako popis do položek faktur. Nicméně jsem to prozatím vyřešil tou zakazkou. vyz výše.

Max

#17 Re: Calc » Makro v calc nové makro » 11. 6. 2017 13:15:12

pro neutr -

ad 1)

Omlouvám se v excelu sem apostrov oběvují prakticky ve všech buňkách krom celkem v calcu se oběvují jen u čiselných hodnot máte pravda je to jen špatným formátem ve vysledném textu apostrofi nejsou a to nejsou makrem řešeny. Takže s tím se dělat nic nemusí.

ad 2) přiznám se že bílé znaky nevidim až na pár vyjímek ani v exelu ani calcu ale asi bych to neřešil protože i kbyby tam byly a byli vloženy k textu mezy oddělující čárky tak zásilkovna píše:
na všechna pole bude před zpracováním aplikována funkce trim(), tj. budou odstraněny bílé znaky zleva a zprava., Takže býlimi znaky na začátku a konci bych neřešil, alespoň pro začátek, než se to ověří pak zkouškou importu do zásilkovny. Puvodně šlo přímo o funkci v pohodě export do.... já vybýral ecel 97-2000. Nyní to netvořím přes export, ale přes funkci otevřít v excelu. Respektive v práci mi to samozřejmě otevře v calcu. Proto jsem potřeboval aby makto bylo spustitejné z moje makra neboť se domnívám, že pak to půjde opakovaně použit v nově a nově vygenerovaném souboru. Po otevření už jen kliknu co já vím v nástrojové liště na nějaké tlačitko, pokud to jde to provede makro a uloži soubor popřípadě i zavřa a já už jen soubor načtu..

ad 4) Dopravce bude vždy jen zásilkovna v pohodě není problém vyfiltrovat pouze zásilkovnu respektive v pohodě aplikujeme takové filtry že z nich zbude jen to co potřebujeme exportovat do zasilkovny pro danou várku. Zde se ovšem dopravce objevuje jen jako informace samotné id jsem teď vyřešil tak, že v kolonce zakázka (já vím nic to s dopravcem nemá společného, ale do ničeho jiného sse mi nepovedlo nacpat ony nekutečně dlouhé texty adres zásilkoven. S tím že mohu do toho vložit ono ID takže odpadlo to vyhledávání zásilkovny.) Není to uplně nejšťastnější řešení, ale jinak lepe se mi to nepovedlo. V samotné agendě dopravce tot bohužel zapsat nejde je to tam omezeno asi jen 30 znaky to se mi tam prostě nevejde:(.

ad 6) Pohoda při otevření v calcu či excelu otevírá všechny sloupce které mám v tu chvíli v pohodě zobrazeny adresa jako taková je jen pro naší potřebu, zásilkovna ji nepotřebuje pro ní je nejduležitější ono id zasilkovny. Sic je tedy ve sloupcích adresa ale ve výsledku stejně není.

Tak snad sem vysvětli co se mohlo zdát problemem.
Díky Max

#18 Re: Calc » Makro v calc nové makro » 9. 6. 2017 21:52:48

Panové pánové kam jsem se to dostali, od řešení problemu až skoro k osobním sporum smile Za obě makra jsem samozřejmě rád ale jsou mi neuražte se pánové k ničemu, když je neumím správně použít respektive naznačoval jsem že mi nejde krokováni to však pro svou vlastni nauku potřebuji jinak to správně prostě nepochopim i když to mám dopodrobna popsáno tím pádem nejsem kod schopný doupravit. Jistě znáte situace, že začnete řešit nějaký problem a postupně zjištujete že lze problem řešit tak či onak, já diky tomu zjistil že jde vše vygenerovat přimo do calcu temeř v pořadí jaké potřebuji, nicméně přesto potřebuji jakési makro které pořadí přehází a vygeneruje to co potřebuji ale protože mi při krokováni obě makra hází chybu a navic to nijak nespecifikuje sem z toho vedle. Pokus si zkopiruji jen část makra, která si myslím že by měla fungovat tak to na mě řve že nějakou chybu.

No zkrátim to pokud máte pocit že již zdržuji váš čas tak klidně označte vlíkno za uzavřené nicméně pro mě to uzavřené není mám sice makro, které něco dělá, ale já nemám paru co a jak to změním.

Takže pokud máte ještě zájem pomoci a tim třeba i dalším začínajícím uživatelum calcu.
zde je poslední verze toho co jsem schopen vyexportovat. Makro musí odbourat apostrof (nevím proč se tam vkladá) poté rozdělit jmeno dále vyhodnotit dobírku dále zasilkovnu a vše spojit do jednoho tak jak se to mělo udělat minule schválně udělám makro v exelu aby to bylo možná jednodušší. Dodám snad běhěm zítřka.

Max

Tak toto je ono makro v excelu to chodí. A potřebuji aby se dalo spustit z moje makra.

Sub Makro3()
'
' Makro3 Makro
' Makro zaznamenané 9.6.2017, Ja
'

'
        Columns("C:C").Select
    Selection.Insert Shift:=xlToLeft
    Columns("B:B").Select
    Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
        TextQualifier:=xlSingleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Radek = 2
    
ActiveSheet.Range("A2").Select
co = ActiveCell.Value
Do Until co = ""

ActiveSheet.Cells(Radek, 2).Select
jmeno = ActiveCell.Value
ActiveSheet.Cells(Radek, 3).Select
prijmeni = ActiveCell.Value
ActiveSheet.Cells(Radek, 4).Select
firma = ActiveCell.Value
ActiveSheet.Cells(Radek, 5).Select
Email = ActiveCell.Value
ActiveSheet.Cells(Radek, 6).Select
telefon = ActiveCell.Value
ActiveSheet.Cells(Radek, 7).Select
dobirka = ActiveCell.Value
ActiveSheet.Cells(Radek, 8).Select
hodnota_zasilky = ActiveCell.Value
ActiveSheet.Cells(Radek, 9).Select
id_zasilkovny = ActiveCell.Value
obchod = "Stěstíčko"
    
If dobirka = "Dobírkou" Then
ActiveSheet.Cells(Radek, 8).Select
dobirka = ActiveCell.Value
Else
dobirka = ""
End If

    Range("b1000").Select
 

 ActiveCell.Offset(Radek, 0).Select
 bunka = co & "," & jmeno & "," & prijmeni & "," & firma & "," & Email & "," & telefon & "," & dobirka & "," & hodnota_zasilky & "," & id_zasilkovny & "," & obchod
ActiveCell.FormulaR1C1 = bunka
 

ActiveSheet.Cells(Radek + 1, 1).Select
co = ActiveCell.Value
Radek = Radek + 1
Loop
Rows("1:1001").Select
    Selection.Delete Shift:=xlUp
ActiveWorkbook.SaveAs "C:\Documents and Settings\Max\Plocha\export\sesit1.csv"
End Sub

#19 Re: Calc » Makro v calc nové makro » 8. 6. 2017 21:51:44

kabi napsal(a)

abc↵bc↵bc↵


pokud to s tím naprogramováním převodníku z Pohody do Zásilkovny myslíte vážně a být na vašem místě, neřešil bych ten převod z Pohody (pořadí polí). Máte s tím potíže, psal jste, že s tím uživatelé možná budou mít potíže a myslím si, že stejně asi nedostanete ta data z Pohody úplně tip-top a budete muset spustit nějakou konverzi, abyste vyhověl importnímu formátu pro Zásilkovnu. V předchozích příspěvcích máte návod, jak na to. S přehozením pořadí dat v tom csv jste si již poradil v tom prvním makru, tak by to neměl být problém upravit z libovolného vstupního souboru. Já bych se držel té varianty VBA makra. Pro mě je "čitelnější", předpokládám, že pro vás taky (psal jste, že s VBA máte určité zkušenosti), navíc to makro je kompatibilní s MSOffice - můžete ho kdykoliv spustit v Excelu. Tím vás nechci odrazovat od řešení, které vám poslal neutr, ale pokud nemáte se StarBasicem zkušenosti, bude to pro vás jednodušší.


No jo to jo jenže v práci nemáme exel ale pouce calc proto ta patalie s převodem makra z VBA do calcu.. Jinak bych toto samozřejmě neřešil.

Max

#20 Re: Calc » Makro v calc nové makro » 7. 6. 2017 21:49:29

neutr napsal(a)

ne : txt = txt & další. Tím se udělá navázání na původní obsah. Je tam jen jeden trik. Posledním znakem řádku je & vbCrLf  - což je zalomení na další řádek. Tím se vytváří nový řádek "jakoby tabulky" textu.
     Já jsem to řešil skutečnou tabulkou které se říká array. Tím jsem mohl načíst zdroj a vynechat "buňky" které bych dohledával následně z jiného zdroje podle jména. To obnáší nejprve vytvoření celé tabulky (dvojrozměrná array) - tím získá rozměry X*Y plus údaje z "VF_1" (Cyklus Do .. Loop pro řádky, a v něm zapuštěný cyklus For ..Next pro sloupce). Následně se znovu aktualizovala tato array nad adresářem (pomocí vnořených cyků For i = ... For j = .... ,kód hledání IF , kód zápisu, Next j .. Next i).
     Tento druhý systém není potřeba pokud umíte vstup VF_1 udělat (vyexportovat) tak jak potřebuje Zásilkovna.

Aha takže pokud txt = a
jmeno = b
prijmeni = c tak txt=txt & jmeno & prijemní & vbCrLf bude abc↵
další krok už to bude v případě stejných hodnot abcbc↵
a další abcbcbc↵ .......

jen dotaz to skutečně posléze vloží prazdný řádek tebo to bere jen jako tvrdé zalomení ro si musím ověřit.
Ale díky uý sem pochopil princip toho vkládání.
Max

#21 Re: Calc » Makro v calc nové makro » 7. 6. 2017 21:12:00

neutr napsal(a)

Tento postup asi autor opustil, nebo opustí. Právě chtěl sledovat to "hop sem" a "hop tam" ze sešitu na sešit jen proto aby doladil co se kam načítá. Nyní to vypadá že umí přizpůsobit výstup z programu Pohoda tak aby sloupce VF_1 byly ve správném pořadí pro Zásilkovnu.
    Takže může udělat přesně to, že vygeneruje hned soubor bez skákání které chtěl ladit bez krokování. Pak už krokování zřejmě opustí. Ono se dá ladit respektive krokovat různě. Já nejraději pomocí PRINT které postavím místo záložek (napíšu do nich text kolikátý je to krok a podobně). Je to při zápisu rychlejší a mohu takových kontrolních bodů udělat mnoho desítek za sebou. Horší je to když doladím a chci je smazat - ale i to umím rychle.


Pro autora jsem udělal popis aby se lépe oriantoval. Snad mu to pomůže PopisMakraMain TXT nebo přímo basic který načte do souboru PopisMakraMain BAS


     Já sice s VB nepracuji, ale dělal jsem něco málo kdysi v Corelu. Oni to jsou celkem dost příbuzné jazyky, takže se dá celkem dobře orientovat.


Tak s tím VF se to má tak přivedl jste mě na myšlenku změny sloupcu provedl sem pár úprav a výsledný soubor nakonec odpovídá vstupu pro zásilkovnu jen tam chybý štěstíčko ale to už je detail.Nicméně Si budu muset zvykat na jiné rozmístění sloupcu v pohodě a to zase nevím jestli projde v práci smile
Ale ještě to prozkoumám doma mám už smulu ve zkušební verzy jsem již vyčerpal počet pokusů pro export takže už budu testovat jen v práci sad

Max

#22 Re: Calc » Makro v calc nové makro » 7. 6. 2017 19:52:06

kabi napsal(a)

Vaše původní makro funguje tak, že zpracovává v cyklu jednotlivé řádky ze zdrojového souboru a v rámci cyklu se přepíná do druhého sešitu, kam vkládá ta data ze zpracovávaného řádku v požadovaném pořadí pro csv soubor. To zajišťují příkazy Windows("sesit1.csv").Activate a Windows("VF_1.xls").Activate.
Já v makru pracuji pouze ve zdrojovém souboru, kdy v cyklu pouze přidávám data do textové proměnné txt (proto to první txt při vytváření - příp. si ho zkuste odmazat, ať vidíte, co to udělá) a po ukončení cyklu přímo vytvářím csv soubor. Tedy nepřepínám se do jiného sešitu.
Nevím, jak jtse zběhlý v krokování, pro získání hodnot je v OO/LO potřeba použít Kukátko.

Ano to je pravda ve VBA pracuji přesně takto hop sem hop tam pravda lepe to neumím i když sem to chtěl řešit podobně jako v calcu, že se každý řádek načte do nějaké hodnoty, ale neumím to aby se mi to v každem ciklu zase nepřemázlo.

Možná právě proto nechápu co se děje s vaší hodnotou TXT chápu že cyklu se do proměné txt přidává hodnota, ale pak se v dalším cyklu zase přepíše nově načtenou hodnotou ne?

Max

#23 Re: Calc » Makro v calc nové makro » 6. 6. 2017 23:27:40

Tak vytvořil jsem nový export z pohody v našem případě to musí být vydané faktury z mnoha ruzných důvodů, ale to je jedno duležité však je že zkoušením a vypnutím či zapnutím slopcu určených k exportu se náhle změnilo pořadí sloupců, Ale opakovaným zkoušením (bohužel mi doma kde to zkouším na zkušební verzi zbývají už jen 2 pokusy) toto pořadí již se ustálilo. Otázka je co to udělá až to pak nastavím v práci. Ale to bych snad už dokázal opravit. Nově vytvořený export s názvem FV_5 jsem doplnil o listy který znázorňují jednotlivé pokusi importu do zasilkovny, kdy jsem zjistil, že jejich popis není zcela přesný a funguje to i bez verze 2 a prvních 2 prázdných řádků. Je zde i přidán číselník pro vyhodnocení cílové pobočky a taktež list z cvs-ukázky od neutra s okomentovanými sloupci, taktež je na tomto listě poslední ukazka exportu z pohody.

Pro import do zasilkovny mi stačí 2-11 sloupec kdy 11 sloupec je stesticko zbylích 10 se tahá z pohody tedy přes onen soubor VF..

Co se týče názvu pro zásilkovnu je to šumák sežere to cokoli. Co se týče kontroli znaků a podobně je to zbytečné v případě že se zasilkovně případná hodnota nebude líbit naimportuje jí to a hodnotu označí červeně a dokud to neopravím nepustí mě to dál. Opravit to však v zásilkovně je to asi jednodušší než složitě programovat makro. Dále sem si ověřil, že bílé znaky jsou mu taktéž šumák prostě je ignoruje takže opět zbytečné smile Přiznám se že jsem moc nepochopil onen přepis adres do druhého listu?

Databázi si nijak vytvařet nemusím všachny údaje mám v pohodě a kdykoli je zpětně vyexportovat a mám za to že cvs soubor tvořený makrem stejně více listu mít nemůže.

Teď k oběma z Vás díky za kody následný kod sem zkopíroval a okomentoval jak chápu co to dělá, a dělám to proto že bych se Vás chtěl zeptat v kterém okamžiku makro vloží vygenerovanou hodnotu do nového sešitu. To mi totiž stále uniká a protože se mi nedaří to korkování tak musím takto:)

Option VBASupport 1
Sub Main

Dim i, pocetradku  'definuje že existují hodnoty i a pocetradku
Dim txt, Soub, Soub2 As String 'definuje že tyto hodnoty jsou textové řetezce
Dim fs, f As Object ' že jsou to nějaké objekty - nechápu
Dim sesit as WorkBook ' že sešit je vlastně workbook
Dim list as String ' že list je textový řetezec

set sesit = Workbooks.Open("C:\Documents and Settings\Max\Plocha\export\VF_1.xls") ' nastaví že sesit je soubor VF_1
list = "VF_1" ' nastaví že list má název VF_1
pocetradku = sesit.Sheets(list).cells(2).currentregion.rows.count ' zpočítá počet řádků na listu s nastaveným názvem v předchozím kroku
txt="" ' nastaví txt na prázdnou hodnotu
radek = 2 'nastaví radek na hodnotu 2

For i = radek To pocetradku ' spostí cyklus opakování od 2 do spočtené hodnoty početradku

co = sesit.Sheets(list).Cells(i, 10).Value nastavý hodnotu z buňky v řádku 2 a následné 3 .. až do počtu řádku a to samé následující hodnoty
jmeno = sesit.Sheets(list).Cells(i, 2).Value
prijmeni = sesit.Sheets(list).Cells(i, 3).Value
firma = sesit.Sheets(list).Cells(i, 1).Value
email = sesit.Sheets(list).Cells(i, 11).Value
telefon = sesit.Sheets(list).Cells(i, 12).Value
dobirka = sesit.Sheets(list).Cells(i, 9).Value
hodnota_zasilky = sesit.Sheets(list).Cells(i, 4).Value
id_zasilkovny = sesit.Sheets(list).Cells(i, 6).Value
obchod = "Stěstíčko" 'nastaví obchod na Stesticko

txt = txt & co & "," & jmeno & "," & prijmeni & "," & firma & "," & email & "," & telefon & "," & dobirka & "," & hodnota_zasilky & "," & id_zasilkovny & "," & obchod & vbCrLf ' vytvoří z výše nastavených hodnot jednu s názvem txt - jen nevím proč je za rovnítkemto první txt
Next i 'skočí na další opakování ciklu

Soub = "C:\Documents and Settings\Max\Plocha\export\sesit1.csv" 'vytvoří soubor sesit1.cvs?
  Set fs = CreateObject("Scripting.FileSystemObject") 'netuším
  Set f = fs.CreateTextFile(Soub, True, TristateFalse) ' netuším
  f.Write txt ' netuším že by hodnota f byla zapsána do hodnoty txt, ale f je vlastně najký objekt?
  f.Close ' objekt f se zavře, ale netuším jaký objekt
sesit.Close 'soubor vf_1 se zavře

End Sub

Díky všem za pomoc a rady Max

P.S. přiznám se že jsem teprve teď našel ono makro HopDoKodu z návodu jsem nepochopil kde ho mám spustit a teprve teď se mi ho povedlo najít  mezy makry takže prozkoumám příště díky

#24 Re: Calc » Makro v calc nové makro » 6. 6. 2017 07:30:31

Pro neutr návod na vzor sešitu ze zásilkovnyje tam ke stažení i vzorový soubor,

možná sem pak někde udělal chybu, ale pochopil sem to tak že data mají začínat v A3 a v A1 má být napsáno verze 2 to ovšem pak následně nefungovalo a zásilkovna psala že buňka A1 musí být prázdná, když sem to pak smazal vytvořilo to v iportu zásilek 2 prázdné zásilky - posunul sem tedy obsah nahoru o 2 řádky tedy do B1 a ejhle vše fungovalo. Pohoda to vyexportuje i s hlavičkou ta se do exportu však neimportuje. Z toho VF_1 se tedy iportují již jen data a opět pokud sem to pochopil správně mají být odděleny čárkou proto ta čárka mezi hodnotama. A to funguje to sem ověřil. Tedy za předpokladu že prázdné hodnoty jsou nahrazeny " " jako je například ona hodnota dobírky v případě že je placeno příkazem. Díky za soubor mrknu na to zatím diky moc všem.

#25 Re: Calc » Makro v calc nové makro » 5. 6. 2017 09:05:15

Omlouvám se, to mě mohlo napadnout hned vložit sem zdrojový soubor tak tak činím hned zde je export včetně VF_1 heslo je calc.

Eexport adres je soubor s oním makrem nepovedlo se mi ho vložet do Moje makra házelo to pak chybu při otevírání VF_1.

VF_1 je soubor, který bude vždy jiný ten exportuje pohoda jsou to prakticky vyexportované vydané faktury tedy jen ty sloupce, které potřebuji. Z tohoto souboru makro vytvoří soubor který já načtu do online podání v zásilkovně a nemusím to tukat ručně. Bohužel sem ted zjistil že sem špatně nastudoval formát souboru iportovaného do zásilkovny, takže celý vkladaný obsah budu muset začínat nikoli v sloupci a ale b ale už ne v A3 jak sem původně mylsle ale v B1. Taktež v mém kodu chybý ještě podmínka která bude zjišťovat obsah buněk ve sloupci I pokud tam bude příkazem tak místo slova přikazem vloží "", pokud tam však bude dobírkou vloží opět místo slova příkazem částku ze sloupce D odpovidájícího řádku.

Cyklus Do Until co = "" (kde co je číslo objednávky = Variabilní symbol z VF_1) jsem použil je z toho důvodu že jsem nevěděl jak spočítat v jednom příkazu kolik je tam řádků tak abych věděl kolikrát se má cyklus pustit.

Mymochodem asi sem úlnej vůl, ale ať použiji krokování jaké chci tak po otevření sešitu VF_1 (to se otevře v novém samostatném okně) se musím přepnout do makra abych mohl krokovat a pak je vyběr buňky J2 vybýráno v aktivním sešitu jenže v tuto chvíli v je to export adres z kterého se defakto makro spouší a pak nevím jak to přepnout tak aby pokračoval v souboru VF_1. Předpokládám že je to jen prkonita ale nemohu na ní přijít proč mi to krokování nedělá to co by mělo.

Díky Max

Zápatí

Používáme FluxBB