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

#26 Re: Calc » Makro v calc nové makro » 4. 6. 2017 21:36:58

Dobrý den,

Pro kabi děkuji za upravu kodu funguje to s drobnou chybkou, poslední řádek, který se načítá se načte bez toho prvního čísla. A z toho plyne jedna má otázka. Jak mohu zkontrolovat krod krok po kroku pomocí F8? když makro spustím takto tak to funguje pro řádek ActiveSheet.Range("J2").Select jenže, když se otevře sešit VF.. musím se ALT+TAB přepnout abych mohl pokračovat v krokování jernže výše zmíněný příkaz vyvolá okno kde je nahráno makro. Jak se tedy krokuje v calcu?


Díky moc za rady Max

#27 Re: Calc » Makro v calc nové makro » 2. 6. 2017 07:27:55

neutr napsal(a)

Obecně platí že makra VBA v Calcu nefungují ačkoliv nejsou hlášeny jako chyba. Existuje jeden případ kdy to neplatí. Jedná se o makra pro převod mezi Base a Access - rozšíření Access2Base extensions Access2Base. Bývá součástí LibreOffice.
     Přestože existuje hned několik portálů které se věnují konverzi kódu z VisualBasicu do StarBasicu jde jen o vzájemné relace některých rutin. Spíš to umožňuje pochopit rozdílnosti. Nelze to brát doslova jako převod nebo překlad.


     Váš kód z excelu načítá zřejmě nějaký výstup z eshopu nebo něco podobného jako report. Pak už mi to trošku uniká. Spojuje se to zřejmě z několka řádků do jediné buňky a přepisuje do dalšího sešitu. Jde zřejmě o obsluhu ehopu který navazuje na výstupní hlášení portálu a zaznemanává se do seznamů různého typu. Zákaznící, zboží, odesláno, objednat u dodavatelů, reklamovat...... Zde je asi jen jediný vzorový případ podobný se všemi ostatními evidencemi.


     Problém převodu znamená jediné - úplný přepis do StarBasicu. Nicméně je potřebné popsat proces jako schema. Osobně bych musel dohledat co se v kódu vyskytuje jako běžný a mimořádný výraz a co dělá. Mám například dojem že Windows("xyz.xls").Activate nastavuje jako funkce do popředí (pod kurzor) konkrétní sešity ve kterých probíhají procesy kopírování a podobně. Tohle volání sešitů je ve StarBasic složitější ale dalo by se to udělat jako colection aby to bylo podobné s VBA (i kdyý také to může být psaná funkce - nevím).
     Takže raději schematický popis - bude to jen několik řádků :
1 - otevřít adresář ...
2 - najít nějaký sešit zdroje (lze vyhledávat názvy v obsahu složky)..
3 - otevřít sešit zdroje
4 - načíst úseky ze zdroje
5 - vložit do aktuálního dokumetu do úseku ....
6 - uložit jako ...
7 - zavřít zdroj
8 - upravit výstup
9 - uložit a zavřít výstup ++ popřípadě další operace.
     Deklarace buněk jsou maličko odlišné od Excelu a podobně mnoho věcí lze dovodit podle kódu. Například pohyb mezi listy. Proto by Vám pomohli vzory různých volání, zápisů a další věci, Například ten problém "open as hidden" znamená otevření skrytého sešitu ale znamená to že se sešit otevře tak že není vídět na desktopu. Ostatní případy otevírají tak že dokumenty vyskočí na popředí což je často nežádoucí. Má to také ale problém s některými operacemi - například select vyžaduje aby sešit byl viditelný. Jde o operace se schránkou která select využívá - je to dobrý postup ale zrovna tohle dost vadí.


Skoro jste se trefil smile jde o export faktur z Pohody do cvs respektive následný převod do jiného cvs který je schopna importovat zasilkovna pro vygenerování štítku pro zásilky. A to tak že proces je celí uzavřen do cyklu podmínky dokud nebude prázdná buňka. Vezme řadek po řádku a a z daného řádku načte hodnoty a v jiném pořadí je spojí do jedné hodnoty oddělené čarkou do buňky nového sešitu a tak pokračuje dokud není naplněna podmínka.Sic pro pohodu existuje modul ale není zrovna zadarmo smile

A nenašel sem v pohodě způsob jak export upravit tak aby odpovídal našim představám myslím tím pořadí sloupců.

Jinak schema provaděných operací prakticky totožný s tím co exel provádí v současném kodu Přiznávám i toto makro je možná zbytečně kostrbaté ale šel sem cestou, kterou jsem zvladl naprogramovat pravděpodobně by to šlo udělat i mnohem sofistikovaněji.Ale lepe to neumím ani ve VBA. Na ty konverze se zkusím podívat prozatím děkuji za odpovědi.

Max

#28 Calc » Makro v calc nové makro » 1. 6. 2017 22:09:05

max2005
Odpovědí: 40

Dobrý den,

potřebuji poradit jak mám přepsat makro z Excelu do Calcu jedná se mi o makro, které načte data z z jednoho sešitu a vloží je s jistými upravami do jiného sešitu.

Bohužel nejsem v programování maker v Calcu úplný začátečník takže sic jsem tu narazíl na příspěvěk kopírování mezi soubory - makro, ale bohužel z toho moc nechápu proč se sešit musí otevyrat skrytý a taktéž se mi nedaří pochopit v jakém kroku se sešity přepínají a začně makro pracovat v daném sešitu. Je to sami Dim a Args wink


Mé nakro v ecelu je zde:

'Option VBASupport 1
Sub Makro5()
'
' Makro5 Makro
' Makro zaznamenané 28.5.2017, Ja
'

'


    ChDir "C:\Documents and Settings\Max\Plocha\export"
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\Max\Plocha\export\VF_1.xls"
    Radek = 2
    
ActiveSheet.Range("J2").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, 1).Select
firma = ActiveCell.Value
ActiveSheet.Cells(Radek, 11).Select
email = ActiveCell.Value
ActiveSheet.Cells(Radek, 12).Select
telefon = ActiveCell.Value
ActiveSheet.Cells(Radek, 9).Select
dobirka = ActiveCell.Value
ActiveSheet.Cells(Radek, 4).Select
hodnota_zasilky = ActiveCell.Value
ActiveSheet.Cells(Radek, 6).Select
id_zasilkovny = ActiveCell.Value
obchod = "Stěstíčko"
    
If sesit <> 1 Then

 Workbooks.Add
 ActiveWorkbook.SaveAs "C:\Documents and Settings\Max\Plocha\export\sesit1.csv"
sesit = 1
Else
End If

Windows("sesit1.csv").Activate

    Range("A1").Select
 ActiveCell.FormulaR1C1 = "verze 2"

 ActiveCell.Offset(Radek, 0).Select
 bunka = co & "," & jmeno & "," & prijmeni & "," & firma & "," & email & "," & telefon & "," & dobirka & "," & hodnota_zasilky & "," & id_zasilkovny & "," & obchod
ActiveCell.FormulaR1C1 = bunka
 
Windows("VF_1.xls").Activate

ActiveSheet.Cells(Radek + 1, 10).Select
co = ActiveCell.Value
Radek = Radek + 1
Loop
Radek = Radek - 1
Windows("sesit1.csv").Activate
Range("A1").Select
ActiveWorkbook.Save
ActiveWorkbook.Close
Windows("VF_1.xls").Activate
ActiveWorkbook.Close
Windows("export adres.xls").Activate
End Sub 

'Option VBASupport 1 je kod který jsem našel kdesi na forech že by tím mělo být umožněno spouštět makro z exelu v calcu. Makro však stejně nefunguje což jak postupně studuji makra v calcu tak se nedivím smile  Asi budu schopný vybírat buňky přiřazovat jim proměnné, ale nedaří se makru vysvětlit v jakém sešitě má zrovna pracovat.

Předem díky za pomoc s úpravou kodu.
Max

Zápatí

Používáme FluxBB