Az „Excel” fórum célja, hogy keretet adjon az Excel felhasználók széles táborának tapasztalataik megosztására, és lehetőséget a segítséget kérőknek. Az alábbi összefoglaló azért készült, hogy segítse a helyes kérdésfeltevést.
– Írd le szabatosan a problémát. Úgy fogalmazz, hogy ne csak te magad, de a szakértő is megértse, mire szeretnél választ kapni.
– Írd le, hogy milyen verziójú Excellel dolgozol. (Vagy ha nem – ill. nem csak – Excel, akkor micsoda?)
– Írd le, hogy milyen úton indultál el, és hol akadtál el rajta.
– A kérdés megértése szempontjából sokat segíthet, ha feltölteszt egy képet, amin látszik, hogy mit szeretnél, vagy illusztrálja azt.
– Még jobb, ha feltöltesz egy minta munkafüzetet valahová (pl. data.hu). Feltöltés előtt távolítsd el belőle a nem publikus adatokat.
– Ha a feladat jellege olyan, célszerű az "előtte" és "utána" állapotokat bemutatni. (Miből kellene csinálni mit?)
– Ha VBA kódon kell javítani, másold be a releváns kódrészt. Rövid kód mehet hozzászólásba, hosszú kód inkább ide: http://pastebin.com/
– Ha valami nem úgy működik, ahogy kellene, add meg a rendellenes viselkedés jellemzőit, a hibaüzenetet, és a hibát okozó programsort.
@Garashan: Esetleg ebben a sorban lehet a hiba ?: tortresz = CLng(Split(szam, tizedesjel)(1)) / Application.WorksheetFunction.Power(10, Len(Split(szam, tizedesjel)(1)) - 2)
"Lehetséges hasábokat úgy beállítani, hogy a képen látható módon/sorrendben lehessen bevinni a tartalmat?"
Nem. Én nem ismerek ilyen lehetőséget. Utólag meg lehet faragni. (Létezik a hasábtörés, aztán úgy rakod be a szöveget, ahogy akarod.) A szövegdoboz nem tudja, nem tördel automatikusan, több oldalas doku esetén csak a problémák számát növeli.
Kiadványszerkesztő programokat nézzél.
(Biztos, hogy ez kell neked? Összehajtós valamit akarsz? Akkor még ott a gond, hogy a 2-es hasáb a lap hátoldalára kell kerüljön.)
"ha új sort szúrtam be a meglévőek közé, akkor az address hiába $16:$16 volt, a target.column=1 értéket vett fel.
Ebben az esetben viszont a target.value <> "" hibát adott, mert nem tudta értelmezni azt. Ezért ellenőriztem, hogy az address tartalmaz-e $A$ részt és ne tartalmazzon se vesszőt (több cella/tartomány nem összefüggő kijelölése), se kettőspontot (tartomány kijelölése)."
Szerintem ellenőrizni lehet, hogy a Target celláinak száma (vagyis a kijelölés) mennyi, ha nem egy, akkor nem kell semmit tenni, max üzenetet. Egyébként beszúráskor a cella értéke nagyon nagy eséllyel üres lesz.
Azért oldottam meg ilyen kacifántosan, mert ha új sort szúrtam be a meglévőek közé, akkor az address hiába $16:$16 volt, a target.column=1 értéket vett fel.
Ebben az esetben viszont a target.value <> "" hibát adott, mert nem tudta értelmezni azt. Ezért ellenőriztem, hogy az address tartalmaz-e $A$ részt és ne tartalmazzon se vesszőt (több cella/tartomány nem összefüggő kijelölése), se kettőspontot (tartomány kijelölése).
A saját gépemen amúgy szépen működött a kód, létrehozta mindig a "Minta" fül alapján az új füleket. Amire gondolni tudok, hogy én egyszerű, rövid termék neveket használtam (A, B, C, D). Lehet ha túl hosszú egy terméknév, akkor az problémát okoz.
Ezt ki lehetne próbálni, hogy az első ha függvény után beírjuk, hogy msgbox "teszt" . Így kiderülne, hogy egyáltalán nála jól ellenőrzi-e a tartományt, ahol le kell futnia a kódnak.
Sziasztok! Egy Word-ös kérdést szeretnék föltenni, mivel nem látok neki külön topikot.
Lehetséges hasábokat úgy beállítani, hogy a képen látható módon/sorrendben lehessen bevinni a tartalmat? Vagyis először a baloldali oszlopok legyenek tele, és a jobb oldaliak csak ezután, vagy külön.
Tudnál még segíteni, lehet, hogy csak egy kerekítést kell kivenni valahonnan, de nem merek belenyúlni :)
Szóval az a probléma, hogy pl 999,99-et írok be akkor azt írja ki a szöveg, hogy: egyezer egész kilencvenkilenc század, ami nyilvánvalóan nem jó.
(a tizedes vessző után jó a kiírás, de a példában a 999-et úgy tűnik, hogy felkerekíti, És minden esetben kerekíti az egész számot, ha két tizedesjegyig meg van adva szám.)
Az lenne a cél, hogy pontosan azt a számot írja ki, amit számmal is beírtam, nem szükséges a kerekítés sehol (kifizetések miatt kell pontosnak lennie).
A minta munkalap neve "Minta", ha nálad más lesz, akkor módosítani kell majd a makróban. Valamint a termékek lap neve "Termékek". Ha nálad más, akkor szintén módosítani kell majd a makróban.
A makróban figyelembe van véve, hogy az első sor fejlécet tartalmaz, így annak a változását nem figyeli. Valamint csak és kizárólag az "A" oszlop változását figyeli. Ha nem egy cellát jelölsz ki, hanem többet (mert mondjuk törölsz termékeket), akkor a makró szintén nem fut le.
A kék objektumhoz az "ugras" nevű makrót kell hozzárendelni. Ezt ha szeretnéd nyugodtan át is nevezheted.
És végül a makrók, amiket a termékek munkalap makrói közé kell illeszteni:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
If InStr(1, Target.Address, "$A$") > 0 And Target.Row > 1 And InStr(1, Target.Address, ":") = 0 And InStr(1, Target.Address, ",") = 0 Then
If Target.Value <> "" Then
If Not SheetExists(Target.Value) Then
Set ws = Sheets("Minta")
ws.Select
ws.Copy after:=Sheets(2)
ActiveSheet.Name = Target.Value
Sheets("Termékek").Select
End If
End If
End If
End Sub
Function SheetExists(strWSName As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(strWSName)
If Not ws Is Nothing Then SheetExists = True
End Function
Public Sub ugras()
If InStr(1, ActiveCell.Address, "$A$") > 0 And ActiveCell.Row > 1 Then
Az Excelben létre lehet hozni hivatkozásokat. Ezt a 2021-es verzióban csatolásnak hívják.
Ha az adott cellába jobb egér gombbal kattintasz, akkor a felugró menüben ki tudod választani a csatolást. A felugró ablakban bal oldalt a "Hivatkozás erre" résznél válaszd ki a "Dokumentum adott pontja" pontot. Majd kiválasztod a megfelelő fület és a cellahivatkozást.
De ha ez nem felel meg neked, akkor természetesen meg lehet oldani makróval is.
Első kérdés:
Ha hozzáadsz egy új terméket, akkor valamilyen sablon szerinti lapfül jöjjön létre vagy egy teljesen üres?
Arra van ötletetek, hogy az alábbit hogyan lehet megoldani? Az "A" oszlopban terméknevek vannak. Minden terméknév aztán, külön-külön is szerepel, mert ott vannak neki még tulajdonságai, infói, stb.
Első kérdés: Ha az "A" oszlop elemeit bővítjük, akkor automatikusan hozzon létre egy új fület az új hozzáadott termék nevével.
Második kérdés: Ha az "A" oszlopban leszűrűnk egy termékre, akkor a kijelölt = leszűrt termék névhez megfelelő fülre ugordjon az excel (ezt gondolom egy makró gombbal például)
Köszönöm, ezt a trükköt nem ismertem a fórum motorral kapcsolatban, ezentúl figyelni fogok erre is. Azt már megszoktam, hogy a vissza per jelet eltünteti...
A kóddal valamilyen szinten én is küzdöttem, mint disznó a jégen. Most egy másik laptop volt nálam, mint amivel eredetileg írtam a makrót, így a fórumból kellett kimásolnom azt. Át kellett néznem, hogy biztosan jó helyen nyúlok-e bele. Magamnak mindig beformázom szépen tabulátorokkal, hogy könnyen átlátható legyen. Ha hozzá kell nyúlnom egy-egy régebbi makrómhoz, akkor úgy nekem is egyszerűbb ismét felvenni a fonalat. Illetve ezt még a TurboPascal korszakomban megtanultam, hogy a szép kódot könnyebb utólag módosítani, mint a átláthatatlanná tettet. Tudom azt is, hogy sokan nem szeretik a GOTO utasítást használni, mert ha nem kellő odafigyeléssel alkalmazzuk, akkor kaotikussá válhat a kódunk. Én viszont valahogy mindig is szerettem. Bár törekszek arra, hogy ne sűrűn használjam, de néha azzal egyszerűbb megoldani egy-egy problémát számomra.
Megvizsgálja, hogy a megadott számban van-e a Windows szerinti alapértelmezett tizedesjel.
Ha van, akkor szétbontja a számot egész részre és törtrészre. A törtrészt lerövidíti 1 vagy 2 számjegyre a kerekítés szabályait betartva.
Ha a törtrész 1 számjegyű, akkor "egészrész egész törtrész tized" a kimenő formátum, ha 2 számjegyű, akkor "egészrész egész törtrész század".
Option Explicit
Function SzamBetuvel(szam As String) Dim tizedesjel As String tizedesjel = Application.DecimalSeparator Dim tortresz As Long If InStr(1, szam, tizedesjel) > 0 Then tortresz = CLng(Split(szam, tizedesjel)(1)) / Application.WorksheetFunction.Power(10, Len(Split(szam, tizedesjel)(1)) - 2) If tortresz Mod 10 = 0 Then tortresz = tortresz / 10 End If Else tortresz = 0 End If szam = CLngLng(szam) If (szam > 999999999999#) Or (szam < -999999999999#) Then SzamBetuvel = "hiba" Exit Function End If If szam = 0 Then SzamBetuvel = "nulla" Exit Function End If If szam < 0 Then SzamBetuvel = "mínusz " Else SzamBetuvel = "" End If Dim szamformazva, szam1, szam10, szam100 As String szamformazva = WorksheetFunction.Text(Abs(szam), "000000000000") szam1 = Mid(szamformazva, 3, 1) szam10 = Mid(szamformazva, 2, 1) szam100 = Mid(szamformazva, 1, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) SzamBetuvel = SzamBetuvel & szam100 & szam10 & szam1 & "milliárd" If Mid(szamformazva, 4, 1) > 0 Or Mid(szamformazva, 5, 1) > 0 Or Mid(szamformazva, 6, 1) > 0 Or _ Mid(szamformazva, 7, 1) > 0 Or Mid(szamformazva, 8, 1) > 0 Or Mid(szamformazva, 9, 1) > 0 Or _ Mid(szamformazva, 10, 1) > 0 Or Mid(szamformazva, 11, 1) > 0 Or Mid(szamformazva, 12, 1) > 0 Then SzamBetuvel = SzamBetuvel & " - " End If End If szam1 = Mid(szamformazva, 6, 1) szam10 = Mid(szamformazva, 5, 1) szam100 = Mid(szamformazva, 4, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) SzamBetuvel = SzamBetuvel & szam100 & szam10 & szam1 & "millió" If Mid(szamformazva, 7, 1) > 0 Or Mid(szamformazva, 8, 1) > 0 Or Mid(szamformazva, 9, 1) > 0 Or _ Mid(szamformazva, 10, 1) > 0 Or Mid(szamformazva, 11, 1) > 0 Or Mid(szamformazva, 12, 1) > 0 Then SzamBetuvel = SzamBetuvel & " - " End If End If szam1 = Mid(szamformazva, 9, 1) szam10 = Mid(szamformazva, 8, 1) szam100 = Mid(szamformazva, 7, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) SzamBetuvel = SzamBetuvel & szam100 & szam10 & szam1 & "ezer" If Abs(szam) > 2000 And (Mid(szamformazva, 10, 1) > 0 Or Mid(szamformazva, 11, 1) > 0 Or Mid(szamformazva, 12, 1) > 0) Then SzamBetuvel = SzamBetuvel & " - " End If End If szam1 = Mid(szamformazva, 12, 1) szam10 = Mid(szamformazva, 11, 1) szam100 = Mid(szamformazva, 10, 1) If szam1 > 0 Or szam10 > 0 Or szam100 > 0 Then szam100 = szam_szaz(CStr(szam100)) szam10 = szam_tiz(CStr(szam10), CStr(szam1)) szam1 = szam_egy(CStr(szam1)) SzamBetuvel = SzamBetuvel & szam100 & szam10 & szam1 End If If tortresz > 0 Then If tortresz >= 10 Then szam1 = szam_egy(Mid(CStr(tortresz), 2, 1)) szam10 = szam_tiz(Left(CStr(tortresz), 1), Mid(CStr(tortresz), 2, 1)) SzamBetuvel = SzamBetuvel & " egész " & szam10 & szam1 & " század" Else szam1 = szam_egy(Left(CStr(tortresz), 1)) SzamBetuvel = SzamBetuvel & " egész " & szam1 & " tized" End If End If
End Function
Private Function szam_egy(szam As String) Select Case szam Case "0" szam_egy = "" Case "1" szam_egy = "egy" Case "2" szam_egy = "kettő" Case "3" szam_egy = "három" Case "4" szam_egy = "négy" Case "5" szam_egy = "öt" Case "6" szam_egy = "hat" Case "7" szam_egy = "hét" Case "8" szam_egy = "nyolc" Case "9" szam_egy = "kilenc" End Select End Function
Private Function szam_tiz(szam As String, szam2 As String) If szam2 > 0 Then Select Case szam Case "0" szam_tiz = "" Case "1" szam_tiz = "tizen" Case "2" szam_tiz = "huszon" Case "3" szam_tiz = "harminc" Case "4" szam_tiz = "negyven" Case "5" szam_tiz = "ötven" Case "6" szam_tiz = "hatvan" Case "7" szam_tiz = "hetven" Case "8" szam_tiz = "nyolcvan" Case "9" szam_tiz = "kilencven" End Select Else Select Case szam Case "0" szam_tiz = "" Case "1" szam_tiz = "tíz" Case "2" szam_tiz = "húsz" Case "3" szam_tiz = "harminc" Case "4" szam_tiz = "negyven" Case "5" szam_tiz = "ötven" Case "6" szam_tiz = "hatvan" Case "7" szam_tiz = "hetven" Case "8" szam_tiz = "nyolcvan" Case "9" szam_tiz = "kilencven" End Select End If End Function
Private Function szam_szaz(szam As String) Select Case szam Case "0" szam_szaz = "" Case "1" szam_szaz = "száz" Case "2" szam_szaz = "kétszáz" Case "3" szam_szaz = "háromszáz" Case "4" szam_szaz = "négyszáz" Case "5" szam_szaz = "ötszáz" Case "6" szam_szaz = "hatszáz" Case "7" szam_szaz = "hétszáz" Case "8" szam_szaz = "nyolcszáz" Case "9" szam_szaz = "kilencszáz" End Select End Function
Lehet, hogy igazad van. Anno utána néztem és úgy rémlik, hogy akkor azt olvastam, hogy ha egyértelmű a számok csoportosítása. Azaz van bennük kötőjel, akkor a kezdő és csakis a kezdő nullák elhagyhatóak. Gondolom azokat hozzá írja automatikusan a rendszer. Ez valamikor 2018-2019 környékén lehetett.
Most K&H android appjában kötőjelet nem is enged bevinni, azt ő írja hozzá automatikusan. Volt pár hónap, amikor az utalási megjegyzésbe pedig nem engedett per jelet írni... Ez elég ciki volt a részükről, mert rengeteg (adóügyi) számla sorszáma tartalmaz perjelet. Így többek között én sem tudtam helyesen elutalni a számláimat, amiket a fogadó fél gépi úton dolgozott fel. Külön le kellett velük levelezni, hogy a kötőjelet perjelként dolgozzák fel. Ugyanis a szerződésben úgy van, hogy ha az utalás nem dolgozható fel automatikusan géppel, akkor következő hónapban a humán erőforrás miatt extra díjat is felszámolhatnak...
De, tökéletes... jó is lenne, ha nem azt szeretném, hogy azonos cellában "formálódjon" a kívánt alakra a bevitt szám.
Mint ahogy a telefonszámnál is, csak beállítod a formázást a cellába és ha UGYANABBA a cellába beírod a telószámot akkor értékadás után szépen beformázza. Na itt is ez kell, csak nincs olyan előre beállított forma, hogy bankszámlaszám.
A hossz lemérését én is megcsináltam már korábban (én így oldottam meg, hogy a kötőjelek nélkül számolja meg a számokat: =HOSSZ(HELYETTE(E60;"-";"")) )