Hirdetés

Keresés

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

  • Akkor már te se vagy mai gyerek :B
    VB-t napi szinten csinálod, vagy csak hobbi?
    Én hál' istennek már csak hobbiból (ahogy ez sajnos az itteni segítségeim színvonalán kezd is látszódni), bár lehet be fog futni egy maszek excel makrós meló, és megint visszakényszerülök excel makrózni. :(

    napi hobbi. :D
    igazából mostanság már nem foglalkozom vele túl sokat, nekem is pár éve volt ebben a csúcs. de ha valami előjön, akkor nagyon bele tudom élni magam, szeretek vele tücskörészni. :) de olyan sok időm nincs rá, nekem is lett volna egy maszek, de sehogy se fért bele az életembe, végül visszaadtam. :(

  • Mert karaktert vár, te pedig egy számot dobsz bele?
    usortrim=12
    "a"+"b"+usortrim=?
    "a"+"b"+str(usortrim)="ab12"

    na de akkor miért nem ad "type mismatch" hibát?

    (#2388) vilag:
    hmmm, nem maradtál véletlenül valahol "on error resume next"-ben?

  • jaja, mondtam én, hogy a pszeudo kódomon még lehet mit tökéletesíteni :B

    nem azért csináltam, tényleg; csak jólesett rajta kicsit elmorfondírozni, meg csinosítgatni. :B

  • Amikor hazaértem elolvastam az üzeneteket csak így kaja előtt nem volt teljesen világos.
    Aztán láttam Cpt. Flint (#2375) üzenetében nem értette a kérdésem ezért gyorsan válaszoltam neki.
    Most hogy kicsit agyaltam rajta már készen is van a program.
    Köszönöm a válaszotokat a te(martonx) első variációdat használtam fel.
    Flint megoldása is jó, de az "és"-ek és az a plusz 5 változó már bőven elfér :) .
    Így már bármilyen keresést el tudok a programmal végezni és sokkal-sokkal rövidebb lett így a programkód mint ahogy azt az elején kiagyaltam.
    Kösz még 1x :R

    Hmmm... én még abban az időben kezdtem tanultni a BASIC-et, mikor ZX Spectrumok és Commodore 64-ek voltak, külső lemezes meg kazettás "programtárolással", és baromira nem volt mindegy, hogy milyen hosszú egy kód, mennyi változó és művelet van (különösen az if-then bírt lassítani). :D (nem is beszélve a TI-57 programozható számológépről :)) )
    Mondjuk pl. én a "siker" változóknak biztos lineáris tömböt használnék, sőt, lehet, hogy a feltételnév/feltételérték/siker egymáshoz kapcsolódó teljes rendszert egy tömbben tárolnám.

    de ezek már csak olyan apróságok: elsőre nem feltétlenül kézenfekvő, de talán elegánsabb. :)

  • Nem biztos, hogy ez a legjobb módszer, de például vizsgáld le külön küllön az összes feltételre a cuccot.

    Ha feltétel1 nem létezik vagy a sor megfelel feltétel1-nek, akkor siker1 igaz
    Ha feltétel2 nem létezik vagy a sor megfelel feltétel2-nek, akkor siker2 igaz
    ...
    Ha feltétel6 nem létezik vagy a sor megfelel feltétel6-nek, akkor siker6 igaz

    Végül egy sor akkor lesz jó, ha siker1, siker2 .... siker6 mind igaz

    sőt, ha a siker(1,2 ..., n)=igaz helyett a siker(1,2 ..., n)=1 kifejezést használjuk, akkor a végén csak annyit kell vizsgálni, hogy siker(1)+siker(2)+...+siker(n)=n igaz-e. :)
    így megspóroljuk az "és"-eket, és akár ciklust is használhatunk az összegzéshez, ami a feltételek számának esetleges későbbi módosulásakor jól jöhet, mert nem kell átírni a kódot, csak egy változót kell módosítani (és még azt is könnyen le lehet programozni).

  • Helló!

    Egy "txt" fájlokat soronként átnéző programon dolgozom. Hobbiként tanulom a programozást. A problémámat már részben megoldottam, de szeretném egyszerűsíteni mert gondolom van rá sokkal egyszerűbb módszer is mint amit én kiagyaltam rá.
    Az én kereső módszerem:

    Feltétel1 Feltétel2 Feltétel3 Feltétel4 Feltétel5 Feltétel6

    Ha valaki csak 1db feltételt ír be akkor egyszerű a dolog a program kilistázza azokat a sorokat ahol az adott helyen megtalálta a keresési feltétellel megeggyezőt.
    DE ha 2, 3, 4, 5 vagy esetleg 6 db feltétellel egyszerre keres akkor az én kódom szerint így kellene leírnom:

    HA Feltétel1=”XXX” ÉS Feltétel2=”XXX” ÉS Feltétel3=”XXX” ÉS….. AKKOR
    KIÍRATÁS Feltétel1=”XXX” ÉS Feltétel2=”XXX” ÉS Feltétel3=”XXX” ÉS…

    A lényeg hogy nincs kedvem leírni mind az 6*5*4*3*2*1 azaz 720 (HA...) variációt. Nincs valami egyszerűbb kereső procesz. Vagy esetleg valami jobb logikai módszer erre. Elég lenne néhány parancs tipp is a többit kigooglézom.

    Előre is köszi :R
    Üdv, Feri.

    egyelőre nem egészen érthető számomra a feladat.
    a txt fájl valami módon szabályosan tagolt? (rekordok és mezők vannak benne voltaképpen?)
    azon belül a feltétel 1-6 bizonyos "mezők" (a sor egyes szakaszai) értékére vonatkozna?
    mi kell eredményként? a sor száma? a feltételnek megfelelő szövegrész? a teljes sor? csak az a sor érdekes, ami minden feltételnek megfelel, vagy minden sor számít, ami legalább egy feltételnek megfelel?

    sokat segítene, ha kicsit konkrétabban leírnád a feladatot.

  • Egyrészt igazad van, valóban nem volt jó az ötletem.
    Másrészt tényleg a te kedvedért nyitottam meg az excelt.

    Akkor kösz, bocs! :R
    Csak pont az nem jár erre végül, aki az egészet kérdezte. :DD

  • Figyi, tökre örülök neki, hogy hónapok óta nem kellett excel makróznom (és ha minden igaz ez még sok évig így is marad :C ), de a kedvedért indítottam egy excelt. Pontos megoldást elvből nem vagyok hajlandó adni, az elv a lényeg. Aki értelmes annak ez úgyis elég, aki nem annak meg úgyis mindegy, hogy fél percet foglalkozok-e vele, vagy éveket.

    Szóval: Worksheet_Activate esemény van, sőt van Deactivate is, vedd úgy hogy ezeket akartam az open - close helyett írni.

    Az ÉN kedvemért??? :F Szerintem összekeversz valakivel.

    Én leírtam egy megoldást. Elvből sem titkolva, mert nem mindenki akar ezzel foglalkozni, lehet, hogy siet, lehet, hogy most az egyszer van erre szüksége, lehet, hogy most kezdi; és ebből is tanul, ahogy én is tanulok mások példáiból.

    Nem akartalak felbosszantani, csak mellékesen megjegyeztem, hogy az általad adott megoldás nem felel meg a feltett kérdésnek (fealadatleírásnak).
    Erre kaptam egy egyszerű választ, ami már bosszantott kicsit, mert megint nem volt igazán értelmezhető.
    Legutóbbi beírásod után meg már teljesen egyértelmű számomra, hogy sem azt nem nézted meg, hogy ki kicsoda, sem azt, hogy pontosan mit is akar...

    Az activate/deactivate nem igazán alkalmas a worksheetek nyitott workbookon belüli jelszavazott elrejtésére egyes felhasználók elől. Én legalábbis nem tudom elképzelni.

  • Bocs, igazad van, worksheet-et akartam írni.

    mármint mi helyett? mert tudtommal sem worksheet open, sem worksheet close nincs... :D

  • na de ez a teljes workbookra vonatkozik, neki meg bizonyos sheetekre kell csak, gondolom a workbookot meg kell tudni nyitni "korlátozottan" is.

    Én ezt tenném:

    Private Sub CommandButton1_Click()

    pwd = InputBox("Adja meg a jelszót:", "Munkalapok felfedése")
    If pwd = "akarmi" Then
    For i = 2 To 3
    Worksheets(i).Visible = True
    Next
    Else
    hiba = MsgBox("A megadott jelszó hibás!", vbCritical + vbOKOnly, "Jelszó hiba")
    End If

    End Sub

    A CommandButton1 beágyazva az 1-es munkalapra a "Felfedés" felirattal.
    A WorkbookOpen-ben persze megcsinálom ugyanilyen for-next ciklussal a worksheetek visible=false beállítását. És nyilván le kell jelszavazni a VB részhez való hozzáférést. ;]

    bocs, annyi még, hogy a WorkbookOpen-ben alapok elrejtéséhez a Worksheet(i).Visible = xlVeryHidden sort kell használni ahhoz, hogy a felhasználó ne tudja popup menüből láthatóvá tenni az elrejtett munkalapokat, hanem ez csak a visible property programkódból való állításával legyen lehetséges.
    (vagy eleve erre kell beállítani az adott lapok "visible" tulajdonságát a VB projektben)

  • Szia Excel makróval szerintem le tudod kezelni. Feliratkozol a workbook_open-re, és feldobsz egy inputbox-ot. Ha jó a jelszó, akkor tovább mehet, ha nem, akkor workbook close.

    na de ez a teljes workbookra vonatkozik, neki meg bizonyos sheetekre kell csak, gondolom a workbookot meg kell tudni nyitni "korlátozottan" is.

    Én ezt tenném:

    Private Sub CommandButton1_Click()

    pwd = InputBox("Adja meg a jelszót:", "Munkalapok felfedése")
    If pwd = "akarmi" Then
    For i = 2 To 3
    Worksheets(i).Visible = True
    Next
    Else
    hiba = MsgBox("A megadott jelszó hibás!", vbCritical + vbOKOnly, "Jelszó hiba")
    End If

    End Sub

    A CommandButton1 beágyazva az 1-es munkalapra a "Felfedés" felirattal.
    A WorkbookOpen-ben persze megcsinálom ugyanilyen for-next ciklussal a worksheetek visible=false beállítását. És nyilván le kell jelszavazni a VB részhez való hozzáférést. ;]

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

    "Cpt. Flint pedig nem attól hülye, hogy itt mi a rangja, hanem a kérdése minőségétől. ... Biztos én vagyok a bunkó, de egyszerűen valami hihetetlen mélységekből jönnek elő ezek a mai fiatalok."

    Cpt. Flint nem hülye, csak ugyanolyan érzékeny, mint te. A "kérdés minőségétől" se lesz valaki hülye, legfeljebb tudatlan. Azért kérdez. Nem láttam a fórum szabályzatában, hogy csak okleveles, elsővonalbeli programozók lehetnek tagok és azok is csak – általad – értelmesnek minősített kérdéseket tehetnek fel. Nagyon szépen kérlek, ha hülyének tartasz, ne foglalkozz a hozzászólásaimmal. Bizonyára te is tudnál olyat kérdezni, amiért én körberöhögnélek (lehet, hogy már kérdeztél is máshol), és a lehülyézés bizonyára neked is rosszul esne (mert az ekkora arcoknak szokott leginkább).

    Ja, és sajnos baromira nem vagyok mai fiatal. Valszleg pont ez az egyik oka annak, hogy kérdeznem kell, én nem úgy kezdtem, hogy 10 évesen már javascriptet írtam mondjuk, vagy akármi. Kb. egy avíttas FORTRAN könyv volt az első kapcsolatom a számítástechnikával. Lehet, azóta se vittem többre véleményed szerint, de ez annyira azért nem izgat. És hát hiába, nem ez a szakmám, úgyhogy ne kívánd tőlem, hogy nekiálljak informatikusnak tanulni, mielőtt kérdezek. Elég nekem a saját szakmámat követni, dolgozni, családot eltartani. Elhiheted, hogy csak akkor fordulok a fórumokhoz, ha sehol nem találtam számomra érthető megoldást. Aztán van aki bunkózik, van aki válaszol.

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

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

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

    Option Explicit

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

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

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

    AE

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

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

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

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

    masked editre akkor semmi ötlet?

    :R

  • 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

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

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

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

    Dim vezerlo As Object
    set vezerlo = ActiveControl
    csakszam

    End Sub

    Sub csakszam()

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

    End Sub

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

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

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

  • 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. :((

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

Hirdetés