Škôlka jazyka C

Fórum o programovaní v jazyku C založené 3. januára 2012

Aktuálny čas je 20 Apr 2024, 13:57

Všetky časy sú v GMT + 1 hodina




Vytvoriť novú tému Odpovedať na tému  [ Príspevok: 1 ] 
Autor Správa
 Predmet príspevku: Ako mi Céčko pomohlo v práci.
PoslaťNapísal: 20 Okt 2012, 15:44 
Offline
Stredoškolák
Stredoškolák
Obrázok užívateľa

Registrovaný: 06 Jan 2012, 19:26
Príspevky: 458
Bydlisko: pod Pátrovom
Udelené body: 228 bodov
Získané body: 21 bodov
Bol som stanovený predsedom inventarizačnej komisie na hnuteľný majetok.
V majetku je vyše 2 000 položiek a väčšina z nich má po viac kusoch.
Navyše sú položky rôzne rozčlenené zhruba do 148-ich súčastí.
Teraz to vysvetlím ľudsky. :D
Napríklad:
Ja som jedna súčasť, moja kancelária je druhá súčasť.
Ja mám na karte (položka) - PC, (položka) - tlačiareň, (položka) - scaner.
V mojej kancelárii je (položka) - písací stôl, (položka) - stôl pod PC, (položka) - skriňa atd.

Potreboval som v Exceli 2007 vytvoriť súbor, v ktorom by som mal prehľad o tom, aké položky máme na stave, aké sú súčasti, čo majú na stave jednotlivé súčasti, kontrola či sa skutočnosť rovná tomu čo je na stave a všetko to musí spolupracovať aj po zadaní akejkoľvek zmeny.

Za pomoci jednoduchého makra som vytvoril 148 nových listov očíslovaných od 1 do 148.
(komentáre tu začínajú apostrofom ')
Kód:
Sub VytvorListy()

Dim i As Integer  ' deklarácia premennej typu int

For i = 1 To 148  ' cyklus 1 až 148
     Worksheets.Add After:=Worksheets(Worksheets.Count)  ' vytvor nový pracovný hárok
     Worksheets(Worksheets.Count).Name = i  ' s názvom i, teda 1 až 148
Next i

End Sub


Takto sa vytvára makro:
Príloha:
excel1a.JPG
excel1a.JPG [ 24.86 KiB | Zobrazené 4803 krát ]

Napíšeš názov a dáš vytvoriť.
Príloha:
excel2.JPG
excel2.JPG [ 38.25 KiB | Zobrazené 4803 krát ]

Obsah tela makra treba dopísať.
Príloha:
excel3.JPG
excel3.JPG [ 30.13 KiB | Zobrazené 4803 krát ]

Takto sa spustí:
Príloha:
excel4.JPG
excel4.JPG [ 27.58 KiB | Zobrazené 4803 krát ]


Ďalší list som nazval "celkom", vytvoril som v ňom tabuľku s údajmi o položkách (vyše 2000), toto bolo najpracnejšie, pretože som ich tam musel nahádzať jednotlivo po riadkoch so všetkými potrebnými údajmi.

Ukážka:
Príloha:
excel.JPG
excel.JPG [ 104.97 KiB | Zobrazené 4816 krát ]


Potom som vytvoril makro, ktoré do listov 1 až 148 vložilo tabuľku z listu "vzor" (upravená tabuľka !celkom") s pridaným stĺpcom na zadanie skutočného množstva položiek u súčastí (všade je tlačitko pre skok na list "obsah").
Kód:
Sub VlozDatabazuNovu()
'
' VlozDatabazu Makro
'

'
    ' definovanie celočíselnej premennej i
    Dim i As Integer
   
    ' pracuje na pozadí
    Application.ScreenUpdating = False
   
    ' aktivácia listu vzor
    Sheets("vzor").Select
    ' vybranie stĺpcov
    Columns("A:H").Select
    ' skopírovanie vybratých stĺpcov do pamäti
    Selection.Copy
   
    ' vytvorenie slučky 1 až 148
    For i = 1 To 148
        ' aktivácia i-teho listu v poradí (nie názvu)
        Sheets(i).Select
        ' aktivácia bunky A1
        Range("A1").Select
        ' vloženie skopírovaného
        ActiveSheet.Paste
        ' zápis do bunky E2 i-té číslo
        Cells(2, 5) = i
        ' aktivácia bunky A1
        Range("A1").Select
    ' ukončenie slučky
    Next i
   
    ' aktivácia listu vzor
    Sheets("vzor").Select
    ' zrušenie označenia kopírovanej oblasti
    Application.CutCopyMode = False
    ' aktivácia bunky A1
    Range("A1").Select
   
    ' koniec práce na pozadí
    Application.ScreenUpdating = True
   
End Sub

Ďalej som vytvoril 148 makier - skok na list č. 1 - 148.

Ukážka:
Kód:
Sub tlac1()
    Sheets("1").Select
End Sub
Sub tlac2()
    Sheets("2").Select
End Sub
Sub tlac3()
    Sheets("3").Select
End Sub
Sub tlac4()
    Sheets("4").Select
End Sub
Sub tlac5()
    Sheets("5").Select
End Sub
Sub tlac6()
    Sheets("6").Select
End Sub
Sub tlac7()
    Sheets("7").Select
End Sub
...

Nasledujúci list som nazval "obsah" a v ňom som vytvoril 148 tlačítok na 148 súčastí a priradil som im makrá skok na list č.1 - 148
(zmazal som názvy súčastí, to vás nemusí zaujímať :D )
Príloha:
excel1.JPG
excel1.JPG [ 11.16 KiB | Zobrazené 4816 krát ]


Ďalšie makro je aktualizácia databázy, to sa použije vždy, keď sa niečo zmení v liste "celkom", aby sa zmeny premietli do listov 1 - 148.
Kód:
Sub AutualizujDatabazu()

Dim i As Integer
   
    ' pracuje na pozadí
    Application.ScreenUpdating = False
   
    ' aktivácia listu číslo celkom
    Sheets("celkom").Select
    ' vybranie oblasti buniek
    Range("A4:E1600").Select
    ' skopírovanie vybratých stĺpcov do pamäti
    Selection.Copy
   
    ' vytvorenie slučky 1 až 148
    For i = 1 To 148
        ' aktivácia i-teho listu v poradí (nie názvu)
        Sheets(i).Select
        ' aktivácia bunky A1
        Range("A4").Select
        ' vloženie skopírovaného
        ActiveSheet.Paste
        ' zápis do bunky E2 i-té číslo
        ' Cells(2, 5) = i
        ' aktivácia bunky A1
        Range("A1").Select
    ' ukončenie slučky
    Next i
   
    ' aktivácia listu číslo celkom
    Sheets("celkom").Select
    ' zrušenie označenia kopírovanej oblasti
    Application.CutCopyMode = False
    ' aktivácia bunky A1
    Range("A1").Select
   
    ' koniec práce na pozadí
    Application.ScreenUpdating = True
   
End Sub

Na toto všetko mi stačili stránky o visual basic excel 2007 a základy céčka.

Teraz som však potreboval aby sa mi do jednej bunky v liste "celkom" automaticky spočítavali obsahy bunky (napr.) E7 z každého listu (1 - 148).
Minulý rok som to robil tak, že som klikol na liste "celkom" na príslušnú bunku, kde sa to malo spočítavať, potom na "suma" a pomaly som prechádzal list po liste, všade označil bunku E7 a stlačil +.
Trvalo to hrozne dlho, bolo to deprimujúce a mohol som sa pomýliť, niečo vynechať, niečo zapísať viackrát.

Tohto roku som to vyriešil veľmi jednoducho.
Jednoduchý programík v céčku vytvoril potrebný (poriadne dlhý) reťazec, ten som z výstupu programu skopíroval, vložil do word súboru (bolo treba odstrániť znaky '\n', ktoré pri výpise príkazový riadok automaticky vytvorí) na malú úpravu, odtiaľ do konkrétnej bunky listu "celkom" a bolo vystarané.

Kód:
#include <stdio.h>
#include <string.h>

int main (void)
{
    int i;
    char slovo[2000], pom[10];

    slovo[0] = '\0';
    for ( i = 1; i <= 190; i++) {
        sprintf(pom,"'%d'!F4+", i);
        strcat(slovo, pom);
    }
    printf("%s\n", slovo);
    return 0;
}

Výpis vytvoreného reťazca:
Kód:
'1'!F4+'2'!F4+'3'!F4+'4'!F4+'5'!F4+'6'!F4+'7'!F4+'8'!F4+'9'!F4+'10'!F4+'11'!F4+'12'!F4+'13'!F4+'14'!F4+'15'!F4+'16'!F4+'17'!F4+'18'!F4+'19'!F4+'20'!F4+'21'!F4+'22'!F4+'23'!F4+'24'!F4+'25'!F4+'26'!F4+'27'!F4+'28'!F4+'29'!F4+'30'!F4+'31'!F4+'32'!F4+'33'!F4+'34'!F4+'35'!F4+'36'!F4+'37'!F4+'38'!F4+'39'!F4+'40'!F4+'41'!F4+'42'!F4+'43'!F4+'44'!F4+'45'!F4+'46'!F4+'47'!F4+'48'!F4+'49'!F4+'50'!F4+'51'!F4+'52'!F4+'53'!F4+'54'!F4+'55'!F4+'56'!F4+'57'!F4+'58'!F4+'59'!F4+'60'!F4+'61'!F4+'62'!F4+'63'!F4+'64'!F4+'65'!F4+'66'!F4+'67'!F4+'68'!F4+'69'!F4+'70'!F4+'71'!F4+'72'!F4+'73'!F4+'74'!F4+'75'!F4+'76'!F4+'77'!F4+'78'!F4+'79'!F4+'80'!F4+'81'!F4+'82'!F4+'83'!F4+'84'!F4+'85'!F4+'86'!F4+'87'!F4+'88'!F4+'89'!F4+'90'!F4+'91'!F4+'92'!F4+'93'!F4+'94'!F4+'95'!F4+'96'!F4+'97'!F4+'98'!F4+'99'!F4+'100'!F4+'101'!F4+'102'!F4+'103'!F4+'104'!F4+'105'!F4+'106'!F4+'107'!F4+'108'!F4+'109'!F4+'110'!F4+'111'!F4+'112'!F4+'113'!F4+'114'!F4+'115'!F4+'116'!F4+'117'!F4+'118'!F4+'119'!F4+'120'!F4+'121'!F4+'122'!F4+'123'!F4+'124'!F4+'125'!F4+'126'!F4+'127'!F4+'128'!F4+'129'!F4+'130'!F4+'131'!F4+'132'!F4+'133'!F4+'134'!F4+'135'!F4+'136'!F4+'137'!F4+'138'!F4+'139'!F4+'140'!F4+'141'!F4+'142'!F4+'143'!F4+'144'!F4+'145'!F4+'146'!F4+'147'!F4+'148'!F4

_________________
kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor),
Skype: libcokamo, ICQ: 56312279
Ak treba, napíš mi na libcosenior@gmail.com. To mám v mobile a stále po ruke.


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
Zobraziť príspevky z predchádzajúceho:  Zoradiť podľa  
Vytvoriť novú tému Odpovedať na tému  [ Príspevok: 1 ] 

Všetky časy sú v GMT + 1 hodina


Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 0 hostia


Rýchla úprava:
Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete zasielať súbory v tomto fóre

Hľadať:
Skočiť na:  
cron
Powered by phpBB® Forum Software © phpBB Group

Hosted by FreeSpace SK