Hirdetés

Keresés

Új hozzászólás Aktív témák

  • ArchElf
    addikt

    Szia Himre82!

    Nem lett még kész a progim, de apránként azért haladok vele. :)

    Nem akartam leírni az egész problémát mert hát nem várom el senkitől, hogy megodja helyettem, és tulajdonképpen csak egy-egy részében akadok el mindig. Ezekre itt-ott mindig találok is megoldást, csak később mindig máshol futok hasonló zsákutcákba. Na de akkor már ezt is közkincs tárgyává teszem:

    Sajna nem tudok sql servert használni, mert a progimat munkahelyi környezetben használnám majd, és ott nincs lehetőségem adatszolgáltatót üzemeltetni. :\ Ezért maradtam az access file-nál. Hogy ezt is magyarázzam egy picit, az Excel kezelésével a kollégák nagy része már találkozott, így nem okoz gondot nekik a táblák módosítgatása az eddig használt VBA makrós nyilvántartásban (...ezzel persze hibákat generálva a program futásában...). Tudom, itt is le lehetne védeni a munkalapokat jelszóval, de úgy gondoltam, ha már VB, akkor kicsit fejlesztem a tudásomat és gyakorlásképpen megpróbálom inkább megcsinálni az adatkezelő progit, ami már nem excel táblákat módosítgat, hanem igazi adatbázis motorra épül. (Most jöhetnek a kritikák, hogy akkor meg miért nem tisztán accessben csinálom meg? A kérdés jogos! A válsz: azért, mert tanulom a VB-t! Mivel nem szakmám a programozás, csak hobbi szinten űzöm! Szerintem ez is nagy dolog már, hogy idáig eljutottam önszorgalomból.) Az Exceles táblával amúgy azóta semmi gond nincs. Az első pár hiba után, amit manuálisan javítottam, elmagyaráztam többieknek, hogy mi okozta, és azóta mindenki rendesen használja, csak amikor azt megírtam, akkor még nem volt arra igény, hogy mind az állapotfigyelt, és mind a nem állapotfigyelt szerszámot egy rendszerben kezeljük. (A másik dolog, hogy a VB tudásom is sokat fejlődött azóta, és egy csomó dolgot már nem úgy csinálnék meg mint anno.)

    Az SQL áttanulmányozása egyébként jó ötlet! Egyet is értek veled, de egyelőre megmaradnék az SQL alapoknál. Később biztos ráfekeszem majd erre is, ha még érdekel majd a dolog. Tényleg jó dolgokat meg lehet csinálni vele, az eddigi tudásoml már elég ahhoz, hogy ezt belássam. :)

    Ha munkaállomás - és egyszerre egy felhasználós -, akkor szerintem az sqli a legegyszerűbb (ha nem kellenek bonyolult adattípusok és "fejlett" sql szerkezetek).

    AE

  • ArchElf
    addikt

    Igen, ezzel csak az a baj, hogy ez rengeteg plusz melót igényel, tekintve, hogy minden egyes vezérlő Enter() eseményéhez meg kellene írni.

    Az ActiveControl-al már próbákoztunk másik programban, hasonló ok miatt de az nem működik megfelelően.

    Ha pl. van egy formod amin belül van egy frame, amint belül pedig egy vezérlő és a kurzor a vezérlőben villog, tehát elvileg ugye a vezérlő az aktív, az ActiveControl azt fogja eredményül adni, hogy az aktív kontrol a userform.
    Ezúton is köszönjük neki. Így el nem tudom képzelni, hogy ez mire lehet jó.

    Egyébként találtunk akkor erre megoldást, de az hack volt.

    Szóval nekem valami jóval egyszerűbb megoldásra lenne szükségem, mert a framen belül és kívül is van jónéhány vezérlő.

    Üdv, vilag

    A kevés munkás hack megoldás lesz a jó... [link]

    AE

  • ArchElf
    addikt

    http://www.cpearson.com/excel/VBAArrays.htm
    Ugyan továbbra is alapvető koncepcionális hibának tartom a tömbök erőltetését Excel makróban, mikor az egész excel egy nagy két dimenziós tömb, de itt hátha találasz megfelelő példa kódot.

    Ezzel azért vitatkoznék... :)

    AE

  • ArchElf
    addikt

    Hát jó, legyen... :)
    De akkor most az új kérdésem: lehet használni az EF-et helyi Access (mdb) adatbázis file kezeléséhez?

    Nem, nincs Access-hez ADO.NET csatoló. Amit tudsz esetleg csinálni, hogy felhúzol egy SQL Server Express-t és becsatolod az Access adatbázist, mint külső adatforrást (JET/OLE). Ha helyi fájl kell, használj inkább SQL adatfájlokat (mdf) vagy SQLite-ot.

    AE

  • ArchElf
    addikt

    :$
    Igazából nekem tök mindegy, hogy VB6 vagy VB net. :) Lehet furán hangzik ez így, de alapnak sztem jó volt a könyv, és hozzá tudok nyúlni bármikor, ha éppen nem jut eszembe egy kifjezés szintaktikája.
    Nézegettem amit javasolsz! Lehetséges, hogy tényleg ezt keresem. :) Köszi!

    Neked lehet, hogy mindegy hogy VB6, vagy VB.NET, de sem technológia, sem környezet, sem terminológia szempontjából nem mindegy.
    Azaz, ha neked mindegy, akkor VB.NET...

    AE

  • ArchElf
    addikt

    Nem kész kódot, csak valami struktúrát, amire lehet ilyen típusú feladatokat építeni és tudom hogy valami logika is van benne, mert mondjuk itt elég sok szaki van aki eltudná magyarázni hogy mit hogy csináljak meg.
    Nem lenne bajom ezzel mert ha leülnék és napokat gondolkodnék rajta biztos kitalálnék valamit rá, de az emelt érettségin lesz kb 45 percem erre a részére a feladatsornak és ezért próbálom típus szerint begyakorolni a feladatokat. Ha a beolvasás megvan utána az ilyen a már beolvasott adatbázisban keresgélő és sorba rakó feladatokkal már nincs bajom.

    (félig) pszeudokódként:

    public struct Adatok
    {
    public Date datom;
    public String nev;
    }

    // ...

    List<Adatok> adatlista = new List<Adatok>();
    while( not eof )
    {
    Adatok adat = new Adatok();
    a.datum = Date.Parse(sr.Readline());
    a.nev = sr.Readline();
    adatlista.Add(adat);
    }

    AE

  • ArchElf
    addikt

    Úgy rémlik, hogy az automata üzenetküldö férgek letöréséért a nem Office-ból meghívott Outlook objektumok nem tudnak automatikusan levelt küldeni. Van valami registry beállítás (vagy group/local policy elem), amin keresztül ezt lehet engedélyezni. De nagyon rég volt már amikor ezzel szmbekerültem (6-7 éve), szóval egy kis googlizásba belekerül, mire megtalálom...

    Esetleg próbáld meg C# (.NET) alkalmazással...

    AE

    MS oldala csak Office 2003-ig írja a támogatást - lehet, hogy Office-on kívül már nem működik... Passz.

    És még ezt találtam.

    AE

  • ArchElf
    addikt

    Szia

    Private Sub Command1_Click()
    Dim objOutlook, objMail, oAddSig

    Set objOutlook = CreateObject("Outlook.Application")
    objOutlook.Session.Logon
    Set objMail = objOutlook.CreateItem(olMailItem)
    Set objOutlook = objMail.GetInspector

    With objMail
    .SentOnBehalfOfName = "nemazennevem@valami.hu"
    .To = "to"
    .Cc = "cc"
    .Subject = "Subject"
    .Body = "body"
    .Display
    End With

    Set objOutlook = Nothing
    Set objMail = Nothing
    End Sub

    Outlook2007-nél átírja a feladót, Excelből indítva 2010-nél is.
    HTML-ből, vagy VB6-tal csinált exe-nél már nem.
    2010-nél egy lenyíló listából tudom kiválasztani az eddig használt feladókat. Lehet, hogy itt valami objektumként kezeli már?

    Úgy rémlik, hogy az automata üzenetküldö férgek letöréséért a nem Office-ból meghívott Outlook objektumok nem tudnak automatikusan levelt küldeni. Van valami registry beállítás (vagy group/local policy elem), amin keresztül ezt lehet engedélyezni. De nagyon rég volt már amikor ezzel szmbekerültem (6-7 éve), szóval egy kis googlizásba belekerül, mire megtalálom...

    Esetleg próbáld meg C# (.NET) alkalmazással...

    AE

  • ArchElf
    addikt

    Visual Studio 6.0-ban csináltam meg a Form-ot.

    Nagyon nem értek hozzá... Csak úgy magamtól kezdtem el az Excelt programozgatni...

    HTML-be is átültettem a scriptet, de ott is ugyanúgy "működik".
    Csak a saját nevem alól tudom küldeni. :((

    A VBS (VB Script), a VBA (VB for Applications) és a VB6 szintaktikailag (és a használt metódusok, osztályok alapján is) nagyon hasonló - de nem teljes mértékben átjárható. Ha teszel fel példát, talán megtaláljuk, miért nem megy.

    AE

  • ArchElf
    addikt

    Van egy rutin ami egy gomb megnyomására az egyes vezérlők tartalmát elkezdi egyesével kiirkálni az excel tábal megfelel cellájába.
    Most azt vettem észre, hogy a két évszámos vezérlő (CB4 és CB7) change minden egyes alkalommal lefut amikor egy-egy érték kiíródik az excel tábla.
    Esetleg ez megvilágosít nálad valamit?

    Bocsi, ezek most cellák, vagy vezérlők?
    Amúgy a cellafrissítések automatikus lefutását kódból ki lehet tiltani, amíg az problémákat okozhat.
    [link]

    AE

  • ArchElf
    addikt

    Sziasztok

    Van egy HTML űrlapom, amit VBA (vagyVBS... mittomén :P ) dolgoz fel.
    Nem találom, hogy miként tudnék dolgozni a kijelölt radio button értékével.

    <label>
    <input type="radio" name="szin" value="Fekete">
    Fekete </label>
    <br>
    <label>
    <input type="radio" name="szin" value="Fehér">
    Fehér </label>

    Hogyan tudnám változóként kezelni, hogy mit jelölünk ki?

    Select esetén működik a document.getElementById("orszagok").value

    <label for="orszagok">Válasszon országot:</label>
    <select name="orszagok" id="orszagok">
    <option value="HU">Magyarország</option>
    <option value="AT">Ausztria</option>
    <option value="BE">Belgium</option>
    <option value="BG">Bulgária</option>
    </select>

    Vannak olyan esetek, amikor a radio Button jobb lenne.

    Előre is köszönöm.

    document.getElementById("orszagok").value
    RadioButton esetén is működik, ha van ID property-je... Nálad nem volt.

    Amúgy meg RadioButtonra ott a
    document.getElementsByName("szin")
    Ezen egy foreach-el végignyomulsz, és megnézed melyik value melett igaz a checked property...

    AE

  • ArchElf
    addikt

    Sajnos azt is kiírja, amit nem szeretnék: "OK", és nem találom, hogyan tudnám ezt elhagyatni vele.

    Nyiss egy IE ablakot és abban közöld a státuszt. Ha lefut az alkalmazás az ablakot be is tudod zárni: [link]

    AE

  • ArchElf
    addikt

    Üdv.!

    Szeretnék a monitoron információt megjeleníteni a futó VB script program állapotáról. Amit eddig találtam ,az a MsgBox strFolder, 64 függvény, aminél sajnos legalább az "OK" gombot nem tudom elhagyni, ezzel viszont a program várakozik amíg nem klikkelek.

    Oda-vissza végignéztem az összes funkciót, lehetséges paramétereit, file-ba tudnék írni, de a monitorra nem. (Igaziból a dobozra sem lenne szükségem, csak egy sorra, amit állandóan felülírhatok az aktuálisan feldolgozott alkönyvtár nevével, vagy egy sorszámmal, aktuális idővel...)

    A VB Script programot a CHIP magazin 2008 júliusi számából másoltam ki, csekély módosítással a DVD olvasóban lévő DVD file-jait listázza egy csv file-ba. Ezt a kijelzést azért szeretném beletenni, mert igen lassan fut, a DVD olvasó LED-je se jelez vissza és jó lenne, ha információt kapnék arról, hogy rendben dolgozik.

    Kell csinálnod egy új formot, amit megjelenítesz a Show paranccsal, és az azon elhelyezett kontrolloknak már tudod az értékét módosítani (textboxnál szöveg, progressbar-nál érték, stb...)
    MsgBox kifejezetten egyszeri (hiba-)üzenetek megjelenítésére való.

    AE

  • ArchElf
    addikt

    Sziasztok! Kezdő-középhaladó programozó vagyok, és az alábbi témában elkadtam:

    Írtam egy progit (most mindegy, hogy mit), amelyet szeretnék serial kóddal védeni. Egy hasonló progiban láttam egy olyan megoldást, hogy a telepítés utáni első indításkor a progi kiír egy kulcsot, majd ezt megküldve a progi készítőjének visszakapunk egy aktiváló kódot. Ezt beírva a megfelelő helyre lesz teljes értékű a progi.

    Nekem nagyon tetszik ez a megoldás, én is ezt szeretném megcsinálni, csak érdekelne az elv, tehát nem a konkrét leprogramozás, hanem az elv.

    Az első indításkor egy ilyen formárumú kulcs jön létre: QFQQYT-SBKBRI-3-CABBAC. Az érdekessége az, hogy ha az aktiválás után a windowst újra telepítik, illetve a progi is ismételten felkerül az újratelepített win alá, akkor is ugyanezt a kulcsot készíti a progi az első indításkor, tehát az egyszer már aktivált progi ugyanarra a gépre ismételten teljesen működővé tehető, viszont másik gépre történő telepítéskor már természetesen más kulcs készül.
    Ez a kulcs minek (esetleg hardvernek?) lehet a sorozatszáma, hiszen ránézésre nem HDD serial, illetve nem is VSN (partíció kötetszám).

    Köszi a válaszokat.

    Ui.: Azért ebbe a topikba írtam, mert az eredeti progi is Visual Basic-ben készült.

    Általában az elérhető HW/SW sorozatszámokból készít egy hash-t amit valami olvasható formába alakít (mint amit te is írtál), az lesz a kulcs és abból a kulcsból generálja a cég válaszkulcsot.
    Nem közvetlenül használja fel az elérhető hw/sw kulcsokat, hiszen akkor túl könnyű dolga lenne a próbálkozóknak.

    AE

  • ArchElf
    addikt

    a Call minek?
    VB.Net enélkül is érti.

    Szerintem ezért kellett neki, mert Call nélkül nem lehet zárójellel meghívni a metódusokat :DDD
    (amúgy lehet, hogy VBA nem VB.NET)

    AE

  • ArchElf
    addikt

    Különbségtábla elképzelésemre valakinek van még valami ötlete? Nagyon Szenvedek vele :S

    Az elképzelésről a kép itt:
    muszakitanacsado.hu/kepek/kulonbsegtabla.jpg

    Válaszokat előre is köszönöm! :))

  • ArchElf
    addikt

    Igazából már muszáj "makrobizni", mert userformon fog történni minden, ez csak egy apró szeletet volt a dolognak. Mindössze enélkül nem lett volna értelme folytatni, mert később újra kellett volna írnom az egészet.

    A megoldás ez lett (bár gondolom az előzőekből nektek ez már nemigen lesz újdonság):
    név = Application.WorksheetFunction.Match("Név", ThisWorkbook.Sheets("gtorzs").Range("1:1"), 0)

    Listboxal kapcsolatban viszont lenne egy érdekes kérdésem, amelyre eddig önerőből nem találtam választ.
    A listbox ugye egy kijelölt excel tartományt "mutat meg". Azt viszont, hogyan lehet megoldani, hogy az egyesített cellák is egyesítettként jelenjenek meg benne?

    Pl. excel táblában van nekem egy fejléc oszlopom ami viselje pl a következő nevet: "Születési dátum", viszont ez három oszlop (év, hónap, nap) fejléce. A listboxban viszont úgy jelenik meg, hogy az év oszlop felett van a "Születési dátum", a másik kettő felett pedig üres cella (elválasztó vonallal mindennel együtt).

    Ötlet?

    Abból amit korábban leítál nekem egyáltalán nem az jött le, hogy a te címsorban szeretnél keresni és nem a tartalmoban...

    AE

  • ArchElf
    addikt

    Üdv!

    Esetleg mit szóltok az excel "hol.van" (match) függvényére. Nekem úgy tűnik használható lenne az adott problémára.

    Az ötlet egyébként a kollégámé, őt illeti a dícséret.

    Microsoft excel súgó:
    "A függvény egy olyan elem tömbben elfoglalt relatív pozícióját adja vissza, amely megadott értékkel megadott módon egyezik. A HOL.VAN abban különbözik a többi kereső függvénytől, hogy a megtalált elem helyét adja meg, és nem magát az elemet.

    Szintaxis

    HOL.VAN(keresési_érték;tábla;egyezés_típus)

    Keresési_érték: Az az érték, amelynek segítségével a táblázatban a keresett érték megtalálható."

    Igen, és a Match elfogad wildcard-ot is (* és ?)

    AE

  • ArchElf
    addikt

    Szia

    Az a baj, hogy én C-ben meg tudnám csinálni, de Vba-ban kell, és ahhoz semmit nem értek :S Tehát még ötletem sincs hogy induljak neki.

    C és VBA közti alapvető különbségek:
    nincs { }
    nincs ; a sor végén
    nincs == helyette is = kell
    nincs != helyette <> kell
    nincs return, hanem Exit Funtion és Exit Sub
    a visszaadandó értéket Function esetén a funkció nevének megfelelő változóba (nem kell inicializálni) kell tenni.
    For-nak Next a párja, a break pedig az Exit For (continue nincs se for-ban, se loop-ban)
    nem
    if ( ... )
    { ... }
    else
    { ... }

    hanem
    If ... Then
    ...
    Else
    ...
    End If
    nem
    while (...)
    { ... }
    hanem
    do while (...)
    ...
    loop

    ha egy metódus Sub és nem Function akkor nincs visszaadott érték és nem kell az argumentumokat zárójelbe tenni
    Nem kell a változókat inicializálni (kivéve az osztályokat).

    + van help, a metódusokat meg lehet találni benne

    AE

  • ArchElf
    addikt

    Sziasztok

    Lenne egy pár nagyon alap feladat, amit az öcsémnek meg kellene csinálnia. Én a vba-t nem vágom, ezért fordulok hozzátok, hogy le tudjam ellenőrizni. Nagyon fontos lenne :)
    1.feladat:Írasd ki egy kollekció összes elemnének a nevét!
    2.feladat:Az első 100 páratlan számot add össze!
    3.feladat:Írj eljárást, ami az összes cellát nagybetűssé teszi!
    4.feladat:Írj eljárást, ami paraméterként kap két fájlt, és az első fájl tartalmát belemásolja a másodikba!

    Köszönöm előre is a segítséget :)

    üdv
    Dávid

    Linkeld be a megoldásaid (amit felraksz monjuk a pastebin-re) és ha nem megy, megmondjuk mi bennük a gond.

    AE

  • ArchElf
    addikt

    Akkor jól sejtettem, hogy ilyen a gyakorlatban nincs, hogy én most kitalálom, hogy nekem tartzotott XY 2005 és 2008 között, és most kiszámolom az akkori kamatokkal a késedelmét visszamenőleg.
    Persze matematikai, excel, algoritmus feladványnak jó.

    Hát, ha akkor tartozott és a szerződés szerint az aktuális kamatláb az irányadó, akkor az akkori értékekkel kell kiszámolni (már ha a szerződés pl az írja elő, hogy havonta kell nyilvántartani a tartozás mértékét).

    AE

  • ArchElf
    addikt

    Illetve még annyi, hogy azt nem tudom mi lenne az APEH/törvények által megkövetelt eljárás rend?
    Leginkább azon lepődnék meg, ha ténylegesen visszamenőlegesen kellene számolgatni, az általad vázolt megoldás szerint.

    Elméletileg mindig az elszámolás napján (havi elszámolásnál mindig a hónap fix napján, éves elszámolásnál az év fix napján; stb.) érvényes kamatlábbal kell számolni.

    AE

  • ArchElf
    addikt

    Helló,

    Kösz az ötleteket, sajnos a megoldás nem ez lett. :F Nem értem, hogy miért, de annak ellenére, hogy egy alőző sorban aktiválom (mindegy, hogy .select vagy .activate-el) a cél munkalapot, a rows(n).select sort csak úgy fogadja el, hogy előtte a munkalapot is beírom.
    Ez működik:
    Worksheets("missing cost centers").Activate
    Worksheets("missing cost centers").Rows(n).Select

    Ez nem működik:
    Worksheets("missing cost centers").Activate
    Rows(n).Select (Rows(CStr(n) & ":" & CStr(n)).Select -el sem)

    A makrót ugyan a forrás munkalaphoz hoztam létre, de ha ez a baj, akkor sem értem a hibaüzenetet. Ha a cél munkalap aktiválása a sor kiválasztás sorra már nem hat, akkor miért nem választja ki az n. sort az anya-(forrás)munkalapon???

    Úgy látszik itt még bőven van mit megtanulni a hivatkozásokról, mert a hétköznapi logika alapján ez elég katyvasz.

    Egyébként kösz a tippeket, a cellánkénti másolás és a képernyőfrissítés kikapcsolása is hasznomra lesz még. :))

    Derűs, dolgos munkanapot

    Használd akkor így:
    Worksheets("missing cost centers").Activate
    ActiveWorksheet.Rows(n).Select

    (vagy ActiveSheet - fejből nem tudom...)

    AE

  • ArchElf
    addikt

    nos nem tudom mit jelent az pontosan, hogy létezik-e ezen a helyen, de miután deklaráltam, és még értéket is adtam neki ugyanezen subrutinban, gondolom létezik. ha más nem, értékadásnál már nyafogott volna, hogy baja van, de az lefut. :W

    Sub missing_cost_centers()

    Dim i, n As Integer

    i = 9
    n = 2
    Do
    Sheets......

    Sheets("missing cost centers").Select 'cél munkalap
    helyett lehet, hogy egy
    Sheets("missing cost centers").Activate 'cél munkalap
    kellene...

    AE

  • ArchElf
    addikt

    Helyes VB szintaktikával (c# -al volt az előző kód keverve, sorry)
    If (ev Mod 400 = 0) Then
    szokoev = True
    ElseIf (ev Mod 100 = 0) Then
    szokoev = False
    ElseIf (ev Mod 4 = 0) Then
    szokoev = True
    Else
    szokoev = False
    End If

    AE

    Egészbe:
    Sub Main()
    Dim ev As Integer
    Dim szokoev As String
    ev = 0
    szokoev = ""
    If Integer.TryParse(Console.ReadLine(), ev) Then

    If (ev Mod 400 = 0) Then
    szokoev = ""
    ElseIf (ev Mod 100 = 0) Then
    szokoev = "nem "
    ElseIf (ev Mod 4 = 0) Then
    szokoev = ""
    Else
    szokoev = "nem "
    End If
    Console.WriteLine("A {0}. év {1}szökőév.", ev, szokoev)
    Else
    Console.WriteLine("A beadott érték nem szám.")
    End If
    Console.ReadKey()
    End Sub

    C#-ban a % a VB-s MOD (egész osztás maradéka).

    AE

  • ArchElf
    addikt

    Mit nem tanultál ebből???

    AE

    Helyes VB szintaktikával (c# -al volt az előző kód keverve, sorry)
    If (ev Mod 400 = 0) Then
    szokoev = True
    ElseIf (ev Mod 100 = 0) Then
    szokoev = False
    ElseIf (ev Mod 4 = 0) Then
    szokoev = True
    Else
    szokoev = False
    End If

    AE

  • ArchElf
    addikt

    Hali!
    Kérnék egy kis segítséget.
    Ezt a programot kellene megírni: Írjunk egy programot, amely az adott évről eldönti, hogy szökőév-e! Egy év szökőév, ha néggyel osztható, azonban a százzal osztható évek közül csak a négyszázzal is osztható évek a szökőévek!!

    VISUAL BASIC 2010 EXPRESS-ben kellene!!
    PLS HELP

    Hasból:
    if (ev % 400 == 0) Then
    szokoev = True
    else if (ev % 100 == 0) Then
    szokoev = False
    else if (ev % 4 == 0) Then
    szokoev = True
    else
    szokoev = False
    end if

    AE

  • ArchElf
    addikt

    Sziasztok! Új vagyok a fórumon. Nem tudom, hogy mennyire nehéz megvalósítani, de ha esetleg van valakinek valami ötlete, esetleg kész megoldása a problémámra azt szívesen fogadnám. A kérdésem excel makro programozása témakörhöz kapcsolódik.

    Van két oszlop, az első oszlopban nevek vannak a másodikban meg a névhez tartozó adatok. Valahogy így:

    név - adat
    a - x
    a - y
    a - z
    b - q
    b - w
    b - p
    b - q

    Ezen táblázatot úgy szeretném transzponálni, hogy a név (egy adott sorban) csak egyszer szerepeljen, és az adatok a sorokból, egymás mellé kerüljenek oszlopokba. Így:

    a - x - y - z
    b - q - w - p - q

    Több problémát is meg kellene így oldani a kódolásban:
    - a kódnak figyelnie kell az azonos neveket, mivel valamelyik névhez lehet másik névhez meg akár 200 adat is tartozhat.
    - ennek megfelelően az egymás mellé kerülő oszlopok száma is változik
    - át kell rendeznie a táblázatot,a fenti formának megfelelően stb stb.

    Ha valakinek van erre ötlete, hogy miképpen lássak neki, esetleg kész kódja van ehhez azt megköszönném.

    Erik

    Excel topicban szerintem hamarabb találsz megoldást ;)

    AE

  • ArchElf
    addikt

    ember te nagyon diplomatikus vagy. :R
    Cpt. Flint pedig nem attól hülye, hogy itt mi a rangja, hanem a kérdése minőségétől.
    Értsd ha egy programozás fórumban megkérdezed, hogy miért piros a majom feneke, akkor nem azért fognak kiröhögni mert újoncként kérdezed. Sőt egy újoncnak még esetleg jobban el is néznek egy ilyen kérdést.
    Devportálon meg prog.hu-n mostanában renike24 nick tud olyanokat kérdezni ASP.Net vonalon, hogy ajánlom mindenki figyelmébe, aki jót akar röhögni. Próbáltam volna rávezetni a megoldásra (tanulás, olvasás), de még én lettem leszólva, hogy miért nem mondom meg a megoldást.
    Biztos én vagyok a bunkó, de egyszerűen valami hihetetlen mélységekből jönnek elő ezek a mai fiatalok.

    Nagylevegő, tízigszámol, kifúj...
    Csuklást megszünteti ;)

    AE

  • ArchElf
    addikt

    nem vagyok fejlesztő. ez probléma? itt csak azok lehetnek tagok? mert akkor szorri, lelépek. autodidakta excel vba projekt író vagyok (mondjuk), félig kényszerből, félig szórakozásból. :B Az angolom is hagy kívánnivalót maga után, úgyhogy ha nagy ritkán végképp nem találok valamire megoldást, akkor szoktam jólelkű fórumozókhoz fordulni. nyilván valszleg magában az objektumorientált programozás alapjaiban is vannak hiányosságaim, ezt vagy elnézitek nekem, vagy nem. ha nem, akkor nem válaszoltok, volt már ilyen.
    ha egy többszázas google találati oldalt linkelsz, az nemigen ösztönzi az embert olvasásra. ettől függetlenül szemezgettem belőle, de az általad írtakat sajna pont nem találtam meg.

    "- Ha egy függvény definíciójában van definiálva egy változó (vastaggal)
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    azt hiába definiálod előre, az adott függvényben az itt definiált "változat" fog élni."
    most már érteni vélem (úgy látszik, mégis el tudod magyarázni ha van kedved, ugye nem is kellett hozzá olyan hatalmas energia). arra valóban nem gondoltam, hogy a KeyDown függvény paramétereiben voltaképp újradefiniálom a változót...
    de nekem úgy tűnik, a csakszam-hoz már elég ez is: Sub csakszam(KeyCode, Shift)

    már látom, hogy mi volt a ByRef hiba oka; többféle változónévvel futottunk itt a példákban, aztán nem egyezett az átadott az átvettel. úgyhogy valóban, köszi, működik.

    Az a GetActive nagyon frappáns ki hackelés :D, mélységes hálám a visszafejtésért (vannak benne önmagukban is új/hasznos dolgok számomra); de hogy miért (csak) így működik, azt nem tudod véletlenül? Szerintem az ActiveControl így elég használhatatlan/bacsapós önmagában... nincs olyan utasítás, ami ténylegesen, közvetlenül, azonnal azt az egy darab, fókuszban levő vezérlőt adná eredményül?

    masked editre akkor semmi ötlet?

    :R

    Azért olvasgass utána, jó? :) Google keresést csak akkor szoktam linkelni, ha az első oldalon nagyrészt csak releváns találatok vannak. Ebben az esetben nem szükségszerűen VBA témakörben - mivel ez az alapelv majd minden fejlesztői nyelvre azonos.

    Amúgy em nagyképű itt általában senki (legalább is itt a programozás fórumon talán nem azok a befordult kockák vannak csak, mint máshol...) Másrész nem kell offenzívnek venni azt, hogy egyből az a reakció, hogy "hülyeségeket kérdezel". Attól még, hogy megsértödsz, hülye a kérdés - legalább is azt mutatja, hogy az alpokkal nagyon nem vagy tisztában. Nem probléma magában ez sem - csak nem kell feltétlen arra várni, hogy valaki megoldjon helyetted mindent - és nem kell érzelmi irányba terelni a dolgot, hiszen gyakorlati kérdésben jöttél.
    Egy kis alázat nem árt, még ha nehezen is megy néha. Soha nem találkoztál az itt fórumozó emberekkel, és talán soha nem is fogsz - ha megvan a megoldás, vagy az oda vezető út, ne akadj fent azon, hogy valakinek rossz napja van. Itt mindenki önszántából magyarázná el (illetve - ha rossz napja van - éppen nem magyarázná el) 1001-szer az alapokat.

    Ha hobbi szinten csinálod, szánj rá - még - egy-két órát, és máris csak annyi hátrányban leszel, hogy nem tudod egyből hogy merre indulj el (nem pedig alapvető problémáid lesznek).

    GetActive - ha vannak benne új dolgok (a használt TypeName függvény kivételével) - pl. rekurzió, típusok, akkor tényleg mielőbb keríts egy (alapszintű, bármilyen nyelvet bemutató) programozási könyvet. Nem bántásból mondom: 20-30 oldal után kész megvilágosodásban lesz részed, ha van érzéked a témához.

    Sub csakszam(KeyCode, Shift) - ebben az esetben u.n. Varian típusra deklarálod a változókat (típus nélküli változó), ami az értékadáskor pontosítja a változó típusát. Használata mellőzendő, hacsak nem elkerülhetetlen - mivel növeli a kód bizonytalanságát. Ugyanez vonatkozik az Option Explicit-re is: célszerű használni, mert rákényszerít a pontosságra.

    MaskedEdit VB6 kontrol, nem VBA (VB 6.5 = Visual Basic for Applications = gyak. Office VB). Azért nem találtad, mert valami egységcsomagban lenne benne (asszem MS Common Controls, vagy valami hasonló) - neten rá kell keresni és lehetőleg MS oldalról letölteni.
    Azután ha megvan (feltelepítve), akkor először hozzá kell adni a References... hez, majd már használható lesz a kontroll-ok között.

    AE

  • ArchElf
    addikt

    ember te nagyon diplomatikus vagy. :R
    Cpt. Flint pedig nem attól hülye, hogy itt mi a rangja, hanem a kérdése minőségétől.
    Értsd ha egy programozás fórumban megkérdezed, hogy miért piros a majom feneke, akkor nem azért fognak kiröhögni mert újoncként kérdezed. Sőt egy újoncnak még esetleg jobban el is néznek egy ilyen kérdést.
    Devportálon meg prog.hu-n mostanában renike24 nick tud olyanokat kérdezni ASP.Net vonalon, hogy ajánlom mindenki figyelmébe, aki jót akar röhögni. Próbáltam volna rávezetni a megoldásra (tanulás, olvasás), de még én lettem leszólva, hogy miért nem mondom meg a megoldást.
    Biztos én vagyok a bunkó, de egyszerűen valami hihetetlen mélységekből jönnek elő ezek a mai fiatalok.

    Igyekszik az ember (bár vannak bőven napok, amikor nem jön össze). :)
    Az volt a szerencséje, hogy nem VB6, hanem VBA: így 5 perc alatt összedobtam a gépemen.

    AE

  • ArchElf
    addikt

    Általánosságban: jó, majd olvasgatok, ha lesz időm. (de azért, mert _itt_ újonc vagyok, még nem bizti, hogy totál hülye is.)
    VB 6.5, Office 2003 SP3

    1-2. Melyik függvény hozza létre újra, ha public?
    Én ezt csináltam (volna, ha menne):

    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Ügyirat főszámba csak számot enged írni

    Dim vezerlo As Object
    set vezerlo = ActiveControl
    csakszam

    End Sub

    Sub csakszam()

    If Shift <> 0 Then
    vezerlo.Locked = True
    Else
    If KeyCode = 8 Or KeyCode = 46 Or _
    (KeyCode >= 48 And KeyCode <= 57) _
    Or (KeyCode >= 96 And KeyCode <= 105) Then
    vezerlo.Locked = False
    Else
    vezerlo.Locked = True
    End If
    End If

    End Sub

    Úgy gondoltam, hogy amikor a KeyDown subból meghívom a csakszam subot, akkor a KeyCode és a Shift ott is ugyanazt az értéket fogja még tartalmazni. De nem, ezek kiürülnek. Akkor is, ha külön felveszem őket public változóként. Ezért a KeyDown subban mindkettő értékét kiíratom egy-egy saját változóba (kc=KeyCode, ks=Shift) és a csakszam subban már azokat használom. Ez nem probléma, csak két plusz sor és két plusz változó.
    Kipróbáltad, hogy át lehet-e adni (úgy, ahogy írtad) a KeyCode-ot? Mert nálam nem lehet, csakszam TextBox1, KeyCode-re ezt kapom: Compile error: ByRef type mismatch.
    És mint írtam, pont azt szeretném elkerülni, hogy a TextBox1-et bárhol is leírjam (értékadásba vagy érték átadásba), mert azt majd akkor minden egyes subban át kell írnom a megfelelőre (ráadásul még ComboBox is lesz). Ezért szeretném az ActiveControlt használni helyette, ami általános, és elvileg mindig azt adná, ami épp kell).
    "le kell ellenőrizni, hogy az aktuális ActiveControl TextBox-e"
    Leellenőriztem, nem az. De MIÉRT nem az, mikor azon van a fókusz, abban szerkesztek, abból fut le a KeyDown sub??? A VB helpje szerint az ActiveControl az, amelyik épp fókuszban van. De mégsem a TextBox1-et kapom, hanem a MultiPage1-et.
    Próbáltam így: set vezerlo=MultiPage1.Pages(0).ActiveControl. Ez eggyel beljebb vitt, mert így Frame1-et kaptam eredménynek, amiben a TextBox1 is van, de még mindig nem a textboxot... És ez már ebben a formában úgysem érne semmit, hiszen már akkor ha a konkrét lapot meg kell adnom, az sem jobb semmivel, mintha éppenséggel a konkrét vezérlőt adom meg.
    Én sem igen szeretem a globális változókat szaporítani, de miért kell elfelejteni? Van valami komoly hátrányuk?
    3. Miért lenne hack? Ez egy egyszerű, frappáns megoldás, egy darab létező tulajdonságot állítok át, és a felhasználó annyit lát, hogy ha nem megfelelő billentyűt nyom, egész egyszerűen nem történik semmi. Nyista vágólap, mert a Ctrl+akármit ez a rutin a KeyCode-ok közül nem engedélyezi (ugye vizsgálom a Shift-et, és ha nem 0, akkor eleve locked, de ha éppen nem a Ctrl-ra, akkor meg a v-re lenne az).
    4. sem a VB helpjében, sem az Object Browserben nem találok MaskedEditet, egyetlen Mask tulajdonságot leltem, ami csak a CommandBarButton-ra alkalmazható.
    Osztályom sincs olyan, hogy MaskEdBox, vagy akár MaskedTextBox. Sőt, az ominózus MSMASK32.OCX sem található meg a gépemen.

    Egyébként természetesen köszönöm a segítséget és az eszmecserét, sokat tanulok belőle. :R

    Pedig jó volna ha megértenéd a változók hatókörét. Nem tudom milyen fejlesztési tapasztalatod lehet, de ez a VB-re nem nagyon terjed ki.

    Anélkül elég nehezen tudom elmagyarázni azt, amit látsz (és nem éresz meg). De röviden azért megpróbálom:
    - Ha egy függvény definíciójában van definiálva egy változó (vastaggal)
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    azt hiába definiálod előre, az adott függvényben az itt definiált "változat" fog élni.
    - Ha definiálsz egy változót egy függvényben, attól még az onnan meghívott függvényekben a változó nem létezik. A változó hatóköre csak a definiálás helyére érvényes (kivétel a kód "gyökerében" globálisan definiált változók, de azok a függvényekben felüldefiniálhatók - pl. mint paraméter)
    - Használd az Option Explicit parancsot (kód legelején), hogy lásd, hogy minden változód helyesen van definiálva (és nem írtál el sehol semmit). Ez az utasítás kikényszeríti a változók definiálását.

    Az ActiveControl az aktuális konténerben aktív kontrolt kéri le. Arra meg kell nézned, hogy Container típusú-e és vannak-e tagjai, ha iden abban is meg kell nézni, hogy van-e aktív komponens -rekurzívan el lehet jutni az utolsó tagig, ami jelen esetben a TextBox1 komponens. De a KeyCode-ot és Shift-et nem lehet nem átadni. (Ha pedig odaírod, hogy ByVal - azaz érték és nem referencia szerinti átadás van -, akkor átkonvertálja neked az MSForms.ReturnInteger-t mezei Integer-ré)

    Option Explicit

    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    csakszam KeyCode, Shift
    End Sub

    Sub csakszam(ByVal KeyCode As Integer, ByVal Shift As Integer)
    Dim Vezerlo As Control
    Set Vezerlo = GetActive(ActiveControl)
    'MsgBox TypeName(GetActive(ActiveControl))
    If TypeName(Vezerlo) <> "TextBox" Then
    Exit Sub
    End If
    If Shift <> 0 Then
    Vezerlo.Locked = True
    Else
    If KeyCode = 8 Or KeyCode = 46 Or _
    (KeyCode >= 48 And KeyCode <= 57) _
    Or (KeyCode >= 96 And KeyCode <= 105) Then
    Vezerlo.Locked = False
    Else
    Vezerlo.Locked = True
    End If
    End If
    End Sub

    Private Function GetActive(con As Control) As Control
    If TypeName(con) = "UserForm" Then
    Dim f As UserForm
    Set f = con
    Set GetActive = GetActive(f.ActiveControl)
    ElseIf TypeName(con) = "MultiPage" Then
    Dim mp As MultiPage
    Set mp = con
    Set GetActive = GetActive(mp.SelectedItem)
    ElseIf TypeName(con) = "Page" Then
    Dim pg As Page
    Set pg = con
    Set GetActive = GetActive(pg.ActiveControl)
    ElseIf TypeName(con) = "Frame" Then
    Dim fr As Frame
    Set fr = con
    Set GetActive = GetActive(fr.ActiveControl)
    Else
    Set GetActive = con
    End If
    End Function

    AE

  • ArchElf
    addikt

    szóval, itt több rendbeli félreértés van.
    1. maga a KeyCode úgy tűnik, nem vihető át, mert rendszerváltozó, hiába teszem public-ká, akkor is üres lesz, amint másik sub-ba ugrok. természetesen tudom, hogy egy felhasználói publikus változóba kiíratva átvihető, alkalmaztuk is, csak reménykedtünk, hátha mégis lehet az eredetit használni, merthogy úgyis azt kínálja fel a rendszer, mikor egy új keydown subot létrehozol. megspóroltunk volna egy saját változót, meg minden ilyen subban egy plusz sort.
    2. honnan jön a tb változó? mert mi pont azt szeretnénk megspórolni, hogy minden keydown subban konkrétan (az adott vezérlő nevével/indexével) értéket kelljen neki adni. mivel ez esetben ez a rész mindegyik subban eltérő lesz, azaz nem lehet simán másolni, oda kell figyelni.
    magyarul én a set tb=TextBox1 helyett a set tb=ActiveControl kifejezést szeretném használni, mert ez univerzális. csakhogy nem működik, mert az ActiveControl a VB szerint nem a TextBox1, amiben épp kavarok, hanem a MultiPage1. ez a problem.
    3. A "Locked"-nek az az értelme, hogy így egyszerűen nem íródik be a textboxba a hibás karakter, és passz, megy tovább.
    4. "Changed" az mi? Én nem találom. Ha a "Change"- re gondolsz, akkor azért a KeyDown-ból megy az egész, és nem a Change-ből, mert a KeyDown még a karakter megjelenése _előtt_ lefut, a Change meg csak utána (tehát ott már csak törölni tudnék).

    masked textbox hogy megy? a Format()-ra gondolsz?

    Amúgy VB6, vagy VB.NET?

    Általánosságban - kicsit olvasgassál még a változók hatóköréről...

    1. Hiába teszed publiccá, a függvény újra létrehozza változót és az felülcsapja (érvényességben) a globálisan létrehozott azonos nevű változót. A függvénynek át kell adni a változót. A globális változók használatát meg el kell felejteni.
    2. Ha megnézed a függvény paramétereit, ott van deklarálva a változó. A függvényt meg úgy hívod meg, hogy:
    csakszam TextBox1, KeyCode
    ActiveControl - le kell ellenőrizni, hogy az aktuális ActiveControl TextBox-e és csak akkor kell lefuttatni a függvényt.
    3. ez inkább csak hack... de azért nem rossz. De gondolom vágólap meillesztésre nem működik.
    4. MaskedTextBox: vb6, vb.net
    (bocs,. vb6 alatt MaskedEdit)

    AE

  • ArchElf
    addikt

    Üdv!

    Újabb fogós kérdés merült fel.

    Egy multipage egyik lapján egy különböző frameeken belűl vannak nekem egy vezérlőim.

    A vezérlőkbe beírható karaktereket szeretném korlátozni. Mivel egy részüknél ugyan az a korlátozás szükséges (vagyis csak számok írhatóak be), subrutinná tettem egy eddig vezérlőnként alkalmazott eljárást.

    Sub csakszam()

    '8: backspace, 9: tabulátor, 13: enter, 17: Ctrl, 32: space, 46: delete, 48-57: felső számok, 86: v, 96-105: numpad számok, 109: numpad mínuszjel, 110: numpad pont, 186: é, 187: ó,
    '188: vessző, 189: kötőjel, 190: pont, 191: ü, 192: ö, 219: ő, 220: ű, 221: ú, 222: á, 226:í

    If KeyCode = 8 Or KeyCode = 46 Or _
    (KeyCode >= 48 And KeyCode <= 57) _
    Or (KeyCode >= 96 And KeyCode <= 105) Then
    TextBox1.Locked = False
    Else
    TextBox1.Locked = True
    End If

    End Sub

    A vezlőnél pedig ez van megírva:

    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Ügyirat alszámba csak számot enged írni

    csakszam

    End Sub

    Gondolom sejtitek, hogy ez így nem működőképes (vagyis nem általánosságban), különben nem írtam volna.

    Gondoltam könnyen általánossá tehető a dolog egy huszárvágással, mert a "Textbox1" helyére egyszerűen bevezetek egy változot, amely mindig az aktuális vezérlő nevét helyettesíti.
    Azonban úgy nem működőképes a dolog.
    Egyik okát tudom: a KeyCode "rendszerváltozó" tartalma nem vihető át egy másik rutinba csak egy változón keresztül (mondjuk azt nem értem miért nem tehető a KeyCode rendszerváltozó egyszerűen publikussá, erre is várok valami okosat ha lehet). Ezt még meg is oldottam.

    NADE, azt mondja meg valaki, hogy hogyan lehet kinyerni, hogy melyik az aktív vezérlő????
    Mert ugyan is ha beteszem mondjuk, hogy:

    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Ügyirat alszámba csak számot enged írni

    x=ActiveControl
    csakszam

    End Sub

    akkor az x értéke furcsa módon nem az lesz, hogy "Textbox1", hanem az, hogy "Multipage1".

    Pedig a súgója azt állítja, hogy az aktív vezérlő nevét adja eredményül, már pedig én erősen a Textbox1-ben buzerálódom.

    Várom a megoldási javaslatokat, esetleg konkrét kódrészlettel is.
    Az is érdekelne (ahogy fentebb is írtam, hogy ha meg tudja mondani valaki), hogy a KeyCode rendszerváltozó miért nem tehető publikussá.

    Köszönöm a segítségeteket!!!!!!!

    Átvihető, csak át kellene adni neki.
    A változók a VB-ben nem globálisak (hacsak nem annak lettek definiálva), a hatókörük csak az adott szerkezetre (szubrutinra, osztályra) vonatkozik.
    így add át neki:
    Sub csakszam(tb As TextBox, kc As Integer)
    '8: backspace, 9: tabulátor, 13: enter, 17: Ctrl, 32: space, 46: delete, 48-57: felső számok, 86: v, 96-105: numpad számok, 109: numpad mínuszjel, 110: numpad pont, 186: é, 187: ó,
    '188: vessző, 189: kötőjel, 190: pont, 191: ü, 192: ö, 219: ő, 220: ű, 221: ú, 222: á, 226:í
    If kc = 8 Or kc = 46 Or _
    (kc >= 48 And kc <= 57) _
    Or (kc >= 96 And kc <= 105) Then
    tb.Locked = False
    Else
    tb.Locked = True
    End If
    End Sub

    Amúgy miért locked, ennek így semmi értelme nincs???

    Én inkább a Changed-et használnám és megvizsgálnám, hogy az összes karakter érvényes-e (vagy egyszerűen használnék masked textbox-ot)...

    AE

  • ArchElf
    addikt

    Annuitásos módszerrel ki kell számolnom a hitel törlesztőrészletet egy adott futamidőre. Ez excelben a célérték kereséssel könnyen megoldható. Azonban nekem úgy kell megírnom a programot, hogy excel beágyazás ne legyen benne.

    Addig sikerült eljutni, hogy ha a kintlévőség a futamidő végére nem nulla akkor case select állapotokkal meghatározom, mennyit korrigáljon (mennyit adjon hozzá / vegyen el) a törlesztőrészleten. Pl:

    Select Case kintlévőség
    Case 500 To 1000
    törlesztő += 0.1
    stb.

    Ez így baromi hosszú programkódot eredményez. Ezt kellene nekem valami matematikai összefüggés segítségével redukálnom. Bármilyen konstruktív ötletet jöhet, pl. segítenétek megérteni, hogyan is működik a goal seek fv. az is nagy segítség lenne (azt hiszem).

    Annuitásos módszernek van leírása, vagy matematikai modellje (kell hogy legyen)...?

    AE

  • ArchElf
    addikt

    Nemrég kezdtem el VB.NET-t tanulni VS 2008 E-n. A feladat egy hiteltörlesztő program elkészítése lenne, ami a megadott paraméterek alapján kiszámítaná a törlesztés összegét havi bontásban és ezt táblázatos formában jelenítené meg.

    Egyelőre annyit szeretnék, hogy a megadott adatokat (dátum, futamidő, stb.) kiírassam a táblázat első sorába. Eddig jutottam a dátummal:

    Private Sub Szamolas() Handles btnCalculate.Click

    Dim Datum As Date
    Dim Grid As String

    Datum = DateTimePicker1.Text

    Grid = Datum

    End Sub

    Tisztában vagyok vele, hogy a Grid = Datum nem jó de a neten nem tudtam kiszűrni ezt kis részt ami nekem kell.

    VS2008 mellé használd az MSDN-t, és rögtön tudod, melyik osztály mit csinál.
    Amúgy a leít kódodban nem az a rossz, sor, hanem az aláhúzott:
    Private Sub Szamolas() Handles btnCalculate.Click
    Dim Datum As Date
    Dim Grid As String
    Datum = DateTimePicker1.Text
    Grid = Datum
    End Sub

    A Date (azaz DateTime) szerintem nem eszi meg közvetlenül a string-et, hanem fel kell dolgozni a Parse függvénnyel. Ráadásul a DateTimePicker-nek van közvetlen property-je a Dátum lekérdezásáre, ez a Value. Ha pedig DateTime-ot akarsz String-gé formázni, arra (általában minden más osztálynál is) ott a ToString metódus, ami az bject osztályból öröklődik:
    Private Sub Szamolas() Handles btnCalculate.Click
    Dim Datum As DateTime
    Dim Grid As String
    Datum = DateTimePicker1.Value
    Grid = Datum.ToString()
    End Sub

    Ja, és ez még semmit nem ír ki sehová :)

    AE

  • ArchElf
    addikt

    Előző félévben C++ -ot tanultam az egyetemen, ebben a félévben VB lesz.Mennyire piacképes a nyelv?Szerintem a C++ -ot érdemesebb lett volna folytatni, szélesebb felhasználást biztosít.Vagy rosszul gondolom, jöhetnek a Pro és Kontra érvek :).Egyébként Gazdaság Informatika szakra járok.

    Ha esetleg Risk/Controlling területre kerülsz, akkor a VBA jól fog jönni (Excel/Access alapú elemző "szoftverek" vannak szinte mindenhol) :(

    AE

  • ArchElf
    addikt

    Igen, Access Űrlapon egy gomb.
    A Bontás Pending a Fájl név.
    a probalkozasok, a kiertesites és a kiertesito az űrlapon található textBoxok.
    Egyébként ide menti, hogy ki és mikor "próbálkozott".
    3 próba után lezárjuk.
    Ezeket is deklaráljam? (Eddig működött nélküle)

    A user() pedig Module1-ben van:
    Declare Function GetUserName Lib "advapi32.dll" Alias _
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) _
    As Long
    Function user()
    Dim s As String
    Dim cnt As Long
    Dim dl As Long
    Dim CurUser As String
    cnt = 199
    s = String(200, 0)
    dl = GetUserName(s, cnt)
    If dl <> 0 Then
    CurUser = Left$(s, cnt - 1)
    Else
    CurUser = ""
    End If
    user = CurUser
    End Function

    Ezzel adom meg az aktuális felhasználó NT login nevét. (keresztnev.vezetkenev)

    Asszem megvan:
    Excelben a celláknak van Value propery-je, de a form elemeknek (pl textbox) nincs, csak Caption vagy Text (text a szerkeszthető elemeknek pl TextBox, caption a nem szerkeszthetőknek pl. Form, Label, Button). Ezt problémázza szerintem a script futtató...

    AE

  • ArchElf
    addikt

    nem kötözködésképpen, és nem is vagyok benne 100%-ig biztos, de szerintem az LPT-s nyomtatáshoz sem kell windows API. Legalábbis eléggé meglepődnék, ha kellene és vbs nem tudna.

    Lehet, hogy nem kell a nyomtatáshoz win api (azaz megoldható másképp is), de ez tutira nem működik VBS alatt:
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Public Declare Sub PortOut Lib "io.dll" (ByVal Port As Integer, ByVal Value As Byte)
    Public Declare Function PortIn Lib "io.dll" (ByVal Port As Integer) As Byte

    Innentől kezdve hiába nevezi át a fájlt, nem fog futni a WSH-ban...

    AE

  • ArchElf
    addikt

    Most addig eljutottam, hogy néhány helyen már futnak a scriptek, de még mindig nem mind.
    pl ez sem:

    Private Sub Command34_Click()
    Dim proba As Long
    'Dim sortores As String
    'sortores = ""
    hivas = MsgBox("Hívtad a kontaktot?", vbQuestion + vbYesNo, "Megerősítés")
    If hivas = vbNo Then
    GoTo Vege
    End If
    If probalkozasok.Value > 0 Then
    sortores = vbCrLf
    End If
    probalkozasok.Value = probalkozasok.Value + 1

    nvf = MsgBox("Sikerült elérni az ügyflelet?", vbQuestion + vbYesNo, "Kérdés")
    If nvf = vbYes Then
    hozzafuz = InputBox("Eredmény", "Kérlek add meg, hogy mire jutottál")
    lezarass = MsgBox("Lezáruk a jegyet sikeres kiértesítéssel?", vbQuestion + vbYesNo, "Lezárás")
    If lezarass = vbYes Then
    Lezarva = 2
    MyFile = "BP.txt"
    fnum = FreeFile()
    Open MyFile For Append As fnum
    Write #fnum, Now(), user(), "M", ID, Lezarva
    Close #fnum
    End If
    Else
    hozzafuz = "Nem vette fel"
    End If
    Kiertesites_eredmenye = Kiertesites_eredmenye & sortores & probalkozasok & ". kiértesítés: " & hozzafuz
    If probalkozasok.Value = 1 Then
    Kiertesito1 = user()
    Kiertesites1 = Now()
    End If
    If probalkozasok.Value = 2 Then
    Kiertesito2 = user()
    Kiertesites2 = Now()
    End If
    If probalkozasok.Value = 3 Then
    Kiertesito3 = user()
    Kiertesites3 = Now()
    lezaras = MsgBox("Ez volt a harmadik próbálkozás! Lezáruk a jegyet sikertelen kiértesítéssel?", vbQuestion + vbYesNo, "Lezárás")
    If lezaras = vbYes Then
    Lezarva = 3
    MyFile = "BP.txt"
    fnum = FreeFile()
    Open MyFile For Append As fnum
    Write #fnum, Now(), user(), "M", ID, Lezarva
    Close #fnum
    End If
    End If
    Vege:
    End Sub

    Hol van ez futtatva (access, ha jól rémlik?)

    Hirtelen ezeket találtam:
    - Mi az a Bontás Pending?
    - GOTO értelmetlen, használj Exit Sub-ot
    - probalkozasok hol kap értéket, nincs átadva a Sub-nak, ez valami globális objektum?
    - user() implementálva van?
    - Ezeket mire használod?
    Kiertesito1, Kiertesites1, Kiertesito2, Kiertesites2, Kiertesito3, Kiertesites3
    - indentálásra figyelj:
    If akármi Then
    'művelet 1
    'művelet 2
    Else
    'művelet 3
    'művelet 4
    End If

    így legalább olvasható lesz a kód ;)
    - használj Option Explicit-et (minden változót kötelező deklarálnod Dim akármi-vel, de legalább véd az elgépelés és a túlzott mértékű változó használat ellen)

    AE

  • ArchElf
    addikt

    Most addig eljutottam, hogy néhány helyen már futnak a scriptek, de még mindig nem mind.
    pl ez sem:

    Private Sub Command34_Click()
    Dim proba As Long
    'Dim sortores As String
    'sortores = ""
    hivas = MsgBox("Hívtad a kontaktot?", vbQuestion + vbYesNo, "Megerősítés")
    If hivas = vbNo Then
    GoTo Vege
    End If
    If probalkozasok.Value > 0 Then
    sortores = vbCrLf
    End If
    probalkozasok.Value = probalkozasok.Value + 1

    nvf = MsgBox("Sikerült elérni az ügyflelet?", vbQuestion + vbYesNo, "Kérdés")
    If nvf = vbYes Then
    hozzafuz = InputBox("Eredmény", "Kérlek add meg, hogy mire jutottál")
    lezarass = MsgBox("Lezáruk a jegyet sikeres kiértesítéssel?", vbQuestion + vbYesNo, "Lezárás")
    If lezarass = vbYes Then
    Lezarva = 2
    MyFile = "BP.txt"
    fnum = FreeFile()
    Open MyFile For Append As fnum
    Write #fnum, Now(), user(), "M", ID, Lezarva
    Close #fnum
    End If
    Else
    hozzafuz = "Nem vette fel"
    End If
    Kiertesites_eredmenye = Kiertesites_eredmenye & sortores & probalkozasok & ". kiértesítés: " & hozzafuz
    If probalkozasok.Value = 1 Then
    Kiertesito1 = user()
    Kiertesites1 = Now()
    End If
    If probalkozasok.Value = 2 Then
    Kiertesito2 = user()
    Kiertesites2 = Now()
    End If
    If probalkozasok.Value = 3 Then
    Kiertesito3 = user()
    Kiertesites3 = Now()
    lezaras = MsgBox("Ez volt a harmadik próbálkozás! Lezáruk a jegyet sikertelen kiértesítéssel?", vbQuestion + vbYesNo, "Lezárás")
    If lezaras = vbYes Then
    Lezarva = 3
    MyFile = "BP.txt"
    fnum = FreeFile()
    Open MyFile For Append As fnum
    Write #fnum, Now(), user(), "M", ID, Lezarva
    Close #fnum
    End If
    End If
    Vege:
    End Sub

    Hol hal el?

    írj be az elejére egy
    On Error Resume Next-et

    A végére meg ezt:
    If Err Then
    MsgBox(Err.Number & vbCrLf & Err.Description)
    Err.Clear()
    End If
    On Error Goto 0

    Ez majd kiírja, mi a hiba, akkor lehet majd egy kicsit pontosabban ráközelíteni a problémára...

    AE

  • ArchElf
    addikt

    de miért kell windows API függvény? Emberünk azt kérte, hogy ne csak office-on belül tudja használni az összehozott programját. Erre javasoltam a vbscriptet.
    Persze csinálhat belőle VB.Net-et is (vagy tőlem akár powershell-t, vagy bármit), csak a vbscript készítéshez elég egy file átnevezés, és máris futtathatja bárhonnan.

    Csak van ott benne egy PortIn, meg egy PortOut (IO.DLL-ből), még ha a Sleep megoldható is máshogy...

    AE

  • ArchElf
    addikt

    Javaslom neked a vbscriptet.

    Vbscriptben Windows API függvény??? :Y

    Közvetlenül nem, kell írni hozzá egy COM Wrappert (legyen akár natív, akár .NET assembly). Pár dologra még oda kell figyelni a wrappelésnél, pl. struct nem használható. Ha valaminek a visszatérési vagy bemeneti értéke struct, akkor azt vagy szét kell szedni a com hívásban, vagy be kell csomagolni egy osztályba (és a wrapperben kibontani).

    Oly: Lehet, hogy segít...

    AE

  • ArchElf
    addikt

    Sziasztok.

    Mivel nem tudjuk a területi beállításokat állítani minden gépen, ezért valami más megoldásra lenne szükségem.

    Próbálkoztam, hogy az én gépemen is átállítom angolra, de nem történt semmi, majd mikor visszaállítottam magyarra, akkor az én gépemen sem ment már a dolog.
    Sőt!
    Ami eddig ment (másik adatbázisban), az sem megy most már.

    Van valami alternatív lehetőség, ami területi beállítástól független?
    Sajnos ez az alkalmazás több 100 gépen (PC, Terminal, Laptop) fog futni, és nem tudjuk máshogy megoldani.

    Ha kell, újra építem az egészet, csak mondjátok el hogy mire figyeljek...
    Milyen karaktereket ne használjak, vagy mi miatt akadnak ezek össze?

    ELőre is köszönöm.

    Script elején GetLocale()-al le tudod kérdezni az aktuális terület beállítást, utána
    SetLocale(id)-val beállítod a kívántat, majd a script végén visszaállítod az eredetit...

    AE

  • ArchElf
    addikt

    Ez így tökéletesen működik:

    Class RelStore
    'Cache Time 5 min

    Private d_Timer
    Private b_Member
    Private b_Init
    Private VALIDITY

    Private Sub Class_Initialize
    VALIDITY = 300
    d_Timer = 0
    b_Member = False
    b_Init = False
    End Sub

    Public Function Initialize(Membership)
    d_Timer = Timer
    b_Member = Membership
    b_Init = True
    End Function

    Public Sub Invalidate()
    Class_Initialize
    End Sub

    Public Function IsMember()
    IsMember = b_Member
    End Function

    Public Function IsValid()
    IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
    End Function
    End Class

    Set rs = new RelStore
    DebugWrite rs.isvalid

    Szerintem ez: htCache(SearchString) nem RelStore classt ad vissza.

    Rájöttem közben mi lehet a probléma...
    Mivel a class futásidőben generálódik, így lehet, hogy két futáskor nem ugyanazt a signature-t adja neki a fordító. Így hiába tárolom el az osztályt egy ideiglenes tárban (a memóriában) két futtatás között, a következő futtatáskor már "más" RelStore class generálódik meg, amire a fordító nem talál leírást, és nem tud hozzáférni a metódusokhoz sem.
    Megnéztem közben, a helytelenül visszaadott osztályoknál a
    VarType(rs) 13-at ad vissza:
    vbDataObject - 13 - A data-access object
    A TypeName meg Unknown-t... :(
    Kénytelen leszek sima stringekkel dolgozni

    AE

  • ArchElf
    addikt

    Hashtable nélkül működik az isvalid?
    Hashtable minek kell? Tömbön belüli keresést akarsz gyorsítani?
    Esetleg hátha tudnánk alternatív megoldási javaslatokat, ha leírod, mi is a célod.

    Az a probléma, hogy az adatok megőrzéséhez kell kell valami struktúra, ami könnyen kereshető. Vbs-ben csak dictionary van, amit nem tudom lehet-e keresni.
    A hashtable-t beteszem egy ideiglenes tárba (ScriptContext), és onnan olvassa be a következőként futó script.

    AE

  • ArchElf
    addikt

    Ja és próbáltam már így is

    Valószínűleg nem az IsValid()-el van probléma, hanem hogy a htCache(SearchString) nem megfelelő típust vagy esetleg Nothing-ot ad vissza. Első lépésben vizsgálnám Nothing-ra:
    if (rs is Nothing) then
    'ide pl. valami kiiratás
    End If

    Asszem passzolom ezt a class-os dolgot.
    String lesz belőle, aztán majd vagdosom és parse-olom...

    AE

  • ArchElf
    addikt

    Gyors VBScript kérdés...
    Csináltam egy kicsi osztályt (alant), és egy Hastable-be bepakolom (tudom talán kicsit meredek). A problémám az, hogy az egyik függvényt nem hajlandó meghívni a futtatókörnyezet...
    Osztály:
    Class RelStore
    'Cache Time 5 min

    Private d_Timer
    Private b_Member
    Private b_Init
    Private VALIDITY

    Private Sub Class_Initialize
    VALIDITY = 300
    d_Timer = 0
    b_Member = False
    b_Init = False
    End Sub

    Public Function Initialize(Membership)
    d_Timer = Timer
    b_Member = Membership
    b_Init = True
    End Function

    Public Sub Invalidate()
    Class_Initialize
    End Sub

    Public Function IsMember()
    IsMember = b_Member
    End Function

    Public Function IsValid()
    IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
    End Function
    End Class

    Ahol kicsomagolnám a Hastable-ből:
    If htCache.ContainsKey(SearchString) Then
    Set rs = htCache(SearchString)
    If rs.IsValid Then
    IsMember = rs.IsMember
    Else
    IsMember = False
    htCache.Remove SearchString
    End If
    Else
    DebugWrite "Object NOT found in cache: " & SearchString
    End If

    Hibaüzenet:
    An error occurred on line 97 while executing script 'User Group Check'
    Source: Microsoft VBScript runtime error
    Description: Object doesn't support this property or method: 'rs.IsValid'

    Ja és próbáltam már így is
    Public Property Get IsValid
    IsValid = (b_Init AND ((Timer > d_Timer + VALIDITY) OR (Timer < d_Timer)))
    End Property

    AE

  • ArchElf
    addikt

    Sziasztok

    Jobb helyet nem találtam ennek. :(

    Ezek a hibaüzik miért lehetnek?
    Ez egy Access adatbázis űrlapján lévő macro lenne.
    Van olyan gép, amin megy a dolog, van amin nem.
    Valami beállítás?


    Angol/Magyar Acces esetleg (egyiken ez, másikon az)?

    AE

  • ArchElf
    addikt

    sajna value-vel sem megy ugyan azt dobja ki, kérdezz meg bármit válaszolok mindenre csak már nem ez az első makró aminél ezt a hibát kapom :F

    For i = fk + 1 To ssz
    If (Sheets(2).Cells(i, eo).Value <> "") Then
    For j = fk + 1 To ssz
    If (Sheets(1).Cells(j, mo1).Value = Sheets(2).Cells(i, mo1).Value) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
    For k = 1 To osz
    Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
    Next k
    End If
    Next j
    End If
    Next i

    Próbáld meg elötte kiválasztani a sheet-et és a cellát és utána lekérdezni. Esetleg nézz át az Excel topicba, ott sokkal több tapasztalat van az excel makrók tekintetében.

    AE

  • ArchElf
    addikt

    sziasztok!

    Elkezdtem egy táblaösszemásoló makrót megírni, még kezdő vagyok nagyon, ezt kérem figyelembe venni, de az a problémám hogy mindig a jó kis runtime error 1004 jön ki a program ciklusainál

    For i = fk + 1 To ssz
    If (Sheets(2).Cells(i, eo) <> "") Then <----------------itt áll le
    For j = fk + 1 To ssz
    If (Sheets(1).Cells(j, mo1) = Sheets(2).Cells(i, mo1)) And (Sheets(1).Cells(j, mo2) = Sheets(2).Cells(i, mo2)) And (Sheets(1).Cells(j, mo3) = Sheets(2).Cells(i, mo3)) Then
    For k = 1 To osz
    Sheets(1).Cells(j, k) = Sheets(2).Cells(i, k)
    Next k
    End If
    Next j
    End If
    Next i

    fk: táblafejléc kezdete
    eo: ellenőrző oszlop, ha üres akkor meg sem kell vizsgálni
    mo1,2,3: adatoszlopok száma, amiket meg kell vizsgálnia

    ha tudtok segíteni akkor előre is köszönöm! :)

    így próbáltad?
    (Sheets(2).Cells(i, eo).Value
    Ja és használj kódbeillesztést, mert tagolatlan kódot kínszenvedés olvasni...
    A változónevek sem mondanak amúgy sokat...

    AE

  • ArchElf
    addikt

    Mert c++ meglehet oldani ?:O Amit szeretnék

    Azért mert soros/párhuzamos porti kezelést szeretnél linux alatt.
    Mivel linux alá dolgozol célszerű ott támogatott nyelvet használni, ami lehet C vagy C++. De ha nincs kedved hozzá, használhatsz akár python-t is (ott is van soros portos kommunikációt támogató csomag: PySerial - ez tartalmaz parallel porti modult is)

    AE

  • ArchElf
    addikt

    Én pont azt szeretném hogy a gép legyen a mikro vezérlő hogy ne keljen pic-et sütni , akkor minden képpen kell egy ezekhez hasonló [link]

    Akkor mégis látogass át a C topicba ;)

    AE

  • ArchElf
    addikt

    Nem értitek. A Basic Stamp a mikrovezérlő programnyelve.
    Én mondtam, hogy keveredik a szezon a fazonnal :))
    Azaz a Basic Stamp-ben írt program nem a számítógépen fog futni, hanem a mikrovezérlőn.
    Csak annyi kell, hogy fel kell telepíteni a Basic Stamp editort (én csak windows-os verziót találtam, úgyhogy ubuntu bukónak látszik), majd USB-n keresztül összekötöd a cuccot a PC-vel, és feltöltöd rá a megírt programot.
    Erre mondtam, hogy ebben kb. bárki fog tudni segíteni, akinek van Parallax mikrovezérlős robotja kéznél :C Tele van a világ ilyenekkel, nem? :DD
    A programozás rész sem lesz bonyolult, mert ezek a mikrovezérlők nagyon buták.
    Ez az LPT, meg soros port buzerálás is valami alapvető félreértés lesz, mivel ezeken a cuccokon USB port van (már egy pár éve), akkor miért kellene már rég nem létező portokkal hülyéskedni?

    Van egy mérnök informatikus diplomám is :) maszekban néha szoktam robotokhoz is programot írni, legutóbb haletető robothoz írtam menedzsment felületet .Net WPF-ben, igaz az txt fájlokkal kommunikált a PC-s adatbázissal. Basic Stamp-pel még életemben nem találkoztam, csak hallottam róla. A többi robotos munkám is mind USB porton keresztül kommunikál.

    Ehh :DDD

    AE

  • ArchElf
    addikt

    Ubuntut használok ,de windows is feltehetek ha egyszerűbb abba , őő ezt pontosan nem (alacsony-magas jelszint <- ez azt jelenteni hogy milyen erősen küldje az impulzusokat?

    Ubuntu + Basic? WTF???
    Szerintem nézz át a C topicba :D

    AE

  • ArchElf
    addikt

    De tudsz benne majd segíteni , és lehet akkor feszültséget módosítani? Egy uln2803 ic-m van .

    Feszültséget nem lehet módosítani (a hagyományos értelemben) LPT-n; illetve be-ki állapot van (alacsony-magas jelszint).
    Milyen OS-alá készülne a program?

    AE

  • ArchElf
    addikt

    Röviden egy olyan program szeretnék ami az ltp portot vagy a soros portott kinyíitja egy időre és a megadott portott . Esetleg lehetne olyat hogy a leadot feszültséget szabályozni?

    Serialra ott az mscomm32.dll (vagy .ocx, vagy valami hasonló), formra kipakolható - nem túl okos, de használható. LPT-re google (kapásból nem tudok biztos megoldást mondani).

    AE

  • ArchElf
    addikt

    Szerintem keverjük a szezont a fazonnal.
    Amiről te beszélsz az egy bizonyos mikrovezérlő BASIC Stamp programnyelve.
    Namármost nem találsz olyan embert, aki ezt ismeri, egy-két éppen ezt használón kívül.
    Másrészt maga a szintaktika pofonegyszerű basicnek tűnik, szóval egy ilyen eszközzel a soros portján, és a szükséges fejlesztői kereteszközöket feltelepítve kb. bármelyik programozó tud neked segíteni a beüzemelésben.

    Pfff... a stamp code rész felett el is siklottam :D
    Azt hittem valami pszeudo-kód :DDD

    Bár jobban belegondolva még megvalósítható is volna, csak a megfelelő dll-exportok hiányoznak :)

    AE

  • ArchElf
    addikt

    Üdv lenne egy olyan kérdésem hogy szeretnék építeni egy robotott az elektronika megvan csak a program hiányzik . Adtak egy példált hozzá de nem akar lefutni mi a progbléma? A pdf tartalmát kimásoltam (angol)

    A real-world example
    Francis Rogers of Sun City West, Arizona wrote me to describe an application he’d like
    to build with the Stamp. He has a PC with barcode software that can read membership
    cards for his S.C.W. Metals Club. The barcode software generates a code through the PC
    serial port when it’s presented with a valid card. Mr. Rogers would like the Stamp to read
    this code and energize a relay to unlatch a door.
    This fits perfectly with the theme of this month’s column. Figure 6.3 is the schematic.
    I’ve made some assumptions about Mr. Rogers’ barcode software: that it can be set to
    output at 2400 baud, and that all valid cards output some common code for the Stamp to
    recognize.
    Thanks to the serial-input (Serin) command’s built-in “qualifier” feature, the entire
    program takes just a few lines of Stamp code:

    loop:
    low 7 ' Pin 7 low to latch door (relay open)
    serin 0,N2400,("OK") ' Watch serial input until "OK" rec'd.
    high 7 ' Pin 7 high to unlatch door (relay closed).
    pause 5000 ' Wait 5 seconds. Latch door and resume
    goto loop ' Watching serial input.

    Of course, Mr. Rogers will have to substitute the actual password for “OK” in the
    program above.
    That’s it for this month. Next time, we’ll look at a nifty IC that lets the Stamp transmit
    and receive DTMF tones (telephone touch tones). In addition to obvious telephone
    applications, DTMF can be used as a form of low-speed, high-reliability data transfer.
    Stay tuned!

    The Nuts and Volts of BASIC Stamps (Volume 1) • Page 57

    Kód nélkül nem túl egyszerű erre bármit is mondani...

    AE

  • ArchElf
    addikt

    Üdv,

    segítségeteket kérném Excel VB makróban. A nyelvet nem ismerem, bár sikerült alapszinten megértenem a szintaxisát, viszont a problémám a (matematikai) logikájával van ennek a feladatnak.
    A lényeg az, hogy a feladat megoldása HIBÁS. Magával az algoritmussal van baj, gyanítom az, hogy létezik ennél optimálisabb megoldás.
    A lényeg az lenne, hogy ki kellene javítani optimálisra.
    Fontos lenne, aki tud, kérem nézzen rá. :)

    Adott a következő feladat:
    Adott egy híd, amin N ember át szeretne kelni. Azt tudjuk, hogy nem feltétlenül egyenlő sebességgel képesek haladni. Az egyes emberek átjutásához szükséges időket jelölje T(I). Egyszerre csak ketten tudnak átkelni a hídon. Sötét van, ezért szükségük van egy lámpásra. Leghamarabb mennyi idő alatt tudnak mindnyájan a túlsó partra jutni? (NE feledjük, a lámpást az egyik átjutottnak vissza kell hoznia, hogy a többiek is lássanak az átkelés során!)

    Van hozzá egy megoldás leírása:
    Látható, hogy 3 ember esetén a leggyorsabb bárki mással átmehet, ő jön vissza, és aki még maradt azzal újra átmegy a hídon. Az átkeléshez szükséges idő összesen T(1)+T(2)+(T(3) feltéve, hogy az embereket az átkelés sebessége szerint csökkenőbe (ez időben növekvőt jelent) rendeztük. Azaz pl. átmegy az 1. és a 2. (Idő: T(2)), visszajön az 1. (Idő: T(1)), és végül átmegy az 1. és a 3. (Idő: T(3)). Ha 4 ember van, akkor ez helyesen pl. úgy alakul, hogy: átmegy az 1. és a 2., visszajön az 1., átmegy a 3. és a 4., visszajön a 2., és végül átmegy az 1. és a 2. Észrevehető, hogy az 1. és a 2. tulajdonképpen átjuttatja a 3. és 4. párosát, és ehhez pontosan T(1)+2*T(2)+T(4) időre van szükség. majd végül ők is átmennek (Idő: T(2)). Ha az átkelők száma páros, akkor - az előzőekből helyesen következtetve - úgy tudjuk kiszámolni, hogy mennyi időre van szükség, hogy a leglassúbb idejéből elindulva minden másodikat összegzünk egészen T(4)-ig, és ehhez annyiszor T(1)+2*T(2)-t adunk hozzá, amennyi az átjuttatott párok száma. Végül ehhez még hozzáadunk T(2)-t. Páratlan esetben a 3.-at gondolatban kivéve páros esethez jutunk, és az így kapott összidőhöz még T(1)+T(3)-at hozzáadunk.

    És itt van rá egy kész megoldás (ami feltételezem az előző megoldás leírás alapján készült):
    Itt van a hibás megoldás (xls)

    A makró kód a következő:
    Dim N As Integer ' Az átkelni szándékozók száma
    Dim Lap As Object

    Dim S As Long
    Dim Allando As Integer
    Dim I As Integer, J As Integer
    Dim A1 As Integer, A2 As Integer

    Set Lap = Sheets("Alapadatok")

    N = Lap.Cells(1, 1).CurrentRegion.Rows.Count - 1

    Lap.Copy After:=Sheets(Sheets.Count)
    Sheets("Alapadatok (2)").Name = "Átkelés"

    Range(Cells(2, 1), Cells(N + 1, 1)).Select
    Selection.Sort Key1:=Cells(2, 1), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal

    Cells(2, 2).Activate
    A1 = Cells(2, 1).Value
    A2 = Cells(3, 1).Value
    Allando = 2 * A2 + A1
    S = A2
    J = 0
    For I = N + 1 To 5 Step -2
    J = J + 2
    S = S + Allando + Cells(I, 1).Value
    Cells(J, 3).Value = A1 & " + " & A2
    Cells(J, 4).Value = A1
    Cells(J, 5).Value = A1 + A2
    Cells(J + 1, 3).Value = Cells(I - 1, 1).Value & " + " & Cells(I, 1).Value
    Cells(J + 1, 4).Value = A2
    Cells(J + 1, 5).Value = A2 + Cells(I, 1).Value
    Next

    If N Mod 2 = 1 Then
    S = S + Cells(4, 1).Value + Cells(2, 1).Value
    J = J + 2
    Cells(J, 3).Value = A1 & " + " & A2
    Cells(J, 4).Value = A1
    Cells(J, 5).Value = A1 + A2
    Cells(J + 1, 3).Value = A1 & " + " & Cells(4, 1).Value
    Cells(J + 1, 5).Value = Cells(I, 1).Value
    Else
    J = J + 2
    Cells(J, 3).Value = A1 & " + " & A2
    Cells(J, 5).Value = A2
    End If

    Cells(2, 2).Value = S

    End Sub

    Előre is köszönöm a segítséget.

    nem kell ehhez makró, egy cellában ki lehet számolni az eredményt:
    - ha számok mennyiságe = 1, akkor az össz idő = az egy szám lesz
    - ha számok mennyiságe = 2, akkor az össz idő = a nagyobb szám lesz
    - ha számok mennyiságe > 2, akkor az össz idő = az összes idő összege minusz a legrövidebb idő + (az átkelők száma - 2) szorozva a legrövidebb idővel (magyarul saját magán kívül mindenkit átkísér, és utána viszajön amíg van valaki a túlparton)
    Függvényben (kicsit egyszerűsítve):
    =IF(COUNT(A:A)<2; SUM(A:A);(COUNT(A:A)-3)*MIN(A:A)+SUM(A:A))

    AE

  • ArchElf
    addikt

    Ezek nagyon jó ötletek! A Triggeres verzió lesz szerintem, ha nem sikerül SQL nélkül megoldani. Az SQL mellőzését úgy értettem, hogy nem kell folyamatosan letölteni az adatokat, mert nem történik jelentős változás a táblában.

    Például: Egy ListView-ben vannak tárolva hibabejelentések, amiket egy kezelőnek fel kell dolgoznia. De ezt a táblát, amiből a program kiolvasta a listát, több felhasználó is eléri. Ha egy felhasználó elkezd dolgozni az adott hibabejeltéssel (SQL tábla X. sora), akkor a másik gép listájában pl. inaktiválja azt a sort, nem tudja kezelni pl egy duplaklikkel. Az SQL módosítása nem lenne szükséges, csak annak a felhasználónak, aki elkezdett vele dolgozni, ott meg értelem szerűen nem lehet kihagyni a lekérdezéseket.

    Eltekintve az SQL háttérről, az érdekel, hogy hálózaton belül van-e valami megoldás másik gépen lévő, ugyanazon szoftverben található Form-ot módosítani.

    Szerintem ne legyen 'auto edit' jellegű megoldás, ha módosítani akar valaki egy mezőt, akkor kérdezze le a program, hogy az adott mező szerkeszthető-e, és ha igen, akkor zárolja a sort (Tranzakcióban update-eljen egy mezőt, ami a zárolást jelzi, vagy egy másik táblát, amiben a zárolások nyilván vannak tartva).

    Igazából amit keresel, arra nem hiszem, hogy van dobozos megoldás - ráadásul, amit szeretnél az nem is igazán szép.
    Igazi LAN-on (ahol nincs az udp multicast tiltva) elméletileg megoldható egy ilyen megoldás SQL nélkül - UDP multicastba téve a gépeket, ahol mindenki bemondja az éterbe, hogy épp mit csinál. Ám egyrészt az UDP nem megbízható (nincs garancia, hogy mindenki megkapja a csomagot és fel is dolgozza), másrészt egy nagyobb céges hálóban általában szűrve vannak a multicast hívások a VLAN-ok között. Ráadásul ebben az esetben nincs kizárás, tehát elméletileg előfordulhat, hogy "egyszerre" jelenti be mind a két gép a szerkesztést, és vagy mindkettő szerkesztő üzemmódban marad, vagy mindkettőnél letiltódik a szerkesztés (megvalósítástól függően).

    AE

  • ArchElf
    addikt

    Teljesen igazad van, nem a proxy volt a hiba, valamit nagyon elnéztem... A linkeket köszönöm, későbbiekben még jól fognak jönni!

    Olyat meg lehet oldani, hogy van egy program, ami fel van telepítve pl 4 gépre és egy szerverre kommunikál. A szerver egy sima SQL szerver, amiből adatokat nyerek ki, vagy törlök. Mindegyik programban van egy pl. ListView ami az SQL lekérdezés eredményeit tartalmazza. A feladat az lenne, ha az egyik gépről törlök az SQL-ből, akkor a többin is módosítsa a ListView tartalmát új SQL lekérdezés nélkül? Ez első sorban LAN-on lenne érdekes, de előfordulhat már IP címen lévő, egymástól távol lévő gépekkel is.

    Valakinek valami ötlete van erre?

    SQL lekérdezés nélkül nem nagyon megy... Honnan tudja a kliens, hogy más is nézi azt a view-t? Ha sok adat van a view-ban és nem akarsz folyton mindent lekérdezni, akkor egy ID mezőre le lehet mondjuk kérdezni egy SELECT Max(ID) FROM View -val, hogy van-e újabb rekord, vagy ha frissülhetnek a mezők, akkor legyen a táblában egy TimeStamp mező (DateTime) ami frissítéskor frissül és akkor a SELECT Max(TimeStamp) FROM View-val megnézni, hogy van-e újabb adat. Esetleg csinálni egy Triggert, ami UPDATE/INSERT/DELETE-re frissít egy DateTime mezőt egy külön státusz táblában...
    Szóval lekérdezés nélkül nekem semmi nem jut az eszembe, lekérdezésekkel, meg a fentiek.

    AE

  • ArchElf
    addikt

    Helló!

    Tudtok ajánlani valami jó, ingyenes smtp komponenst, amit használhatnék vb.net alatt? A system.net.mail-t nem tudom rávenni, hogy proxy mögül elküldje az üzeneteket.

    Köszönöm!

    Ez talán egy kicsit kisegít:
    http:
    //stackoverflow.com/questions/844835/sending-mail-throught-http-proxy

    Amúgy röviden csak annyit, hogy a HTTP proxy-nak semmi köze nincs az SMTP-hez. Ha céges hálózatban vagy és nem megy ki az SMTP, akkor az nem a proxy/kliens hibája, hanem a tűzfalon van letiltva a kimenő SMTP. Amennyiben mégis szeretnél valamiért HTTP-n keresztül "kimenni" úgy pl. azt a megoldást tudom ajánlani, amint a mi a fent linkelt eszélgetés végén található - persze céges hálózaton ez nagy valószínűség szerint a helyi szabályokba ütközik..

    És még ezt találtam neked: http://www.lesnikowski.com/blog/index.php/tag/mail-dll/

    AE

  • ArchElf
    addikt

    Sziasztok,

    A következő problémám lenne.
    Adott egy type változó
    Public Type PkData
    PlayerName As String
    PlayerID As Integer
    Seat As String
    ...
    end type

    majd ezt használom tömbként
    Dim Px(1 To 10) As PkData

    ilyen esetben hogyan tudom a px tömböt kiüríteni??? :F
    mert ugye Px.playername... stb változóim vannak. És kb 30 változó van a típusban definiálva.
    Egyessével nagyon macerás lenne

    Csinálsz szerintem egy szimpla PKData definíciót, és az összes PX-tömbelemnek add azt értékül:
    'Px Kiürítése
    Dim EmptyPkData as PkData
    For ix = 1 to UBound(Px)
    Px(ix) = EmptyPkData
    Next ix

    mod: Mivel a VB6 automatikusan inicializál, így az EmptyPkData biztos, hogy üres lesz, az értékadásnál pedig egyszerűen felülírja a régi értéket (és mivel value type, nem pedig class, így nem ugyanarra az objektumra fog hivatkozni az összes tömbelem - az egyetlen gondot az jelentheti, ha a type definíció osztályokat is tartalmaz).

    AE

  • ArchElf
    addikt

    Tényleg, ha már két külön fájl, miért nem javascripttel próbálkozol?
    Az legalább böngésző független.
    Vagy még jobbat mondok. Áruld el, hogy mit akarsz, és lehet hogy sokkal jobb megoldást tudunk rá, mint amit kitaláltál.

    Szerintem van valami vbs fájlja, amit html-el akar etetni... Ennyi erővel használhatna mondjuk a vbs-en belül inputbox-ot is...

    AE

  • ArchElf
    addikt

    van egy html file, abban a textarea, meg egy gomb, meg van egy .vbs file, ami nyilván a script. A gomb feladata: meghívni a .vbs file-t úgy, hogy argumentumként a textarea.value-t adja át.
    A scriptben pedig wscript.arguments-et használva akarom megoldani, hogy megkapja a változó ezt az értéket.

    VBS-t nem gazán lehet úgy meghívni, mint fuattatható fájlt htmlből (legalábbis értelme sok nincs). A Wscript.Arguments-be amúgy a futtatott fájl argumentumai kerülnek át - pl.:
    a popupmessage.vbs "user" "üzenet" esetén az első argumentum a "user", a második az "üzenet".
    Egyrészt ez azért problémás, mert a commandline hossza korlátos (255 körül, így az átadható adatmennyiség is korlátos), másrész egy HTML kódnál van meghívható függvény opció, így felesleges trükközni és hackelni, hogy a href mezőbe az ember valahogy belepaszírozza a textarea tartalmát is (ami nem mellesleg lehet, hogy bele sem fér).

    AE

  • ArchElf
    addikt

    szóval a fájlkezelést tanultuk és a feladat a következő lenne:
    egy ksi adatbázist kellene létrehozni egy rekord típusú fájlban. a fáljlban egy személyről 3 adatot kellene tárolni. ezen adatok eltárolásához létrehoztunk egy elrendezést. 3 textboxban a kívánt adatok vannak, a 4.ben kellene megjelennie annak, hogy hányadik rekordról van szó. a textboxok egyben szolgálnak az adatok bevitelére és egjelenítésére is.
    van 4 command button. egy előre és egy hátra funkciójú, ami a rekordok közötti navigációra szolgál. egy mentés nevű, ami a 3 textbox tartalmát beírja egy rekordba a fájlban, és egy töröl, ami az épp kiválasztott rekordot törli ki.
    remélem érthető...
    a kódból jelenleg ennyi van meg:

    Option Explicit
    Option Base 1
    Private Type hallgato
    nev As String * 30
    neptun As String * 6
    kp As Single
    End Type
    Dim h As hallgato
    Dim f As Integer
    Dim r As Integer
    Dim fnev As String
    Dim tmpfile As String

    Private Function darab() As Integer
    f = FreeFile
    Open fnev For Random Access Read As #f Len = Len(h)
    darab = LOF(f) / Len(h)
    Close #f

    End Function
    Public Sub kiirat(rekordsz As Integer)
    Dim db As Integer
    db = darab
    If db = 0 Then
    Label4.Caption = "No data"
    Call tiszta
    Else
    Label4.Caption = Str(rekordsz) + "/" + Str(db)
    f = FreeFile
    Open fnev For Random Access Read As #f Len = Len(h)
    Get #f, rekordsz, h
    textbox1.Text = h.nev
    textbox2.Text = h.neptun
    textbox3.Text = Str(h.kp)
    End If

    End Sub
    Public Sub tiszta()
    Text1.Text = "Maximum 30 karakter"
    Text2.Text = "NEPTUN"
    Text3.Text = "Kp"

    End Sub

    remélem tud valaki segíteni :R

    Ez működőképesnek tűnik.
    Load-ban be kell állítani a fájlnevet (ha nem textboxból kell beolvasni), Megnyitni a fált írás/olvasásra, le kell kérdni a rekordok számát, be kell állítani az első rekordot (nem kell beszárni a fájl).
    Bottonokban:
    - navigálás: gondolom neked is egyszerű (index változót kell növelni csökkenteni a 0 és a darabszám-1 között - vagy 1 és darabszám között??? már nem emlékszem)
    - editre: ugyanaz van, mint a GET (csak PUT-tal): beállítani a rekordszámot, a textboxokból legenerálni a típust, felülírni vele a rekordot az adott helyen.
    - mentésre: bezárni a fájlt és újranyitni
    - törlésre:
    legegyszerűbb az utolsó elemet a fájl végéről bemásolni a törölt helyére és a rekordhosszal csökkenteni a fájl hosszát.
    bonyolultabban minden rekordot a törölt rekod után eggyel előrébb írni, majd csökkenteni a fájl hosszát egy rekordhosszal.

    Nincs sajna VB6-om, csak magyarázni tudok...

    AE

  • ArchElf
    addikt

    Igaz, de azért ki az a hülye ha van egy kód és csak ki kell egészíteni pár dologgal amiatt átírja az egészet új platformra
    Tényleg, ha már itt tartunk. Van rá mód, hogy a .NET-es kódot vmi jóféle protectorral levédjem?

    Van valami obfuscator hozzá, de szerintem csak annyit ér, mint a Java-s társai.
    Esetleg le lehet védeni mondjuk DLL-eket: betitkosítani, kódból visszafejteni és memóriából betölteni, de én mondjuk még nem csináltam ilyet.
    Egy jó kis agymenés a stackoverflow-n a témában: link

    AE

  • ArchElf
    addikt

    Én semmire, csak vannak olyan helyzetek amikor .Net hátrány. Pl visszafejthetőség, régebbi OS-ek amikhez alkalmazkodni kell.
    De jelen esetben egy régi rendszer tovább fejlesztéséről van szó ahol kötve van a kezem.

    MSIL nagyságrendekkel könnyebben visszafejthető... .NET 2.0 pedig már win98-hoz is van. Annál régebbi gondolom azért nem kell.

    AE

  • ArchElf
    addikt

    Köszi a segítséget !
    Esetleg még arra van egy tipped,hogy ha hamarabb kapcsolják ki a gépet mint 60 perc,(mondjuk 25 perc múlva) ,akkor a következő bekapcsoláskor még "tudja",hogy maradt 35 perc hátra ?
    Egyébként a standby-be kapcsolódó gép jó ötlet,be tudom állítani,hogy visszatéréskor jelszót kérjen.Csak az a bökkenő,ha kikapcsolják a gépet,akkor meg nem fog kérni jelszót,mivel az meg úgy van beállítva :) Ha meg teszek azonnali "hideg" induláshoz is jelszót,akkor semmit nem csináltam. A lényeg az lenne,hogy ha a mama vigyáz a lurkókra délután,amíg hazaérek melóból,ne tudjanak több órát játszani csak ,mondjuk 1 órát.De hogy azt mikor kezdik az RND.Azért nem tudom pl. beállítani,hogy 17:00-18:00-ig,mert ha 17:55-re érnek haza,akkor csak 5 perc maradna játszani.
    Azt meg lehetne e csinálni,hogy egy file-ba írok egy 0-át.Ha megtörtént a bekapcsolás akkor a file-ban lévő érték lenne mondjuk 1 és ezt el is mentené a vinyóra.Namost minden bekapcsolásnál ezzel indulna a gép,hogy megnézi a file-ban lévő értéket és ha ez nagyobb mint 0 akkor kiad egy shutdown parancsot.Én meg ,amikor este hazajövök,egyszerűen csökkentett módban indítanám a gépet és kitörölném a file-ból az 1-et és visszaírnám 0-ra.Ők még nem tudják,hogyan kell csökkentett módban indítani a gépet :)
    Még egy kérdés : reggel standby-be hagyom a gépet,jelszó alapon (vagyis nem kér ha standby-ből tér vissza).Letelik majd délután az 1 óra ,a gép kap egy shutdown parancsot és amikor újra beakarják kapcsolni a lurkók,akkor már a "hideg" indítás miatt jelszót kérne.Ilyet lehet ?
    Attila

    Ezt találtam: forum

    AE

  • ArchElf
    addikt

    C#-ban, VS2008-al. Miért?

    Ops, bocs - winforms-ról valamiért a VB6 ugrott be...
    Nemrég találtam egy viszonylag jó kördiagramos kódot a neten (amit egy kicsit a saját szájízem szerint módosítottam).

    AE

  • ArchElf
    addikt

    Aha. Sosem tagadtam, hogy a winforms-os idők (beleértve VB6-ot és elődeit) kimaradtak az életemből.

    Bár most pont lesz egy szakdolgozós ismerősöm, így egy picit megint bele kell majd mélyed nem. Főleg a Chart kontroltól félek :)

    AE neked van tapasztalatod Chartok rajzolásáról Win Formsban? Ahogy nézem elég triviális, de félek lesz egy-két egyéni igény...

    Saját OrgChart kontrollt csináltam :)
    Nem tudom megvan-e még a kódja... Bár majd 10 éve készült, úgyhogy lehet, hogy elég gány kód volt.
    BTW, VB6-ban fog szakdolgozni?

    AE

  • ArchElf
    addikt

    Mi az az MDi Form? A sima windows Form-ot hívod ennek? Az egyáltalán tud ilyet? Sosem próbáltam.

    MDI az a fő/al-form típus (amikor egy form belsejében lehet másik form (pl a Visual Studio főablaka, vagy az office programok)

    AE

  • ArchElf
    addikt

    nem, nem láncolt proxyt szeretnék hanem azt hogy egy adott oldalt egyszer az egyik proxyval majd utánna egy másikal nyisson meg utánna meg egy harmadikal és így tovább.

    Am egy olyan kérdésem lenne hogy melyik modszerral nyissan meg a proxy IP-ket tartalmazó text filet ha annak minden sorában egy IP van. Tehát soronként szeretném oket beolvasni... objreader-el próbálkoztam de azzal csak readline illetve readtoend van. Legalábbis én nem találtam benn olyant hogy egy x-edik sort olvasson ki!

    Előre is köszi!

    X.-ik sor semmivel nem tudsz olvasni.
    Olvasd be először egy string tömbbe és hivatkozz rá tömbelem-hivatkozással.

    AE

  • ArchElf
    addikt

    nah jó ezt jól benéztem én nem a proxy beálításaira gondolok a gépnek, szóvel nem a registry kell nekem mert ott azt lehet. Hanem egy olyan progit szeretnék írni ami egy bizonyos proxy serveren keresztűl meghív egy oldalt majd ezek után egy másik proxyn keresztűl a következőt és így tovább....

    Gondolom ilyesmit keresel :(

    AE

  • ArchElf
    addikt

    Sziasztok!

    VB6-tal programozgatok. A gondom a következő:
    A kész progit a hordozhatóság érdekében exe fájlra fordítottam és készítettem egy telepítőt a Package and Deployment Wizard beépülő modullal. A szolgáltatás elvileg összeszed minden szükséges állományt az exe futtatásához.
    Ha telepíteni próbálom, akkor hibaüzenetet dob fel, mégpedig:

    Invalid line in setup information file!
    Section: Setup1 Files
    @MDAC_TYP.EXE,$(AppPath),,,6.26.98 12:00:00 AM,8124720,4.71.1015.0

    Használta már valaki a Package and Deployment Wizard-ot? Mi lehet a gond?
    Köszönöm előre is a segítséget.

    MDAC-ot nem szedi össze a telepítő varázsló, azt külön hozzá kell csomagolnod az installerhez.
    A WITH-es kérdésre, valószínűleg nem lett inicializálva a változó használat előtt. A WITH csak inicializát változót (instance - példányt?) tud kezelni.

    AE

  • ArchElf
    addikt

    Hello!

    Egy két kérdésem lenne, biztos van itt vki, aki jobban konyít a VBhez.
    Szóval, rengeteg adatpárból (4096 db pár) kéne grafikont készíteni, de nem Excelben, hanem Visual Studio 2008 / Visual basic 6.0-ban.
    Vmi tanács?
    Cserébe én is segítek amit tudok...
    Előre is köszi!
    F

    Pl: http://www.codeproject.com/KB/graphics/zedgraph.aspx

    AE

  • ArchElf
    addikt

    Megoldottam nagy nehezen.
    Nem is az a sor volt a gond,azt nem irtad hogy macskakörmök kellenek. :)

    Sorry, bug volt, strFolder helyett sFolder kellett volna a figyelésbe...
    While not oFSO.FolderExists(strFolder)
    helyett
    While not oFSO.FolderExists(sFolder)

    mod: ja meg az elején a kommentbe is...

    AE

  • ArchElf
    addikt

    Sziasztok szeretnék segitséget kérni vb script ügyben.
    Van egy letöltögépem és egy Nas-om amire menti a dolgokat.

    Azt szeretném elérni hogy a pc-n a utorrent csak akkor induljon el hogyha a nas-on az állományok elérhetőek!(vagyis be van kapcsolva és elérhető a hálózaton)

    Elkerülendő hogy a utorrent netalálja az állományokat majd legközelebb ujra kelljen ellenőriznie mindet.

    Próbáltam magamtól utánna nézni de nekem kinai,pedig annó basic-ban bepötyögtünk dolgokat c64-en,profiknag gondolom 2-perc.
    Egy szkriptet valaki belinkelt a másik topikban ami egy program inditást késleltet,gondolom ez sem lehet túl bonyolult.

    Előre is köszi. :R

    Option Explicit
    'strFolder -> kívánt könyvtárnevet beleírni
    'fShell -> utorrent.exe teljes elérési útvonala (dupla quote kell, ha az elérési útvonal tartalmaz space-t)

    Dim sFolder, oFSO
    Dim oShell, fShell
    sFolder = "S:\Share"
    fShell = """c:\ProgramFiles\uTorrent\uTorrent.exe"""
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    While not oFSO.FolderExists(strFolder)
    WScript.Sleep 30000
    Wend
    Set oFSO = Nothing
    WScript.Sleep 5000
    Set oShell = WScript.CreateObject ("WScript.Shell")
    oShell.run fShell
    Set oShell = Nothing

    A két változó értékét beállítod:
    - share könyvtár helye (célszerű map-elve meghajtóra)
    - torrent program elérési útvonala

    A script fél percenként megnézi, hogy elérhető-e a share, amikor igen, elindítja a programot.

    AE

  • ArchElf
    addikt

    Először úgy gondoltam, hogy hülye kérdésre nem válaszolok. Aztán meg azt, hogy mégis:

    Google, vagy mostanában Bing :DD

    Ehh, c#-os topicban is olyan mélylenszántó kérdések vannak mostanában...

    AE

  • ArchElf
    addikt

    Mert ez ilyen. Ha komoly office kiegészítő programot akarsz írni, akkor indulj ki a Visual Studio-ból.

    Számomra egyébként érthetetlen, hogy az MS még mindig a VB6-ra alapuló VBA-t erőlteti az office makrókban. Ahelyett, hogy .Net-re állna át.

    VBA csak a kompatibilitás miatt maradt benne. A 2003-ban is volt már .NET támogatás, csak fejlesztői környezetet nem adnak alapból hozzá... Az Office árában nincs bent egy VS.NET liszensz :)
    Csekk

    AE

  • ArchElf
    addikt

    Pendrive - csak írni kell egy dummy drivert, ami USB drive-nak hazudja magát :) Általában a webes ellenőrzzéses - webservice-es? -, no meg a jól bevált kulcsgenerálós megoldások mennek mostanában szerintem.

    Esetleg lehet használni hardveres megoldást is (smartcard, titkosított pendrive) ha tényleg erősen fizetős megoldást lesz, de itt már rendesen bele kell gányolni a kódba is, hogy nehezen törhető legyen.

    AE

    Amúgy lassan feltöri az IPhone-os srác a PS3-at...
    http://geohotps3.blogspot.com/

    AE

  • ArchElf
    addikt

    Hát csak nem mindegy, hogy milyen könnyen lehet visszafejteni.
    Pl.: egy UPX-el titkositod akkor azt még az upx vissza is tudja fejteni. De mondjuk egy Armadillo-val már keményen trükközni kell és ismerni az gépikódot...

    A kérdés mindig az, hogy kitől kell védeni a sw-t.

    @dobozossör - esetleg még egy pendrive sn-t kiolvasni és kötni a kódhoz.
    Igy nem indulna el másik pendrive-val.

    Pendrive - csak írni kell egy dummy drivert, ami USB drive-nak hazudja magát :) Általában a webes ellenőrzzéses - webservice-es? -, no meg a jól bevált kulcsgenerálós megoldások mennek mostanában szerintem.

    Esetleg lehet használni hardveres megoldást is (smartcard, titkosított pendrive) ha tényleg erősen fizetős megoldást lesz, de itt már rendesen bele kell gányolni a kódba is, hogy nehezen törhető legyen.

    AE

  • ArchElf
    addikt

    Hello mindenki!

    Kezdő vagyok és abban szeretnék segítséget kérni, hogy MS Access-ben el lehet érni azt valahogy, hogy a beviteli mezőbe írt adatokat ne tegye be rögtön a táblába.

    Én arra jutotttam, hogy egy checkbox-ot tennék be amit egy gomb lenyomás leellenőriz, és akkor engedi menteni a recordot.

    Private Sub mentes_Click()

    If jelolonegyzet.CheckState = CheckState.Checked Then

    RunCommand acCmdSaveRecord

    Else

    MsgBox ("Nem jelölte be az elfogadást !")

    End Sub

    Mi lehet a hiba?
    Segítséget előre is köszi!

    Pl., a beviteli mezők ne legyen összekötve a táblával, hanem egy megírt insert-tel tedd be az adatokat az adatbázisba.
    Persze ez hackelés :)
    Azt is csinálhatod, hogy beteszel a táblába egy kötelező mezőt érték ellenérzéssel (Yes/No típus, "validation rule" = True) , és úgy csak akkor tud adatot feltölteni, ha a checkbox be van kapcsolva...

    AE

  • ArchElf
    addikt

    Sziasztok!

    Excel 2003-ban makrózom. Kérdésem: lehet programozottan exportálni Excel munkalapot DBF-be? Tehát hogy ne kelljen a usernek a Mentés másként-et se használnia.

    ActiveWorkbook.SaveAs Filename:="file.dbf", FileFormat:=xlDBF4

    AE

  • ArchElf
    addikt

    Helló!

    Tudtok ajánlani valami ingyenes kiegészítőt Visual Studio 2008 (jelenleg Express) alá, amivel tudok Ribbon Bart készíteni Basicben?

    Köszönöm!

    Asszem láttam 1-2 éve a codeproject-en ribbon bar komponenst. Lehet, hogy nem vb, hanem c# alatt volt megírva, de ez a .NET motort nem nagyon izgatja.

    AE

  • ArchElf
    addikt

    Kösz a választ!
    Lenne még 1 kérdésem. Ha én megszeretnék hívni egy másik programot. Például timerrel megcsinálom azt hogy 4 óra múlva indítsa el az adott elérési útvonalon a programot melyik parancsot használjam ehhez?
    parancs D:\eztakaromelindítani.exe
    Előre is köszi.

    És ha shell() nem jó: Win32 API megvalósítás

    AE

  • ArchElf
    addikt

    Az előző ötletemet abbahagytam most az érdekelne hogy esetleg van-e olyan parancs Basicban ami egy dokumentumban megkeresi az adott szavakat és összegyűjti vagy beolvassa vagy éppen összeszámolja hogy hány darab van a szövegben.

    InStr-el és egy pofás ciklussal tudsz ilyet csinálni.

    AE

  • ArchElf
    addikt

    Helló!
    Remélem tud valaki segíteni.
    Szeretnék egy txt fájlból adatot beolvasni úgy hogy mindet külön vegye mert egy bejelentkezést csinálnék a regisztrációs része kész a proginak és ez elmenti egy txt fájlba de így nem birok bejelentkezni csak ha egy felhasználó van regisztrálva mert mindíg csak az első sorba írt információt észleli.
    Várom a választ.

    Nem igazán értem problémád. Hogy olvasod be sort? Ha bemásolsz kódot, talán megmondjuk mit keféltél el.

    Amúgy felhasználónév jelszó txt fájlban... A hátamon is feláll a szőr.

    AE

  • ArchElf
    addikt

    Megy :)

    Idáig mi is eljutopttunk, de vmiért a könyvtár bin mappájában nem találja az opendialog izét :(

    Nem is ott kellene lennie annak, hanem a windows/system32 könyvtárban.
    Ha nem megy a program, elötte telepíteni kell az adott dll-t vagy a vb6 redist csomagot (ha még egyáltalán van ilyen...)

    AE

  • ArchElf
    addikt

    Elmondom, hogy is van ez nálam.

    Van ugye a formon egy ListView vezérlő, ami eléggé el nem ítélhető módon a ListView1 nevet viseli.

    Az inicializáló részben a következők történnek:

    ListView1.ColumnHeaders.Add 1, , "Címke", 900
    ListView1.ColumnHeaders.Add 2, , "Leírás", 8000
    ListView1.ColumnHeaders.Add 3, , "Típus", 5000
    ListView1.ColumnHeaders.Add 4, , "Dátum", 1500

    Vagyis kap négy oszlopot. (Az első név félrevezető: a címke valójában a sorszámot jelenti.)

    Ezeket a következőképpen töltöm fel.

    'A listview vezérlő feltöltése
    If Tombmeret > 0 Then
    For i = 1 To Tombmeret
    If AdatBazis(i).hasznalt = True Then
    a$ = "A" & Str(i) 'Sajnos számot még füzér alakban sem fogad el a hülye listview vezérlő, ezért egy betű kell elé. De ez komoly, még str(i)-t sem enged magába tölteni.
    FoAblak.ListView1.ListItems.Add , a$, Str(i)
    FoAblak.ListView1.ListItems(a$).SubItems(1) = Trim(AdatBazis(i).leiras)
    FoAblak.ListView1.ListItems(a$).SubItems(2) = Tipus_szoveggel(AdatBazis(i).tipus)
    FoAblak.ListView1.ListItems(a$).SubItems(3) = AdatBazis(i).datum
    End If
    Next i
    End If

    A rendező rész a következő:

    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ColumnHeader)

    Dim a As Integer

    a = ColumnHeader.Index - 1

    ListView1.SortKey = ColumnHeader.Index - 1

    If ListView1.SortKey = a Then
    If ListView1.SortOrder = lvwAscending Then
    ListView1.SortOrder = lvwDescending
    ElseIf ListView1.SortOrder = lvwDescending Then
    ListView1.SortOrder = lvwAscending
    End If
    End If

    ListView1.Sorted = True
    End Sub

    Ezzel vidáman rendez pl. dátum szerint is oda-vissza, de az első oszlop (ami a sorszám lenne) a szokásos hibát produkálja: a 10 nem a 9 után jön, hanem az 1 után (ABC szerinti rendezés).

    Mit lehet tenni?

    Kis angoltudás kék hozzá: link

    AE

    Comment 1: 5 perc google volt
    Comment 2: VB.NET-ben kb ugyanennyi idő megcsinálni is (lásd IComparer intefész)

  • ArchElf
    addikt

    Köszi a tippeket!

    Egyébként most miben programozol? Fejlettebb VB-ben, vagy úgy általában abbahagytad a VB-t? Csak azért kérdeztem, mert én most ezen gondolkodom. Megpróbáltam egy projektet átvinni VB2005 alá, de nem sikerült. Annyival eltérnek az újabb verziók? Annyira, hogy gyakorlatilag újra kell tanulni a programozásukat? Megéri?

    Az utasítások eléggé különböznek, de azt szoktam mondani, hogy ha az ember nem "szemellenzősen" tanul programozni, az egyik nyelvről egy másikra való váltás csak napok/hetek kérdése. A váltásnál a legnagyobb nehézség a megszokások lerázása (alap változótípusok megtanulása, alap műveleti típusok formázása, programfelépítés), a többi csak arról szól, hogy nem a-nak hívják a függvényt, hanem b-nek, és nem három argumentuma van, hanem négy :)
    Amúgy ezekben aktívan programozok, azt azért nem merem mondani, hogy fejlesztek :)
    C#
    PHP
    VBS
    Ezekben meg nem aktívan, csak ha úgy hozza az igény:
    VB.NET
    ASP.NET
    Java
    VB6
    C/C++

    AE

  • ArchElf
    addikt

    Nem valami App.Path ?

    De :) (vagy CurDir???)
    Amúgy ha jól rémlik ezt azt adja meg, ami:
    1)
    Ha magát az exe-t indítottad el, az a könyvtár, ahol az exe van
    2)
    Ha shortcut-ot indítottál, az a könyvtár, ami a shortcut "start in" mezőjében szerepel. Ha a start in könyvtár nem érvényes, akkor asszem a %windir% környezeti változó lesz az értéke (ami leggyakrabban c:\windows, de ez is telepítésfüggő)

    Úgy rémlik, hogy a VisualBasic IDE-t úgy lehet "átvágni", hogy ne a c:\program files\... legyen a start in könyvtár a projektnél, hanem a projektkönyvtár, hogy nem az IDE-ből indítod el a projektedet, hanem közvetlenül a projekt fájl megnyitásával. Elég régen használtam már VB6-ot nem vagyok benne biztos.

    AE

  • ArchElf
    addikt

    Az érdekelne, hogy hol van a kapcsolódási pont az installer és az installált program között.Vagyis honnan veszi át a program azokat az adatokat, hogy hova is telepítették, milyen beállításokkal?

    Épp azt írtam, hogy ez program és installer függő. Vagy célszerű tudnia programodnak, hogyan működik az installer (hova milyen adatokat ír), vagy pedig csak egyszerűen le kell kérdeznie a futó folyamat indítási könyvtárát.
    Amúgy az alkalmazásodba ne statikus, hanem relatív útvonalat használj. Tudom, hogy ez problémás a fejlesztéskor, mert alapból VB könyvtárában keresi a fájlokat, ha egy projektet indítasz, nem a projekt könyvtárában, de ezt is meg lehet kerülni.

    AE

  • ArchElf
    addikt

    Hát, igen, az első megoldás az lenne, hogy összecsomagolom, és használati utasításként mellé írom, hogy a c:\xyz könyvtárba KELL kitömöríteni, és csak oda, mert máshol nem működik. (Bár ez nem igazi megoldás.)

    Valami szabvány telepítőre gondoltam; gondoltam, azzal nem lesz sok gond. Tartalmaznak az ilyenek valami módszert a registry írásra vagy más effélére?

    A Visual Studionak van saját installere (persze nem az Express változatnak), de lehet válogatni a piacon is bőséggel (de ha van egy 1 órád, vagy fél napod, te is összedobhatsz egy alap telepítőt a programodhoz)... Anno használtam VB6-hoz is a beépített installer plugint (bár azért az kicsit már a szenvedés határát súrolta).

    AE

  • ArchElf
    addikt

    Tapasztal VB programozók, tudtok segíteni?

    Ha készítek egy programot, amit aztán föltelepít valaki, honnan fogja tudni az a program, hogy hova telepítették, milyen elérési úton keresse a konfigurációs fájlt, meg az adatfájlokat, amikkel majd dolgozni fog? Hogyan kell ezt beírni a kódba?

    Kérdés, hogy hogyan telepítették föl... Mondjuk a legegyszerűbb megoldás a registry (telepítéskor beíródik oda minden adat, ami neked kell), de lehet egy text file is a programod mellett. Mindenesetre ez nagyban függ attól, hogy te írod a telepítőt is, vagy valami szabvány telepítőbe teszed bele a programod.
    Amúgy az alkalmazás le tudja kérdezni a környezeti változóit. Pl mi a futtatott fájl elérési útvonala, mi van megadva "start in" könyvtárnak a linkjében, ha azzal indították, ésatöbbi...

    AE

Új hozzászólás Aktív témák