Hirdetés

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

  • 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

  • Á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

    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?

  • 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

  • vilag
    tag

    Ü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!!!!!!!

  • öcsi-bácsi
    csendes tag

    Írsz egy word makrót. Ez a makró az alábbiakat fogja csinálni:

    1. létrehoz egy excel fájlt, amiben minden futásakor frissíti access-ből az adatokat.
    2. elindítja megfelelően felparaméterezve a körlevél generálót

    Ennyi. A 2-es pontra pont itt feljebb találsz példa makrót, az 1-es pont se olyan nagy kaland. Egyébként a word körlevél varázslója milyen adatforrásokat fogad el? Csak excel? (Az itthoni gépemen bevallom LibreOffice van, így nem tudom megnézni :B )

    Köszönöm, próbálkozok. :))

  • martonx
    veterán

    Sziasztok!
    Accses lekérdezés adatait szeretném world körlevélbe illeszteni.
    Van ötletetek, hogyan tehetném meg?
    Akár VB, akár acces jelentés formája érdekelne.

    Írsz egy word makrót. Ez a makró az alábbiakat fogja csinálni:

    1. létrehoz egy excel fájlt, amiben minden futásakor frissíti access-ből az adatokat.
    2. elindítja megfelelően felparaméterezve a körlevél generálót

    Ennyi. A 2-es pontra pont itt feljebb találsz példa makrót, az 1-es pont se olyan nagy kaland. Egyébként a word körlevél varázslója milyen adatforrásokat fogad el? Csak excel? (Az itthoni gépemen bevallom LibreOffice van, így nem tudom megnézni :B )

  • öcsi-bácsi
    csendes tag

    Sziasztok!
    Accses lekérdezés adatait szeretném world körlevélbe illeszteni.
    Van ötletetek, hogyan tehetném meg?
    Akár VB, akár acces jelentés formája érdekelne.

  • öcsi-bácsi
    csendes tag

    Pontosan ezekről beszéltem. Ezt a kódot így is meg lehetne csinálni:

    Sheets("munka1").Select
    pass = "123456789"
    Sheets("munka2").Unprotect pass
    Sheets("munka1").Range("a1").Copy Destination:=Sheets("Munka2").Range("A1")
    Sheets("munka2").Protect Password:=pass

    Ez pontosan azt csinálja, amit a Tiéd, csak nem 11, hanem 5 sorban.
    Újra kihangsúlyozom: VBA-ban a Select és az Activate használatát csak elkerülhetetlen esetben célszerű használni, így a legtöbb esetben az Application.ScreenUpdating használata is feleslegessé válik(kivéve, ha az aktív munkalapra másolsz nagy mennyiségű adatot), valamint a kód is áttekinthetőbb.

    Köszönöm, hasznosítani fogom a leírtakat.

  • #90999040
    törölt tag

    megtaláltam:
    Sub rög4()
    'minta védelem feloldására
    Sheets("Munka2").Select
    'azért kell először feloldani a védelmet, mert a kijelölés munka1!a1 megszűnik
    pass = "123456789"
    ActiveSheet.Unprotect pass
    'most lehet másolni!
    Sheets("munka1").Select
    Range("a1").Select
    Selection.Copy
    Sheets("Munka2").Select
    Range("A1").Select
    ActiveSheet.Paste
    'majd rátenni a védelmet!
    ActiveSheet.Protect Password:=pass
    Sheets("munka1").Select
    End Sub :)

    Pontosan ezekről beszéltem. Ezt a kódot így is meg lehetne csinálni:

    Sheets("munka1").Select
    pass = "123456789"
    Sheets("munka2").Unprotect pass
    Sheets("munka1").Range("a1").Copy Destination:=Sheets("Munka2").Range("A1")
    Sheets("munka2").Protect Password:=pass

    Ez pontosan azt csinálja, amit a Tiéd, csak nem 11, hanem 5 sorban.
    Újra kihangsúlyozom: VBA-ban a Select és az Activate használatát csak elkerülhetetlen esetben célszerű használni, így a legtöbb esetben az Application.ScreenUpdating használata is feleslegessé válik(kivéve, ha az aktív munkalapra másolsz nagy mennyiségű adatot), valamint a kód is áttekinthetőbb.

  • öcsi-bácsi
    csendes tag

    Köszi, rendes vagy.

    Közben találtam egy megoldást:
    'visszhang kikapcs
    Application.ScreenUpdating = False
    "makró fut"
    Application.ScreenUpdating = True

    Ami viszont közben kérdésessé vált: adatokat másolok egy űrlapról makróval, egyik excel lapról a másikra, viszont szándékaim szerint a második lap egyfajta adatbázis lesz, amit ellátnék lapvédelemmel. Viszont a makróm természetesen megáll, ha a második lap védelmét bekapcsolom.
    Kérdésem: hogyan másolhatna a makróm mégis ide adatokat? :U

    megtaláltam:
    Sub rög4()
    'minta védelem feloldására
    Sheets("Munka2").Select
    'azért kell először feloldani a védelmet, mert a kijelölés munka1!a1 megszűnik
    pass = "123456789"
    ActiveSheet.Unprotect pass
    'most lehet másolni!
    Sheets("munka1").Select
    Range("a1").Select
    Selection.Copy
    Sheets("Munka2").Select
    Range("A1").Select
    ActiveSheet.Paste
    'majd rátenni a védelmet!
    ActiveSheet.Protect Password:=pass
    Sheets("munka1").Select
    End Sub :)

  • öcsi-bácsi
    csendes tag

    Másolás közben kerüld a Select és az Activate használatát!!!

    Dim munkalap As String
    munkalap = "munka1"
    Worksheets(munkalap).Range("a1:c3").Copy _
    Destination:=Worksheets(munkalap).Range("e1")

    Ha a másolás után a célterületet szeretnéd aktívan látni, akkor arra add ki a Select-et.

    Köszi, rendes vagy.

    Közben találtam egy megoldást:
    'visszhang kikapcs
    Application.ScreenUpdating = False
    "makró fut"
    Application.ScreenUpdating = True

    Ami viszont közben kérdésessé vált: adatokat másolok egy űrlapról makróval, egyik excel lapról a másikra, viszont szándékaim szerint a második lap egyfajta adatbázis lesz, amit ellátnék lapvédelemmel. Viszont a makróm természetesen megáll, ha a második lap védelmét bekapcsolom.
    Kérdésem: hogyan másolhatna a makróm mégis ide adatokat? :U

  • #90999040
    törölt tag

    Sziasztok!

    Szeretném, ha a makróm futása közben nem mutatná az oldalakat ahonnan adatokat másol, csak a végeredményt!

    Biztosan van rá valami utasítás,csak még kezdő vagyok.

    Előre is köszi. :R

    Másolás közben kerüld a Select és az Activate használatát!!!

    Dim munkalap As String
    munkalap = "munka1"
    Worksheets(munkalap).Range("a1:c3").Copy _
    Destination:=Worksheets(munkalap).Range("e1")

    Ha a másolás után a célterületet szeretnéd aktívan látni, akkor arra add ki a Select-et.

  • öcsi-bácsi
    csendes tag

    Sziasztok!

    Szeretném, ha a makróm futása közben nem mutatná az oldalakat ahonnan adatokat másol, csak a végeredményt!

    Biztosan van rá valami utasítás,csak még kezdő vagyok.

    Előre is köszi. :R

  • #90999040
    törölt tag

    "Természetesen a word-ből is lehet az excel objektumait használni."
    És a másik alkalmazás VBA utasításkészletét is? Tehát levezényelhetném az excelből (DDEExecute nélkül) a körlevélkészítést a MailMerge-vel valami módon?

    És a másik alkalmazás VBA utasításkészletét is? Tehát levezényelhetném az excelből (DDEExecute nélkül) a körlevélkészítést a MailMerge-vel valami módon?

    Természetesen. A legegyszerűbb, ha az excel vba referenciáihoz hozzáadod a "Microsoft Word x.y Object Library"-t. Ez után már használhatod pl. így(vilag #1472-es hozzászólása alapján):

    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Set wrdApp = CreateObject("Word.Application")
    With wrdApp
    .Visible = True 'látszik a word alkalmazás
    Set wrdDoc = .Documents.Open(".doc fájl neve") 'megnyitja a word documentumot
    .ActiveDocument.MailMerge.MainDocumentType = Word.wdFormLetters
    .ActiveDocument.MailMerge.OpenDataSource Name:=".xls fájl neve", _
    LinkToSource:=True, _
    Format:=Word.WdOpenFormat.wdOpenFormatAuto, _
    Connection:="Munka1$", _
    SQLStatement:="SELECT * FROM `Munka1$`"
    With .ActiveDocument.MailMerge
    .Destination = Word.wdSendToPrinter
    .SuppressBlankLines = False
    With .DataSource
    .FirstRecord = 14
    .LastRecord = ig2 'saját változó
    End With
    .Execute Pause:=False 'Mailmerge futtatása
    End With
    End With
    'wrdDoc.Close 'documentum bezárása
    'wrdApp.Quit 'word bezárása
    'takarítás
    'Set wrdApp = Nothing
    'Set wrdDoc = Nothing

  • Ha az Excel VBA Tools >> References résznél hozzáadod a Microsoft Word x.y Object Library-t, akkor használhatod a Word objectumait.

    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add
    'wrdDoc.Close
    'wrdApp.Quit

    Ez Excelből elindít egy word alkalmazást, hozzáad egy dokumentumot, és ha az utolsó 2 sor elejéről kiveszed az aposztrofokat, akkor be is zárja.
    Persze lehetne a referencia hozzáadása nélkül is, akkor viszont a Word.Application és a Word.Document helyett Object-eket kellene írni.

    Természetesen a word-ből is lehet az excel objektumait használni.

    Csak mint írtam, ekkor alapból nem "ismerik fel" a másik alkalmazás konstansait. ezért kell ezeket külön definiálni, mert különben teljesen mást csinál a kód, mint amit szeretnénk...

    "Természetesen a word-ből is lehet az excel objektumait használni."
    És a másik alkalmazás VBA utasításkészletét is? Tehát levezényelhetném az excelből (DDEExecute nélkül) a körlevélkészítést a MailMerge-vel valami módon?

  • Ha az Excel VBA Tools >> References résznél hozzáadod a Microsoft Word x.y Object Library-t, akkor használhatod a Word objectumait.

    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add
    'wrdDoc.Close
    'wrdApp.Quit

    Ez Excelből elindít egy word alkalmazást, hozzáad egy dokumentumot, és ha az utolsó 2 sor elejéről kiveszed az aposztrofokat, akkor be is zárja.
    Persze lehetne a referencia hozzáadása nélkül is, akkor viszont a Word.Application és a Word.Document helyett Object-eket kellene írni.

    Természetesen a word-ből is lehet az excel objektumait használni.

    Csak mint írtam, ekkor alapból nem "ismerik fel" a másik alkalmazás konstansait. ezért kell ezeket külön definiálni, mert különben teljesen mást csinál a kód, mint amit szeretnénk...

    Engem igazán az izgatna, hogy változót hogy tudok átadni mondjuk excelből wordbe.
    Mert itt a legnagyobb problémánk az volt, hogy a körlevél rekordszám az excelben megfelelő programrésszel meghatározott/szűrt sorok száma kell legyen, de ezt a változót csak az excel tábla egyik cellájából bírtuk kibányászni Wordből indított DDE hívással, ami egy baromi körülményes és vacak megoldásnak tűnik nekem:
    lngChannel = DDEInitiate(App:="Excel", Topic:="akarmi.xls")
    ig2 = DDERequest(Channel:=lngChannel, Item:="r11c17")
    Application.DDETerminateAll
    Többek között ez csak a "Munka1" lapról szed, én nem tudtam elérni, hogy más munkalap legyen a forrás, aztán csak a R1C1 stílusú hivatkozás működött; illetve ha nem volt látható a hivatkozott cella (mondjuk el volt rejtve vagy össze volt csukva az adott sor v. oszlop), akkor valami nem jó értéket adott vissza (karakterként négyzet, chr$-ként talán 13?).
    Sajnos a DDERequestről eddig nem sikerült normális (a VBA helpnél bővebb) leírást találnom, úgyhogy nem is vagyok tisztában vele, hogy esetleg valami más, értelmesebb, kezelhetőbb formában használható-e. :((

  • martonx
    veterán

    Sziasztok!

    Itt van egy program kód, és ezt szeretném megcsinálni, hogy ne LPT-n hanem USB-n tudjam használni. Ezt hogy tudom megtenni? milyen dll-t töltsek le? s milyen parancsokkal tudom ki be kapcsolni? -esetleg ha veszek egy USB to LPT átalakítót, akkor működne a jelenlegi program? maradna az LPT port címe ugyan ez?
    (Olyan laptopon kéne lefuttatni ezt a progit, amiben nincs PLT port)

    Választ előre is köszönöm!

    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

    Sub TEST()
    Dim x As Long
    Dim y As Long
    Dim v As Long
    Dim c As Long
    kezdes:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")

    If v = 1 Then GoTo sz1
    If v = 2 Then GoTo sz2
    If v <> 1 Or 2 Then GoTo kezdes

    sz1:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso1
    If v = 2 Then GoTo masodik1
    If v <> 1 Or 2 Then GoTo sz1

    elso1:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    GoTo vege

    masodik1:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    MsgBox (c)
    GoTo vege

    sz2:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso2
    If v = 2 Then GoTo masodik2
    If v <> 1 Or 2 Then GoTo sz1

    elso2:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    GoTo vege

    masodik2:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((9999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    MsgBox (c)
    GoTo vege

    vege:
    MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
    End Sub

    Most komolyan miben van manapság LPT port? Valami ledet villogtat a programod, nem lenne jobb magát a hardvert USB-síteni, a gyakorlatilag nem létező LPT helyett?

  • martonx
    veterán

    Sziasztok!

    Itt van egy program kód, és ezt szeretném megcsinálni, hogy ne LPT-n hanem USB-n tudjam használni. Ezt hogy tudom megtenni? milyen dll-t töltsek le? s milyen parancsokkal tudom ki be kapcsolni? -esetleg ha veszek egy USB to LPT átalakítót, akkor működne a jelenlegi program? maradna az LPT port címe ugyan ez?
    (Olyan laptopon kéne lefuttatni ezt a progit, amiben nincs PLT port)

    Választ előre is köszönöm!

    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

    Sub TEST()
    Dim x As Long
    Dim y As Long
    Dim v As Long
    Dim c As Long
    kezdes:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")

    If v = 1 Then GoTo sz1
    If v = 2 Then GoTo sz2
    If v <> 1 Or 2 Then GoTo kezdes

    sz1:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso1
    If v = 2 Then GoTo masodik1
    If v <> 1 Or 2 Then GoTo sz1

    elso1:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    GoTo vege

    masodik1:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    MsgBox (c)
    GoTo vege

    sz2:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso2
    If v = 2 Then GoTo masodik2
    If v <> 1 Or 2 Then GoTo sz1

    elso2:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    GoTo vege

    masodik2:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((9999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    MsgBox (c)
    GoTo vege

    vege:
    MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
    End Sub

    VB.Net tud alapból mindenféle Serial Portot kezelni.
    Az USB pedig nem más mint Universal Serial Bus, azaz egy serial port.
    Még nagy guglizás sem kell hozzá, msdn-en egész jó példák vannak.
    A kódod esetében már múltkor is pedzegettem, hogy nincs szükség benne a winapi hivatkozásokra.

    http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx#Y0

  • #90999040
    törölt tag

    Bocs, de nekem ez nem eléggé világos (ez mondjuk az én hibám). Megtennéd, hogy részletezed kicsit?

    Elmondanád, hogy a fenti problémát hogyan oldanád meg ezzel a módszerrel?
    Mert ugyan most működik, de ha lehet akkor egyszerűsítek rajta, plusz a módszer ismerete biztosan nem fog káromra válni.

    Köszi!

    Ha az Excel VBA Tools >> References résznél hozzáadod a Microsoft Word x.y Object Library-t, akkor használhatod a Word objectumait.

    Dim wrdApp As Word.Application
    Dim wrdDoc As Word.Document
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Set wrdDoc = wrdApp.Documents.Add
    'wrdDoc.Close
    'wrdApp.Quit

    Ez Excelből elindít egy word alkalmazást, hozzáad egy dokumentumot, és ha az utolsó 2 sor elejéről kiveszed az aposztrofokat, akkor be is zárja.
    Persze lehetne a referencia hozzáadása nélkül is, akkor viszont a Word.Application és a Word.Document helyett Object-eket kellene írni.

    Természetesen a word-ből is lehet az excel objektumait használni.

    Csak mint írtam, ekkor alapból nem "ismerik fel" a másik alkalmazás konstansait. ezért kell ezeket külön definiálni, mert különben teljesen mást csinál a kód, mint amit szeretnénk...

  • Zsargon89
    csendes tag

    Sziasztok!

    Itt van egy program kód, és ezt szeretném megcsinálni, hogy ne LPT-n hanem USB-n tudjam használni. Ezt hogy tudom megtenni? milyen dll-t töltsek le? s milyen parancsokkal tudom ki be kapcsolni? -esetleg ha veszek egy USB to LPT átalakítót, akkor működne a jelenlegi program? maradna az LPT port címe ugyan ez?
    (Olyan laptopon kéne lefuttatni ezt a progit, amiben nincs PLT port)

    Választ előre is köszönöm!

    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

    Sub TEST()
    Dim x As Long
    Dim y As Long
    Dim v As Long
    Dim c As Long
    kezdes:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")

    If v = 1 Then GoTo sz1
    If v = 2 Then GoTo sz2
    If v <> 1 Or 2 Then GoTo kezdes

    sz1:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso1
    If v = 2 Then GoTo masodik1
    If v <> 1 Or 2 Then GoTo sz1

    elso1:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    GoTo vege

    masodik1:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    MsgBox (c)
    GoTo vege

    sz2:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso2
    If v = 2 Then GoTo masodik2
    If v <> 1 Or 2 Then GoTo sz1

    elso2:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    GoTo vege

    masodik2:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((9999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 1
    Call PortOut(888, 0)
    Sleep 1
    Next
    MsgBox (c)
    GoTo vege

    vege:
    MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
    End Sub

  • vilag
    tag

    ezt kell a kívánt Word doksiba, vagyis a célfájlba írni

    Ha a Word konstansait definiálod az Excelben, akkor Excelben is használható.
    Az Excel ugyanis alapból nem tudja a Word konstansait. Pl.:

    Const wdSendToPrinter = 1

    Ezeket az értékeket meg tudod nézni Wordben úgy, hogy kiiratod őket. Pl.:

    Debug.Print wdSendToPrinter

    Bocs, de nekem ez nem eléggé világos (ez mondjuk az én hibám). Megtennéd, hogy részletezed kicsit?

    Elmondanád, hogy a fenti problémát hogyan oldanád meg ezzel a módszerrel?
    Mert ugyan most működik, de ha lehet akkor egyszerűsítek rajta, plusz a módszer ismerete biztosan nem fog káromra válni.

    Köszi!

  • Brown ügynök
    senior tag

    Itt lesz a megoldás elrejtve: [link] Azt szeretném kérdezni, hogy az első példában mikor helyettesítünk"a"-ba és mikor "b"-be?

    Az a lényeg, hogy a-t behelyettesítve mindig negatív oldalról közelít a 0-hoz, b-t behelyettesítve pedig pozitív oldalról.

  • Brown ügynök
    senior tag

    Van, a wikipédián találtam. [link] Nem nagyon tudtam értelmezni a képletet. Most jut eszembe, talán angolul bővebb leírás van róla. :)

    Itt lesz a megoldás elrejtve: [link] Azt szeretném kérdezni, hogy az első példában mikor helyettesítünk"a"-ba és mikor "b"-be?

  • martonx
    veterán

    Van, a wikipédián találtam. [link] Nem nagyon tudtam értelmezni a képletet. Most jut eszembe, talán angolul bővebb leírás van róla. :)

    egyedül a pénzáram nem érthető számomra, a többi szimpla matematikai műveleteket jelent a kamatlábbal.

  • Brown ügynök
    senior tag

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

    AE

    Van, a wikipédián találtam. [link] Nem nagyon tudtam értelmezni a képletet. Most jut eszembe, talán angolul bővebb leírás van róla. :)

  • 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

  • Brown ügynök
    senior tag

    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).

  • #90999040
    törölt tag

    Hali!

    Megoldódott a probléma! :))

    A kód (ezt kell a kívánt Word doksiba, vagyis a célfájlba írni):

    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource _
    Name:="xyz", _ 'forrásfájl helye
    LinkToSource:=True, _
    Format:=wdOpenFormatAuto, _
    Connection:="Munka1$", _
    SQLStatement:="SELECT * FROM `Munka1$`"

    With ActiveDocument.MailMerge
    .Destination = wdSendToPrinter
    .SuppressBlankLines = False
    With .DataSource
    .FirstRecord = 14
    .LastRecord = ig2 'saját változó
    End With
    .Execute Pause:=False
    End With

    Neház szülés volt, de meglett!!! :D

    ezt kell a kívánt Word doksiba, vagyis a célfájlba írni

    Ha a Word konstansait definiálod az Excelben, akkor Excelben is használható.
    Az Excel ugyanis alapból nem tudja a Word konstansait. Pl.:

    Const wdSendToPrinter = 1

    Ezeket az értékeket meg tudod nézni Wordben úgy, hogy kiiratod őket. Pl.:

    Debug.Print wdSendToPrinter

  • vilag
    tag

    hopsz a munkalap választásra megvan a válasz, gugli a barátod :)
    Tedd bele az OpenDataSource-ba, hogy : Connection:="Munka1"
    Ennek analógiájára, lehet lenne valami Headers:=true is vagy ilyesmi. Ez utóbbi csak ötlet volt. Ááá a HDR:=YES; mintha pont ezt jelentené

    .OpenDataSource Name:="C:\Documents\Names.xls", _
    ReadOnly:=True, _
    Connection:="Sales"

    Szóval akkor nem a header-rel lesz bajod, hanem a munkalap kiválasztásával.

    Esetleg még egy próba lehetőség letiltani a felugró ablakokat, ilyenkor hátha csöndben a háttérben megcsinálja? Application.DisplayAlerts = false

    Hali!

    Megoldódott a probléma! :))

    A kód (ezt kell a kívánt Word doksiba, vagyis a célfájlba írni):

    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource _
    Name:="xyz", _ 'forrásfájl helye
    LinkToSource:=True, _
    Format:=wdOpenFormatAuto, _
    Connection:="Munka1$", _
    SQLStatement:="SELECT * FROM `Munka1$`"

    With ActiveDocument.MailMerge
    .Destination = wdSendToPrinter
    .SuppressBlankLines = False
    With .DataSource
    .FirstRecord = 14
    .LastRecord = ig2 'saját változó
    End With
    .Execute Pause:=False
    End With

    Neház szülés volt, de meglett!!! :D

  • martonx
    veterán

    Próbálkoztam az fkeressel, de elsőre nem jött össze a mutatvány.
    Nekifutok akkor még egyszer, köszi a tippet.

    Ha esetleg mégse menne, akkor szólj, fél percet bármikor szívesen rászánok mások segítésére.

  • neo446
    csendes tag

    FKERES függvény pont ezt csinálja :DDD
    A lényeg csak a B és a C oszlop az esetedben. Excelben nyomsz egy F1-et, majd rákeresel az FKERES-re, elolvasod mit ír, és menni fog ez. Fél perces ujjgyakorlat.
    Miért kell ehhez Visual Basic?

    Próbálkoztam az fkeressel, de elsőre nem jött össze a mutatvány.
    Nekifutok akkor még egyszer, köszi a tippet.

  • martonx
    veterán

    Sziasztok!
    Excel bajom van és hátha tud valaki segíteni.
    A feladat az lenne, hogy egy adott összeghez meg kell határoznom az utalási költséget.
    Vagyis van A-B-C oszlopom, és ebben fel vannak sorolva az értékhatárok és hogy mennyi az utalási költség.
    A,B,C
    0,100,5
    101,300,50
    301,500,100
    501,1000,150
    1001,2000,200
    stb...
    Egy olyan függvényre lenne szükségem, aminek mondok egy utalandó összeget ezt összeveti az A-B oszlopokkal és visszaadja a C oszlopban szereplő utalási költséget.
    Logikai függvényekkel próbáltam megoldani, de sajnos túl sok sort kell vizsgálni/felsorolni és szegény excel besokal tőle.
    Köszönöm a segítséget előre is!

    FKERES függvény pont ezt csinálja :DDD
    A lényeg csak a B és a C oszlop az esetedben. Excelben nyomsz egy F1-et, majd rákeresel az FKERES-re, elolvasod mit ír, és menni fog ez. Fél perces ujjgyakorlat.
    Miért kell ehhez Visual Basic?

  • neo446
    csendes tag

    Sziasztok!
    Excel bajom van és hátha tud valaki segíteni.
    A feladat az lenne, hogy egy adott összeghez meg kell határoznom az utalási költséget.
    Vagyis van A-B-C oszlopom, és ebben fel vannak sorolva az értékhatárok és hogy mennyi az utalási költség.
    A,B,C
    0,100,5
    101,300,50
    301,500,100
    501,1000,150
    1001,2000,200
    stb...
    Egy olyan függvényre lenne szükségem, aminek mondok egy utalandó összeget ezt összeveti az A-B oszlopokkal és visszaadja a C oszlopban szereplő utalási költséget.
    Logikai függvényekkel próbáltam megoldani, de sajnos túl sok sort kell vizsgálni/felsorolni és szegény excel besokal tőle.
    Köszönöm a segítséget előre is!

  • Egy VB programozóra lenne szükségem aki tudna segíteni egy VB ben írt program átalakításában.
    Ha valakinek lenne ideje segíteni, rám írhatna.
    :D
    Előre is köszönöm a segítséget.

  • martonx
    veterán

    Ezeken már túl vagyok, de a wordben rögzített makrót nem tudom maradéktalanul átfordítani excelbe, mert nem egészen értem minden részét, de valaki ebben segít akkor lehet, hogy meg is oldódik a probléma. Alább a rögzített makró:

    Sub
    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource Name:= _
    "V:\Postakönyv\nyomtatas.xls", ConfirmConversions:=False, ReadOnly:=False _
    , LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
    PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
    "", Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
    "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=V:\Postakönyv\nyomtatas.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type" _
    , SQLStatement:="SELECT * FROM `Munka1$`", SQLStatement1:="", SubType:= _
    wdMergeSubTypeAccess

    End Sub

    Addig eljutottam, hogy az "SQLStatement" adja meg a munkalapot, de még így is megáll (gondolom azért mert nem tudtam megadni a fejléc van/nincs-re a választ. Szóval az ablak így is feljön, a különbség csupán az, hogy nincs egyetlen egy kiválasztható munkalap sem a listán.

    Sejtem, hogy a Extended Properties=""HDR=YES kell nekem, de nem tudom úgy megírni az excelben, hogy az eljáráshíváskor az is átkerüljön.

    hopsz a munkalap választásra megvan a válasz, gugli a barátod :)
    Tedd bele az OpenDataSource-ba, hogy : Connection:="Munka1"
    Ennek analógiájára, lehet lenne valami Headers:=true is vagy ilyesmi. Ez utóbbi csak ötlet volt. Ááá a HDR:=YES; mintha pont ezt jelentené

    .OpenDataSource Name:="C:\Documents\Names.xls", _
    ReadOnly:=True, _
    Connection:="Sales"

    Szóval akkor nem a header-rel lesz bajod, hanem a munkalap kiválasztásával.

    Esetleg még egy próba lehetőség letiltani a felugró ablakokat, ilyenkor hátha csöndben a háttérben megcsinálja? Application.DisplayAlerts = false

  • martonx
    veterán

    Ezeken már túl vagyok, de a wordben rögzített makrót nem tudom maradéktalanul átfordítani excelbe, mert nem egészen értem minden részét, de valaki ebben segít akkor lehet, hogy meg is oldódik a probléma. Alább a rögzített makró:

    Sub
    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource Name:= _
    "V:\Postakönyv\nyomtatas.xls", ConfirmConversions:=False, ReadOnly:=False _
    , LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
    PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
    "", Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
    "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=V:\Postakönyv\nyomtatas.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type" _
    , SQLStatement:="SELECT * FROM `Munka1$`", SQLStatement1:="", SubType:= _
    wdMergeSubTypeAccess

    End Sub

    Addig eljutottam, hogy az "SQLStatement" adja meg a munkalapot, de még így is megáll (gondolom azért mert nem tudtam megadni a fejléc van/nincs-re a választ. Szóval az ablak így is feljön, a különbség csupán az, hogy nincs egyetlen egy kiválasztható munkalap sem a listán.

    Sejtem, hogy a Extended Properties=""HDR=YES kell nekem, de nem tudom úgy megírni az excelben, hogy az eljáráshíváskor az is átkerüljön.

    hm, mezitlábas ötlet, de ha a használt excelből kitörlöd a többi munkalapot csak az az egy marad meg benne, akkor is rákérdez, hogy melyik munkalapot akarod használni?
    A fejléccel kapcsolatban nincs ötletem.

  • vilag
    tag

    Lehet nagyon banális ötlet, de megnézném makró rögzítéssel, hogy milyen makrót ír a fenti cselekvés sorozatnál. Esetleg msdn, vagy gugli nem javasol valami okosat?

    Ezeken már túl vagyok, de a wordben rögzített makrót nem tudom maradéktalanul átfordítani excelbe, mert nem egészen értem minden részét, de valaki ebben segít akkor lehet, hogy meg is oldódik a probléma. Alább a rögzített makró:

    Sub
    ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    ActiveDocument.MailMerge.OpenDataSource Name:= _
    "V:\Postakönyv\nyomtatas.xls", ConfirmConversions:=False, ReadOnly:=False _
    , LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:="", _
    PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:= _
    "", Revert:=False, Format:=wdOpenFormatAuto, Connection:= _
    "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=V:\Postakönyv\nyomtatas.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type" _
    , SQLStatement:="SELECT * FROM `Munka1$`", SQLStatement1:="", SubType:= _
    wdMergeSubTypeAccess

    End Sub

    Addig eljutottam, hogy az "SQLStatement" adja meg a munkalapot, de még így is megáll (gondolom azért mert nem tudtam megadni a fejléc van/nincs-re a választ. Szóval az ablak így is feljön, a különbség csupán az, hogy nincs egyetlen egy kiválasztható munkalap sem a listán.

    Sejtem, hogy a Extended Properties=""HDR=YES kell nekem, de nem tudom úgy megírni az excelben, hogy az eljáráshíváskor az is átkerüljön.

  • martonx
    veterán

    Hali!

    Számomra megoldhatatlannak tűnő problémába ütköztem.
    Arról lenne szó, hogy van nekem egy postakönyv.xls táblám. Ebben tárolom soronként az adott levélhez tartozó értékeket. Ez a tábla szolgál adatbázisként egy (illetve több) wordfájlhoz (mint boríték és tértivevény sablon).

    Azt szeretném elérni, hogy a postakönyv mentése után ne kelljen azt bezárnom és a kívánt wordfájlt elindítva (a már korábban csatolt postakönyv.xls-t sql futását engedélyezve) nyomtatnom.

    A cél az lenne, hogy a postakönyvből userform segítségével tudjam meghatározni, hogy melyik word fájlt indítsa el (természetesen csak a háttérben) és mettől meddig terjedő tételeket nyomtassa ki.

    A megoldás már félig megvan. Odáig eljutottam, hogy az excellel elindítom a kívánt wordfájlt, majd hozzácsatolom a postakönyv.xls-ből kiexportált (ez a rész is megírva) nyomtatas.xls-t.

    Léptetésben működik is a dolog, egyedül ott akad meg a dolog, hogy rákérdez, hogy az adatbázis tábla melyik lapját kívánom csatolni és az eslő sora oszlopfejléceket tartalmaz e.

    Azt szeretném elérni, hogy ez ne akassza meg a folyamatot és ne legyen rákérdezés, hanem az előre definiált lapot csatolja és az első sor oszlopfejléceket tartalmazzon.

    Eddig a programkód:
    channelnumber = Application.DDEInitiate(app:="WinWord", topic:=op1)
    Application.DDEExecute channelnumber, "[fileopen .name=""V:\Postakönyv\00-TV_sablon_(16,5x10,6_cm)1.doc""][mailmergeopendatasource .name=""V:\Postakönyv\nyomtatas.xls"" ][mailmergeopendatasource .SQLStatement:=SELECT * FROM `Munka1$`][mailmerge .destination=1, .mergerecords=1, .from=14, .to=" + ig + ", .mailmerge][appclose ""word""]" '[FILEPRINT .range=0]" '[appclose " + Chr(34) + "word" + Chr(34) + "]" '[toolsoptionssave .globaldotprompt=0]

    Ahol op1 = "V:\Postakönyv\00-TV_sablon_(16,5x10,6_cm).doc"
    ig = Trim(Str(hanysor + 13))
    ahol:
    hanysor= hány tételt kell nyomtatni

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

    Lehet nagyon banális ötlet, de megnézném makró rögzítéssel, hogy milyen makrót ír a fenti cselekvés sorozatnál. Esetleg msdn, vagy gugli nem javasol valami okosat?

  • Brown ügynök
    senior tag

    Lenne egy problémám, amivel már sokat foglalkoztam de nem akar összejönni a megoldás...

    Cél: Azt szeretném elérni, hogy a Do Loop Until ciklus addig futtassa a For Next ciklust, amíg a For Next ciklus végére az egyik cella értéke el nem éri a nullát.

    A For Next lefutása esetén annyi történik, hogy a DataGridView-hoz hozzáadódik egy újabb sor, bizonyos számított értékekkel. Ezt egészen addig teszi amíg a futamidő tart (pl. 12 hónap, 12 sor). Igen ám, de a 0. sorban szeretném megjeleníteni a kiinduló értékeket, (tehát összesen 13 sor jelenne meg ) Hogy lehetne ezt megoldani?

    Következő kérdés: A Do Loop Until-nak addig kellene futnia, amíg For Next ciklusban a ciklus végére az egyik oszlop értéke 0 nem lesz. Tehát valahogy érték változásokat kellene rögzítenem, mielőtt újból lefut a For Next. Hol változtassam meg az értéket, hogy a For Next a megváltozott értékekkel fusson?

    És egy utolsó kérdés. Amikor a For Next lefutott ( 13 sor ), hogyan tudom eltüntetni ezeket a sorokat és a legközelebbi számításnál, újra csak 13 sort megjeleníteni?

    Nagy segítség lenne. :)

    1. Ha a sorszám = 0 akkor kiíródnak az alapadatok.

    2. A Next előtt, miután hozzáadtuk az aktuális sort megvizsgáljuk a szükséges cella értékét. Ha nem 0 akkor változtatunk a szükséges értékeken.

    3. Me.DataGridView1.Rows.Clear()

  • vilag
    tag

    Hali!

    Számomra megoldhatatlannak tűnő problémába ütköztem.
    Arról lenne szó, hogy van nekem egy postakönyv.xls táblám. Ebben tárolom soronként az adott levélhez tartozó értékeket. Ez a tábla szolgál adatbázisként egy (illetve több) wordfájlhoz (mint boríték és tértivevény sablon).

    Azt szeretném elérni, hogy a postakönyv mentése után ne kelljen azt bezárnom és a kívánt wordfájlt elindítva (a már korábban csatolt postakönyv.xls-t sql futását engedélyezve) nyomtatnom.

    A cél az lenne, hogy a postakönyvből userform segítségével tudjam meghatározni, hogy melyik word fájlt indítsa el (természetesen csak a háttérben) és mettől meddig terjedő tételeket nyomtassa ki.

    A megoldás már félig megvan. Odáig eljutottam, hogy az excellel elindítom a kívánt wordfájlt, majd hozzácsatolom a postakönyv.xls-ből kiexportált (ez a rész is megírva) nyomtatas.xls-t.

    Léptetésben működik is a dolog, egyedül ott akad meg a dolog, hogy rákérdez, hogy az adatbázis tábla melyik lapját kívánom csatolni és az eslő sora oszlopfejléceket tartalmaz e.

    Azt szeretném elérni, hogy ez ne akassza meg a folyamatot és ne legyen rákérdezés, hanem az előre definiált lapot csatolja és az első sor oszlopfejléceket tartalmazzon.

    Eddig a programkód:
    channelnumber = Application.DDEInitiate(app:="WinWord", topic:=op1)
    Application.DDEExecute channelnumber, "[fileopen .name=""V:\Postakönyv\00-TV_sablon_(16,5x10,6_cm)1.doc""][mailmergeopendatasource .name=""V:\Postakönyv\nyomtatas.xls"" ][mailmergeopendatasource .SQLStatement:=SELECT * FROM `Munka1$`][mailmerge .destination=1, .mergerecords=1, .from=14, .to=" + ig + ", .mailmerge][appclose ""word""]" '[FILEPRINT .range=0]" '[appclose " + Chr(34) + "word" + Chr(34) + "]" '[toolsoptionssave .globaldotprompt=0]

    Ahol op1 = "V:\Postakönyv\00-TV_sablon_(16,5x10,6_cm).doc"
    ig = Trim(Str(hanysor + 13))
    ahol:
    hanysor= hány tételt kell nyomtatni

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

  • Brown ügynök
    senior tag

    Lenne egy problémám, amivel már sokat foglalkoztam de nem akar összejönni a megoldás...

    Cél: Azt szeretném elérni, hogy a Do Loop Until ciklus addig futtassa a For Next ciklust, amíg a For Next ciklus végére az egyik cella értéke el nem éri a nullát.

    A For Next lefutása esetén annyi történik, hogy a DataGridView-hoz hozzáadódik egy újabb sor, bizonyos számított értékekkel. Ezt egészen addig teszi amíg a futamidő tart (pl. 12 hónap, 12 sor). Igen ám, de a 0. sorban szeretném megjeleníteni a kiinduló értékeket, (tehát összesen 13 sor jelenne meg ) Hogy lehetne ezt megoldani?

    Következő kérdés: A Do Loop Until-nak addig kellene futnia, amíg For Next ciklusban a ciklus végére az egyik oszlop értéke 0 nem lesz. Tehát valahogy érték változásokat kellene rögzítenem, mielőtt újból lefut a For Next. Hol változtassam meg az értéket, hogy a For Next a megváltozott értékekkel fusson?

    És egy utolsó kérdés. Amikor a For Next lefutott ( 13 sor ), hogyan tudom eltüntetni ezeket a sorokat és a legközelebbi számításnál, újra csak 13 sort megjeleníteni?

    Nagy segítség lenne. :)

  • Brown ügynök
    senior tag

    Nézem én az MSDN-t de hatalmas anyag. :D

    Esetleg a megjelenítésre tudnál valami rávezetőt írni / linkelni?

    Sikerült így megoldani:

    Private Sub Szamolas() Handles btnCalculate.Click

    Dim DatumCH As Date
    Dim Datum As String
    Dim Hitel As Int32
    Dim DG As New DataTable()

    Dim lRow As New DataGridViewRow

    DatumCH = DateTimePicker1.Value
    Datum = DatumCH.ToString()

    Hitel = NumericUpDown1.Value


    Dim Cell1 As New DataGridViewTextBoxCell
    Cell1.Value = Hitel
    lRow.Cells.Add(Cell1)

    Dim Cell2 As New DataGridViewTextBoxCell
    Cell2.Value = Datum
    lRow.Cells.Add(Cell2)

    grdTorlesztesiTerv.Rows.Add(lRow)

    End Sub

    Na most így minden cella értékét sorban kell megadni (ahogy a fejléc diktálja). Ez hasonlít kicsit a javascriptre. Van ennél egyszerűbb / jobb megoldás? Vagy egyéb tanács?

  • Brown ügynök
    senior tag

    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

    Nézem én az MSDN-t de hatalmas anyag. :D

    Esetleg a megjelenítésre tudnál valami rávezetőt írni / linkelni?

  • 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

  • Brown ügynök
    senior tag

    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.

  • RexpecT
    addikt

    Értem, köszi a válaszokat.Ezen kívül még lesz Progab1 illetve Proglab2 tárgyam is majd a következő és a rákövetkező félévben.Eddig ott vagy C# vagy JAVA vagy PHP volt, ha jól tudom, de most lehet változtatnak.De a lényeg, hogy hasznát lehet venni a munkaerőpiacon :R .

  • martonx
    veterán

    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.

    Gazdasági informatikán a C++-al kitörölheted.

    Én a VB-vel elfogult vagyok, makró programozáshoz baromi nagy segítség a VB tudás, személy szerint a VB.Net nagy kedvencem (ennek mondjuk gyakorlatilag eltűnt a piaca), a vbscript is hasznos lehet céges, hardver üezemeltetési környezetben.

  • 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

  • RexpecT
    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.

  • #90999040
    törölt tag

    S igen. Köszönöm!!! sikerült :C
    -de lenne még 1 kérdésem:
    Hogy tudom ezt futtatható állományként menteni? :F
    Köszönöm!

    A win1.exe-t megtalálod a c:\......\win1\win1\Bin\Debug mappában, amennyiben "win1" a projekt neve. De külön is le tudod fordítani a Build -> Build Solutionnal.

  • Zsargon89
    csendes tag

    S igen. Köszönöm!!! sikerült :C
    -de lenne még 1 kérdésem:
    Hogy tudom ezt futtatható állományként menteni? :F
    Köszönöm!

  • Zsargon89
    csendes tag

    Na most, odáig eljutottam, hogy ha Consol Porjectet csinálok, ott már lefut a program.
    Már csak annyi lenne, hogy hogy tudom eltűntetni, a fekete ablakos konzolt?
    (az jön elő. és mögötte van az én progim)

    Oke köszi, próbálom.

  • #90999040
    törölt tag

    Szeretném lecserélni, de Sajna a VB studio 2008hoz (meg máshoz se) nem értek :F

    Elindítom a prpgramot, és New Project- de ott kidob több dolgot is.
    Itt meiket kell kiválasztanom? próbáltam úgy hogy ezekközüll kiválasztottam egyet, és ott adtam hozzá modult, s abban szerettem volna írni, de különböző projecteknél különböző hiba.
    -bár mikor Formot inítottam, ott nem írt ki hibát a program (modulban), de hiába töröltem a formot, futtatásnál mégis előhozott egy üres ablakot.

    Elindítod a Vs 2008-at.
    File -> New -> Project...
    A megjelenő ablakban létrehozol egy Forms projektet.
    Project -> Add Module...
    A létrehozott modulba bemásolod a kódodat, majd megcsinálod vele, amiket előzőleg írtam.
    A modulba ezután beleteszed ezt:

    Sub Main()
    TEST()
    End Sub

    Ha ez megvan, akkor Solution Explorer ablakban*** dupla katt a "My project"-re.
    Itt az Application fülön az "Enable Application Framework" elől a pipát kiveszed.
    Ugyanezen a fülön "Startup Object"-nél a "Sub Main"-t választod ki.
    Ha mindent jól csináltál, akkor F5-re indulnia is kellene a programnak.

    ***: ha nem látszik ez az ablak, akkor View -> Solution Explorer

  • Zsargon89
    csendes tag

    Az LPT-t nyomtatáshoz használod vagy valamilyen egyéb eszközt vezérelsz vele?

    Ha nyomtatáshoz használod, akkor mégis csak a vbscript-es ötletemnél kellene maradni. Ha egyéb eszközt irányítasz vele, akkor tényleg érdemes .Net-esíteni. Ebben tudunk segíteni.

    Visual Studio-ban is gondolom elég lesz egy Console application projekt.

    Egyenlőre, egy ledet vilan fel, a megadott "értékszer...",
    - de majd egy számlálót kéne annyiszot tovább léptetnie, amennyi értéket beírunk.
    (Tényleg, ha jól tudom egy láb 3,valamennyi volt. Egy pl.6 voltos ezközt, ha 2 lábra kötöm rá, az ér? [persze megfelelő ellenálással...]

  • martonx
    veterán

    Szeretném lecserélni, de Sajna a VB studio 2008hoz (meg máshoz se) nem értek :F

    Elindítom a prpgramot, és New Project- de ott kidob több dolgot is.
    Itt meiket kell kiválasztanom? próbáltam úgy hogy ezekközüll kiválasztottam egyet, és ott adtam hozzá modult, s abban szerettem volna írni, de különböző projecteknél különböző hiba.
    -bár mikor Formot inítottam, ott nem írt ki hibát a program (modulban), de hiába töröltem a formot, futtatásnál mégis előhozott egy üres ablakot.

    Az LPT-t nyomtatáshoz használod vagy valamilyen egyéb eszközt vezérelsz vele?

    Ha nyomtatáshoz használod, akkor mégis csak a vbscript-es ötletemnél kellene maradni. Ha egyéb eszközt irányítasz vele, akkor tényleg érdemes .Net-esíteni. Ebben tudunk segíteni.

    Visual Studio-ban is gondolom elég lesz egy Console application projekt.

  • Zsargon89
    csendes tag

    Visual Basic 2008-ra javaslom a következőket:

    A Long-okat cseréld le Integer-re.

    Az inputboxokat pedig módosítsd így:
    v = Integer.Parse(InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló"))

    Az Integer.Parse() (vagy más konverziós függvény) azért kell, mert Vb.net-ben az inputbox stringet ad vissza.

    Szeretném lecserélni, de Sajna a VB studio 2008hoz (meg máshoz se) nem értek :F

    Elindítom a prpgramot, és New Project- de ott kidob több dolgot is.
    Itt meiket kell kiválasztanom? próbáltam úgy hogy ezekközüll kiválasztottam egyet, és ott adtam hozzá modult, s abban szerettem volna írni, de különböző projecteknél különböző hiba.
    -bár mikor Formot inítottam, ott nem írt ki hibát a program (modulban), de hiába töröltem a formot, futtatásnál mégis előhozott egy üres ablakot.

  • 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

  • martonx
    veterán

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

    AE

    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.

  • Oly
    őstag

    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

    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)

  • #90999040
    törölt tag

    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

    Igen így már lehet...

  • 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

  • Oly
    őstag

    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

    Sajnos el sem indul.

    Ezt dobja egyből:

  • 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

  • Oly
    őstag

    Sziasztok

    Sajnos ez nekem nem mond sokat.
    Nem programoztam még sosem, csak így magamtól, mókolgattam össze ezeket a dolgokat.

    Ezt a gyakorlatban hogy oldhatom meg?
    Segít, ha becopyzom a forráskódot?

    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

  • martonx
    veterán

    Javaslom neked a vbscriptet.

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

    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.

  • 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

  • Oly
    őstag

    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

    Sziasztok

    Sajnos ez nekem nem mond sokat.
    Nem programoztam még sosem, csak így magamtól, mókolgattam össze ezeket a dolgokat.

    Ezt a gyakorlatban hogy oldhatom meg?
    Segít, ha becopyzom a forráskódot?

  • #90999040
    törölt tag

    Sziasztok!

    .bas to .exe Hogy?

    Microsoft Excel-ben /Makro/ Visual Basic Szerkesztő-ben írtam egy "modult" -vagy mit,
    mely LPT portot vezérel. (Sokat szenvedtem vele :C )
    Ezt a "programot" szeretném, excel nélküli, önnáló, futtatható állományként elmenteni.
    Excel (Visual basic szerkesztő) csak .bas kiterjesztést enged.
    iexpress-el próbáltam, de ott csak a háttérben fut le valami. (nem hiszem h az én progim, mert az adatbekéréssel kezdődik...)
    Már letöltöttem a Visual Basic 2008+Visual C Sharp progrot, de oda hiába másolom be amit írtam, futtatásná hibát ír ki. (már ha tudom futtatni ...)

    Hogy tudom, a .bas kiterjesztést .exe ként menteni? -vagy hogy tudom a fájlt Visual Basic 2008 vagy Visual C Sharp-ban működésre bírni?
    (esetleg extra lenne, ha a io.dll-fájlt nem kéne külön (ez kell a progihoz) bemásolnom system32-be hanem magával hordozná, vagy automatice bemásolná...-de ez tényleg csak extra..)
    Válaszokat előre is köszönöm!

    A megírt cucc ez lenne:

    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

    Sub TEST()
    Dim x As Long
    Dim y As Long
    Dim v As Long
    Dim c As Long
    kezdes:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")

    If v = 1 Then GoTo sz1
    If v = 2 Then GoTo sz2
    If v <> 1 Or 2 Then GoTo kezdes

    sz1:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso1
    If v = 2 Then GoTo masodik1
    If v <> 1 Or 2 Then GoTo sz1

    elso1:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    GoTo vege

    masodik1:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    MsgBox (c)
    GoTo vege

    sz2:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso2
    If v = 2 Then GoTo masodik2
    If v <> 1 Or 2 Then GoTo sz1

    elso2:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    GoTo vege

    masodik2:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((9999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    MsgBox (c)
    GoTo vege

    vege:
    MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
    End Sub

    Visual Basic 2008-ra javaslom a következőket:

    A Long-okat cseréld le Integer-re.

    Az inputboxokat pedig módosítsd így:
    v = Integer.Parse(InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló"))

    Az Integer.Parse() (vagy más konverziós függvény) azért kell, mert Vb.net-ben az inputbox stringet ad vissza.

  • #90999040
    törölt tag

    Szia!

    Javaslom neked a vbscriptet. Az 95%-ban kompatibils az office makróval.
    Azaz a kódodat másold át notepad-be, majd mentsd le .vbs néven.
    Ezt command line-ból cscript valami.vbs néven fogod tudni futtatni.

    Debugolni pedig cscript //X //D valami.vbs-ként fogod tudni, ha mégsem menne egy az egyben vbs-ként.

    Javaslom neked a vbscriptet.

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

  • 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

  • martonx
    veterán

    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.

    én a helyedben megpróbálnám makróban lekezelni a területi beállításokból fakadó eltéréseket. Egyáltalán makróban lehet megnézni, hogy pontosan mi és miért nem megy. Ha pedig ez megvan, akkor már kb. meg is oldottad a problémát.

  • martonx
    veterán

    Sziasztok!

    .bas to .exe Hogy?

    Microsoft Excel-ben /Makro/ Visual Basic Szerkesztő-ben írtam egy "modult" -vagy mit,
    mely LPT portot vezérel. (Sokat szenvedtem vele :C )
    Ezt a "programot" szeretném, excel nélküli, önnáló, futtatható állományként elmenteni.
    Excel (Visual basic szerkesztő) csak .bas kiterjesztést enged.
    iexpress-el próbáltam, de ott csak a háttérben fut le valami. (nem hiszem h az én progim, mert az adatbekéréssel kezdődik...)
    Már letöltöttem a Visual Basic 2008+Visual C Sharp progrot, de oda hiába másolom be amit írtam, futtatásná hibát ír ki. (már ha tudom futtatni ...)

    Hogy tudom, a .bas kiterjesztést .exe ként menteni? -vagy hogy tudom a fájlt Visual Basic 2008 vagy Visual C Sharp-ban működésre bírni?
    (esetleg extra lenne, ha a io.dll-fájlt nem kéne külön (ez kell a progihoz) bemásolnom system32-be hanem magával hordozná, vagy automatice bemásolná...-de ez tényleg csak extra..)
    Válaszokat előre is köszönöm!

    A megírt cucc ez lenne:

    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

    Sub TEST()
    Dim x As Long
    Dim y As Long
    Dim v As Long
    Dim c As Long
    kezdes:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")

    If v = 1 Then GoTo sz1
    If v = 2 Then GoTo sz2
    If v <> 1 Or 2 Then GoTo kezdes

    sz1:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso1
    If v = 2 Then GoTo masodik1
    If v <> 1 Or 2 Then GoTo sz1

    elso1:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    GoTo vege

    masodik1:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    MsgBox (c)
    GoTo vege

    sz2:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso2
    If v = 2 Then GoTo masodik2
    If v <> 1 Or 2 Then GoTo sz1

    elso2:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    GoTo vege

    masodik2:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((9999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    MsgBox (c)
    GoTo vege

    vege:
    MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
    End Sub

    Szia!

    Javaslom neked a vbscriptet. Az 95%-ban kompatibils az office makróval.
    Azaz a kódodat másold át notepad-be, majd mentsd le .vbs néven.
    Ezt command line-ból cscript valami.vbs néven fogod tudni futtatni.

    Debugolni pedig cscript //X //D valami.vbs-ként fogod tudni, ha mégsem menne egy az egyben vbs-ként.

  • Oly
    őstag

    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?


    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.

  • Zsargon89
    csendes tag

    Sziasztok!

    .bas to .exe Hogy?

    Microsoft Excel-ben /Makro/ Visual Basic Szerkesztő-ben írtam egy "modult" -vagy mit,
    mely LPT portot vezérel. (Sokat szenvedtem vele :C )
    Ezt a "programot" szeretném, excel nélküli, önnáló, futtatható állományként elmenteni.
    Excel (Visual basic szerkesztő) csak .bas kiterjesztést enged.
    iexpress-el próbáltam, de ott csak a háttérben fut le valami. (nem hiszem h az én progim, mert az adatbekéréssel kezdődik...)
    Már letöltöttem a Visual Basic 2008+Visual C Sharp progrot, de oda hiába másolom be amit írtam, futtatásná hibát ír ki. (már ha tudom futtatni ...)

    Hogy tudom, a .bas kiterjesztést .exe ként menteni? -vagy hogy tudom a fájlt Visual Basic 2008 vagy Visual C Sharp-ban működésre bírni?
    (esetleg extra lenne, ha a io.dll-fájlt nem kéne külön (ez kell a progihoz) bemásolnom system32-be hanem magával hordozná, vagy automatice bemásolná...-de ez tényleg csak extra..)
    Válaszokat előre is köszönöm!

    A megírt cucc ez lenne:

    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

    Sub TEST()
    Dim x As Long
    Dim y As Long
    Dim v As Long
    Dim c As Long
    kezdes:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- 6 számjegyű számláló" & Chr(13) & Chr(10) & "2- 7 számjegyű számláló")

    If v = 1 Then GoTo sz1
    If v = 2 Then GoTo sz2
    If v <> 1 Or 2 Then GoTo kezdes

    sz1:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso1
    If v = 2 Then GoTo masodik1
    If v <> 1 Or 2 Then GoTo sz1

    elso1:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    GoTo vege

    masodik1:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    MsgBox (c)
    GoTo vege

    sz2:
    v = InputBox("Válasszon az alábbi lehetősékeg közüll" & Chr(13) & Chr(10) & "1- Egy megadott értéket bepörget" & Chr(13) & Chr(10) & "2- A megadott értéktől, egy megadott értékig pörget")

    If v = 1 Then GoTo elso2
    If v = 2 Then GoTo masodik2
    If v <> 1 Or 2 Then GoTo sz1

    elso2:
    x = InputBox("Írja be a bepörgetni kívánt értéket!")
    For i = 1 To x
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    GoTo vege

    masodik2:
    x = InputBox("Írja be a jelenlegi számlálóállást!")
    y = InputBox("Írja be az elérni kívánt számlálóállást")
    c = (y - x)
    If (x > y) Then c = ((9999999 - x) + 1 + y)
    For i = 1 To c
    Call PortOut(888, 1)
    Sleep 500
    Call PortOut(888, 0)
    Sleep 500
    Next
    MsgBox (c)
    GoTo vege

    vege:
    MsgBox ("SZÁMLÁLÓ BEÁLLÍTVA" & Chr(13) & Chr(10) & "TOVÁBBI JÓ MUNKÁT!")
    End Sub

  • 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

  • #90999040
    törölt tag

    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

    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.

  • 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

  • martonx
    veterán

    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

    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.

  • 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

  • #90999040
    törölt tag

    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

    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

  • 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

  • martonx
    veterán

    Itthon már rá tudtam guglizni és valszeg az ékezetes mezőnevek lesznek a hiba okozók!

    Holnap megnézem. :R

    területi beállítások mindkettőn legyen magyar.

  • Oly
    őstag

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

    AE

    Itthon már rá tudtam guglizni és valszeg az ékezetes mezőnevek lesznek a hiba okozók!

    Holnap megnézem. :R

  • Homer
    tag

    Nah, kipróbáltam a standard maszkokkal is de azokkal sem jól működik. Valakinek valami ötlet, hozzászólás? :S

    Üdv ismét! Gondoltam leírom amit azóta sikerült megtudnom. Azaz inkább azt írom le, hogy hogyan oldottam meg a feladatot. A maskedtextbox resetonspace tulajdonságának true-ra állításával a space-ekket "lekezeli a textbox". (Space inputra a maszk nem lép digitet ha azt a karaktert a maszk nem engedi, mint pl. a "0" maszk esetén.) Azonban így is gondot okozhat ha a user az arrow key-ekkel vagy egérrel elmozdítja kurzort begépelés közben. Ezt a kivételt utólag a MaskCompleted tulajdonság ellenőrzésével egyszerűen lehet kezelni. :) A megoldás tehát:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    MsgBox(MaskedTextBox1.MaskFull)
    End Sub

    Private Sub MaskedTextBox1_TextChanged(sender As Object, e As System.EventArgs) Handles MaskedTextBox1.TextChanged
    If MaskedTextBox1.MaskCompleted Then Button1.Enabled = True Else Button1.Enabled = False
    End Sub

    A button1 így csak akkor elérhető ha teljesen ki van töltve a textbox, és oda pedig csak érvényes karaktereket (tehát space-t nem!) lehet írni. Probléma megoldva! :) Köszönöm mindenkinek aki esetleg gondolkodott rajta! :)

  • Homer
    tag

    Köszi a választ, bár nem sokat segít amit írtál. Sajna most éppen dolgozom, de ha este hazamegyek kipróbálom a predefined maskokat, hogy azok hogy viselkednek. Ha valaki kipróbálná közben írja már le a tapasztalatát és a véleményét! Köszi előre is! És... UP! :)

    Nah, kipróbáltam a standard maszkokkal is de azokkal sem jól működik. Valakinek valami ötlet, hozzászólás? :S

  • Oly
    őstag

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

    AE

    Angol mindegyik!

    Talán a dátum és a Local beállítások nem egyeznek, mert egyiken 2011.09.14, másikon 14/09/2011 formátumban írta a dátumot, de ez nem volt zavaró azon a gépen, amin néztem.

    Van amelyik PC-n, van ami terminal serveren (2003) fut, de nem ez okozza... :((

  • 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

  • Oly
    őstag

    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?


  • Homer
    tag

    fogalmam sincs sose használtam, winforms-t is már évekkel ezelőtt. Esetleg az előre definiált maszkokkal mit csinál?

    Köszi a választ, bár nem sokat segít amit írtál. Sajna most éppen dolgozom, de ha este hazamegyek kipróbálom a predefined maskokat, hogy azok hogy viselkednek. Ha valaki kipróbálná közben írja már le a tapasztalatát és a véleményét! Köszi előre is! És... UP! :)

  • martonx
    veterán

    Sziasztok!

    A maskedtextbox osztállyal kapcsolatban egy érdekes dolgot tapasztaltam. Mindenkinél így működik, vagy én vagyok a láma ehhez (is)?
    Szal a problémám a következő: Az MSDN szerint a maszkolásnál a 0 maszk jelentése, hogy csak egy SZÁM KARAKTERT (0...9) fogad el a box, viszont azt KÖTELEZŐ megadni. 9-es maszk esetén kellene elfogadnia a space-t és valamilyen szám digitet.

    [link]

    Ehhez képest a 000-000 maszk simán engedi a " 1-234" vagy " - " vagy a "1 2- 3" karaktersorozatokat.
    Ez miért van? Hibás az osztály, vagy az MSDN leírás róla? Esetleg valami spec Visual Studio beállítás esetén műxik csak a dolog? Amiben próbáltam: Visual Studio 2010 (Visual Basic)

    Előre is köszönöm ha valaki segítő szándékú válaszra méltatna! :)

    fogalmam sincs sose használtam, winforms-t is már évekkel ezelőtt. Esetleg az előre definiált maszkokkal mit csinál?

  • Homer
    tag

    Sziasztok!

    A maskedtextbox osztállyal kapcsolatban egy érdekes dolgot tapasztaltam. Mindenkinél így működik, vagy én vagyok a láma ehhez (is)?
    Szal a problémám a következő: Az MSDN szerint a maszkolásnál a 0 maszk jelentése, hogy csak egy SZÁM KARAKTERT (0...9) fogad el a box, viszont azt KÖTELEZŐ megadni. 9-es maszk esetén kellene elfogadnia a space-t és valamilyen szám digitet.

    [link]

    Ehhez képest a 000-000 maszk simán engedi a " 1-234" vagy " - " vagy a "1 2- 3" karaktersorozatokat.
    Ez miért van? Hibás az osztály, vagy az MSDN leírás róla? Esetleg valami spec Visual Studio beállítás esetén műxik csak a dolog? Amiben próbáltam: Visual Studio 2010 (Visual Basic)

    Előre is köszönöm ha valaki segítő szándékú válaszra méltatna! :)

  • zoli1962
    csendes tag

    tényleg és miért VB6???

    Köszönöm ,próbálkozom.
    Hogy miért VB6 ? Ezt nem tudom .De az Excel VBeditorjában is szoktam próbálkozni.

  • martonx
    veterán

    Sziasztok !
    Mint nagyon kezdő lenne egy kérdésem. VB6-ban csinálom. Van két legördülő menüm (combobox) az egyikbe írok dolgokat legyen a könnyebb érthetőség kedvéért pékárunál,hús,tejtermék. Ha kiválasztom valamelyiket akkor a második legördülő menüben pékárunál az általam felsorolt kifli,zsemle,kenyér jelenjen meg.Valamit meg is tudtam csinálni de minden kategória váltásnál hozzáadja a második legödülő menühöz és egyre több sor lesz.
    Ha valaki tudna..köszönöm

    tényleg és miért VB6???

  • martonx
    veterán

    Sziasztok !
    Mint nagyon kezdő lenne egy kérdésem. VB6-ban csinálom. Van két legördülő menüm (combobox) az egyikbe írok dolgokat legyen a könnyebb érthetőség kedvéért pékárunál,hús,tejtermék. Ha kiválasztom valamelyiket akkor a második legördülő menüben pékárunál az általam felsorolt kifli,zsemle,kenyér jelenjen meg.Valamit meg is tudtam csinálni de minden kategória váltásnál hozzáadja a második legödülő menühöz és egyre több sor lesz.
    Ha valaki tudna..köszönöm

    Szia!

    Mielőtt írsz bele, ürítsd a legördülő menü elemeit. Ennyi.

  • zoli1962
    csendes tag

    Sziasztok !
    Mint nagyon kezdő lenne egy kérdésem. VB6-ban csinálom. Van két legördülő menüm (combobox) az egyikbe írok dolgokat legyen a könnyebb érthetőség kedvéért pékárunál,hús,tejtermék. Ha kiválasztom valamelyiket akkor a második legördülő menüben pékárunál az általam felsorolt kifli,zsemle,kenyér jelenjen meg.Valamit meg is tudtam csinálni de minden kategória váltásnál hozzáadja a második legödülő menühöz és egyre több sor lesz.
    Ha valaki tudna..köszönöm

  • Baboka
    tag

    Szia!

    A hülye Excel a létező legtriviálisabb hibákra szokott ilyen semmitmondó hibaüzenetet adni.
    Azaz ilyenekre tippelek, hogy:

    1. nem létezik az fk
    2. nem létezik az eo
    3. fk és eo létezik, de nem számok

    vagy mittudom én, de ilyen szintű kis bizbasz hibát kellene keresned.

    igen közben már beszoroztam mindegyiket eggyel és ennyi volt :) azért köszönöm szépen :))

  • martonx
    veterán

    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

    Szia!

    A hülye Excel a létező legtriviálisabb hibákra szokott ilyen semmitmondó hibaüzenetet adni.
    Azaz ilyenekre tippelek, hogy:

    1. nem létezik az fk
    2. nem létezik az eo
    3. fk és eo létezik, de nem számok

    vagy mittudom én, de ilyen szintű kis bizbasz hibát kellene keresned.

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

Hirdetés