Keresés

Részletes keresés

Delila10 Creative Commons License 2013.08.23 0 0 22010

Részemről szívesen. :)

Előzmény: tbando (22009)
tbando Creative Commons License 2013.08.22 0 0 22009

Delila! pimre!

 

Kösz a gyors a választ mindkettőtöknek.  Ezt az enableevents=false utasítást nem ismertem. Meglehetősen hézagosak ugyanis az ismereteim. De hát azért látogatok ide oly sűrün. 

Előzmény: Delila10 (22004)
pimre Creative Commons License 2013.08.22 0 0 22008

És még annyit, hogy úgy látom, hogy a makróid elejéről hiányzik az Option Explicit beállítás. Ha le van tiltva az Exceledben, jó lenne visszaállítani (sajnos a 2007 alatt nem tudom, hol van ennek a beállítása). Ez nem engedi meg, hogy változókat deklaráció nélkül használj, így a If Target.Column=A Then soron már a futás előtt hibát jelezne, mert nem deklaráltad az A nevű változót. Rendkívül hasznos eszköz ez az elütések ellen.

 

Előzmény: Dr_Hengelhoffer (21999)
Delila10 Creative Commons License 2013.08.22 0 0 22007

A Munka6 lapodhoz rendelt makróban az

If Target.Column=A Then

sorban az A helyett az oszlopod sorszámát add meg. A Column érték csak egész szám lehet.

 

A fenti módon csak abban az esetben adhatod meg, ha előtte egy A nevű változóba egész számot vittél be.

Előzmény: Dr_Hengelhoffer (21999)
pimre Creative Commons License 2013.08.22 0 0 22006

:-)

Előzmény: Delila10 (22005)
Delila10 Creative Commons License 2013.08.22 0 0 22005

Lassú vagyok...

Előzmény: pimre (22002)
Delila10 Creative Commons License 2013.08.22 0 0 22004

Szia!

 

Mikor cserélsz egy karaktert, akkor hivatalból újra indul az eseményvezérelt makró – ezért kötötted eseményhez. :)

 

A leállításához a makró elején az Application.EnableEvents = False utasítás megállítja a további "beindulást", amit a végén vissza kell állítanod True értékre ahhoz, hogy a legközelebbi beírásnál is fusson.

Előzmény: tbando (22001)
pimre Creative Commons License 2013.08.22 0 0 22003

Bocsánat, pontosan: Application.EnableEvents=False akadályozza meg, hogy az esemény futása alatti módosítás ismét behívja saját magát.

Előzmény: pimre (22002)
pimre Creative Commons License 2013.08.22 0 0 22002

Ami az újraindulást illeti, próbálkoztál az EnableEvents=false beállítással a szubrutinba belépéskor (persze kilpéskor meg visszaállítva true értékre)?

Előzmény: tbando (22001)
tbando Creative Commons License 2013.08.22 0 0 22001

Hi Delila!

 

Nagyon tecc a makród. Elsősorban azért, mert sokkal egyszerűbben oldottad meg, mint én egy lényegileg hasonlót a 21973-ban.  Gondoltam, követve a mintádat leegyszerűsítem a sajátomat.  De jó sok időmbe került, míg üzemképessé tudtam tenni.   Emiatt írom most ezt a hsz-t.  Mert az egy dolog, hogy  müködik, de nem értem.  Nem értem, hogy  a

 

1. makróm a lefutása után, miért indul el újra, látszólag ok nélkül?  Hogyan kell az újraindulást megakadályozni?

 

2. az újra futást megakadályozó  Instr feltétel nélkül  a makró miért kerül egy pont 192 körös hurokba?  Mert az még hagyján hogy hurokba kerül, de azt mi állítja le, és miért nem előbb vagy később?  Az Instr feltétel nélkül ugyanis ez kerül a cellába: 11..............................................................................................................................................................................................2.2.33

 

3. És végül,  a cella átírása után a target miért nem lép át a következő cellára? 

 

Megköszönném, ha valaki meg tudná ezeket magyarázni.

 

És itt a makróm:

Csak emlékeztetőül : a feladat, hogy a beírt 123456 beírásból 12.34.56-t csináljon.

 

Private Sub Worksheet_Change(ByVal Target As Range)

Dim a$

If Target.Column <> 1 Then Exit Sub

If InStr(Target, ".") > 0 Then Exit Sub

a = Target.Value

a = Application.WorksheetFunction.Replace(a, 3, 0, ".")

a = Application.WorksheetFunction.Replace(a, 6, 0, ".")

Range(Target.Address) = a

End Sub

 

Előzmény: Delila10 (21982)
Delila10 Creative Commons License 2013.08.22 0 0 22000

Az első makrót, ami a beírásra jön működésbe, a lapodhoz kell rendelned, ahogy a csatolt képeden látszik, a másodikat, ami a már beírt számok formátumát alakítja át, modulba tedd, ehhez rendelhetsz gombot, vagy ikont.

 

Nézd meg, hogy a bővítménykezelőben be van-e kapcsolva a két Analyzis kezdetű bővítmény. Az első hatására kapsz egy csomó új függvényt, a második a makrók futtatásához szükséges, anélkül nem ért meg minden parancsot.

Előzmény: Dr_Hengelhoffer (21999)
Dr_Hengelhoffer Creative Commons License 2013.08.22 0 0 21999
Előzmény: Dr_Hengelhoffer (21998)
Dr_Hengelhoffer Creative Commons License 2013.08.22 0 0 21998

Nos lépésről lépésre végrehajtottam. Sajnos nem működik. 'A' oszlop, beírom pl. -> 3619999999, semmi változás. A cellák számformátuma általános, makróbarátként elmentve.

Előzmény: Dr_Hengelhoffer (21997)
Dr_Hengelhoffer Creative Commons License 2013.08.22 0 0 21997

Ahhha... azonnal kipróbálom. Természetesen nem így csináltam.

Előzmény: pimre (21996)
pimre Creative Commons License 2013.08.22 0 0 21996

Bocs egy félmondat kimaradt: ...ha annak a munkafüzetnek a kódrészére helyezi, amelyiken használni akarja...

Előzmény: pimre (21995)
pimre Creative Commons License 2013.08.22 0 0 21995

Csakhogy az ilyennek nem gombnyomásra kell indulnia, mert nem makróhívással indul. Hanem ha annak a munkafüzetnek a kódrészére helyezi (pl. Munka1 esetén a VBA képernyőn a Munka1-re kattintva az egér jobb gombjával, majd View Code után oda másolja - persze változatlan névvel és byval paraméterrel), nem pedig egy önálló modulba, akkor a program a Munka1 A oszlopában bármely cella kitöltése után automatikusan lefut.

Előzmény: Törölt nick (21994)
Törölt nick Creative Commons License 2013.08.22 0 0 21994

Szerintem csak arra gondol hogy kirakott egy gombot amit megnyomva lefut a makro :)

Előzmény: SQLkerdes (21993)
SQLkerdes Creative Commons License 2013.08.22 0 0 21993

Tuti, hogy a kódlapra másoltad, nem "sima" makrónak?  Én még nem hallottam olyan, hogy event handler-hez gombot társítottak volna.  De persze számos dologról nem hallottam még, amelyek ettől függetlenül mégis léteznek :-)

Előzmény: Dr_Hengelhoffer (21992)
Dr_Hengelhoffer Creative Commons License 2013.08.22 0 0 21992

Köszönöm mindenkinek a segíséget. Sajnos nálam nem működik a VB kód. Nem tudom mit ronthattam el. Mindent úgy csináltam, ahogyan leírtad, még gombot is rendeltem hozzá. Az első sornál leáll hibára: 

 

If Target.Column = 1 Then

 

A hibaüzi:

Run-time error '424':

Object required

 

Jó lenne valami tuti megoldás, mert sajnos napi rendszerességgel kell híváslistákat feldolgoznom, és az exportálás .csv -be történik.

Előzmény: Delila10 (21982)
Sánta Kutya (SK) Creative Commons License 2013.08.21 0 0 21991

Miveel az eredeti kódnak a 36 nem része, ezt írtam lejjebb. Ha csupa magyar szám van, akkor talán nem is kéne. Ha viszont következetesen mindegyiket 36-tal adjuk meg, akkor értelemszerűen módosulnak az intervallumok is. Én kihagynám mint redundanciát.

Ha például egy tömeges SMS-küldő szolgáltatást akarok használni, az általában 301234567 alakban várja a mobilszámokat.

Más célokra meg hozzá lehet tenni utólag, ha szükséges.

 

Nem állítom, hogy az a kód változtatás nélkül tökéletes, hiszen az Excel külön kezeli a telefonszám és a mobilszám formátumot, értelemszerűen igazgatni kell.

Előzmény: Delila10 (21990)
Delila10 Creative Commons License 2013.08.21 0 0 21990

Bemásoltam a formátumodat (hogy el ne rontsam). A példa szerinti 3 számot a következő formában hozta:

 

36 (20) 333-33-33

03 (68)933-33-33

03 (61)333-33-33

 

Ez sajnos nem jó. :(

Előzmény: Sánta Kutya (SK) (21989)
Sánta Kutya (SK) Creative Commons License 2013.08.21 0 0 21989

9999999 < x < 20000000

Ez a budapesti.

Innentől 99999999-ig vidéki vonalas.

Előzmény: Sánta Kutya (SK) (21987)
Delila10 Creative Commons License 2013.08.21 0 0 21988

Budapest körzetszáma 1.

Előzmény: Sánta Kutya (SK) (21985)
Sánta Kutya (SK) Creative Commons License 2013.08.21 0 0 21987

Persze, pont erről beszélek, csak nem fogalmaztam pontosan. A nyolcjegyű számok ennek alapján feloszthatók budapestire és vidékire.

Előzmény: _Nyuszi (21986)
_Nyuszi Creative Commons License 2013.08.21 0 0 21986

Csak ha egyjegyű. :)

(Bocsi!)

Előzmény: Sánta Kutya (SK) (21985)
Sánta Kutya (SK) Creative Commons License 2013.08.21 0 0 21985

Egyessel szerintem nem kezdődhet körzetszám.

Előzmény: Delila10 (21984)
Delila10 Creative Commons License 2013.08.21 0 0 21984

A második és harmadik szám azonos hosszúságú, ezért a sima cellaformázással nem oldható meg szerintem.

Előzmény: Sánta Kutya (SK) (21983)
Sánta Kutya (SK) Creative Commons License 2013.08.21 0 0 21983

Szép megldás, de szerintem jó példája annak, hogy mikor nem érdemes makrót írni. Bocs. :-)

Előzmény: Delila10 (21982)
Delila10 Creative Commons License 2013.08.21 0 0 21982

Rendeld a makrót ahhoz a laphoz, ahol az A oszlopba írod a telefonszámokat. Tudod, ha nem az A oszlop a számok helye, a piros 1 helyett írd a saját oszlopod számát.

 

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        If Len(Target) = 11 Then Range(Target.Address).NumberFormat = """+""00 00 000-0000"
        If Len(Target) = 10 And Mid(Target, 3, 1) = "1" Then
            Range(Target.Address).NumberFormat = """+""00 0 000-0000"
        End If
        If Len(Target) = 10 And Mid(Target, 3, 1) <> "1" Then
            Range(Target.Address).NumberFormat = """+""00 00 000-000"
        End If
    End If
End Sub

 

Ezután elég "+" és "-" jel, valamint szóköz nélkül beírnod a teljes számot (pl. 36203333333), és a megfelelő formátumra írja át.

 

 

Ha már van egy halom, 3613333333 formában beírt számod, érdemes lefuttatni a lenti makrót. Ebben az "A" helyett írd a saját oszlopod betűjelét. 2-vel kezdtem a ciklust, címsort feltételezve.

 

Sub telefon()
    Dim sor As Long, usor As Long
    usor = Range("A" & Rows.Count).End(xlUp).Row
    For sor = 2 To usor
        If Len(Range("A" & sor)) = 11 Then Range("A1").NumberFormat = """+""00 00 000-0000"
        If Len(Range("A" & sor)) = 10 And Mid(Range("A" & sor), 3, 1) = "1" Then
            Range("A" & sor).NumberFormat = """+""00 0 000-0000"
        End If
        If Len(Range("A" & sor)) = 10 And Mid(Range("A" & sor), 3, 1) <> "1" Then
            Range("A" & sor).NumberFormat = """+""00 00 000-000"
        End If
    Next
End Sub

 

 

Előzmény: Dr_Hengelhoffer (21977)
Sánta Kutya (SK) Creative Commons License 2013.08.21 0 0 21981

De, de, simán megoldható, csak nekem most nincs időm a részletekkel pepecselni.

Ha beállítod a különleges/mobil formátumot, majd újra megnyitva a cellaformázást ugyanott az egyénit választod, megjelenik ez a formázókód:

 

[<=999999999](##) ###-##-##;[<=6999999999]0#\ (##)###-##-##;#\ (##) ###-##-##

 

Ez így adja magát a HA függvény mintájára, növekvő tartományokkal: az első a legfeljebb 8 jegyű szám formázása, a pontosvessző után a következő intervallum, a másik pontosvessző után, ami annál is nagyobb, így lehet játszani.

A begépelésnél egyben kell beírni számként, pl. 201234567 vagy 36201234567.

# a számjegy, értelemszerűen.

A 36 vagy +36 a számok elé is írható konstansként, idézőjelben.

Előzmény: Törölt nick (21980)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!