Keresés

Hirdetés

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

  • Kobe

    veterán

    cs
    van egy gondom
    vagy egy oszlopnyi adatom, amit "be kéne sorolni"....megvan mindegyikhez adva egy számérték
    rendre 789
    456
    123
    741
    852
    499
    951
    ezek mellé kllene társítani egy megjegyzést, aminek a feltétele
    Rossz, ha az érték 100 vagy az alatti
    elégséges ha 300 és 100 közé esik
    közepes ha 300 és 400 közé esik
    jó ha 400 és 500
    és kiváló ha 600 as vagy afeletti értéke van
    fontos volna, köszi

  • Kobe

    veterán

    válasz lúzer #3113 üzenetére

    kösz, már emgodlottam egy feltételes elágazásokkal tüzdelt függvénnyel :) nagyjából hasonlót kellet tmint mit írtál cska beszúrtam egy ÉS feltételt. Igazából szar volt mert cska egy táblázat volt megadva hogy
    100 rossz
    300 elégséges
    400 közepes stb, ezt ugy értelmeztem hogy intervallumokra vonatkozik pl 300 alatt rossz, 300-400 közt elégséges stb
    most már működik így

  • Kobe

    veterán

    no még egy:)

    író mű címe kiadó fordító meg.idő megj.hely oldalszám
    Rejtő Jenő Az elveszett cirkáló Magvető 1979 Budapest 186
    Madách Imre Az ember tragédiája Franklin 1861 Budapest 228
    Szepes Mária A Vörös Oroszlán Móra 1946 Budapest 580
    A.A. Milne Micimackó Móra Karithy Frigyes 1991 Dabas 266
    Arthur C.Clarke 2001 Űrodisszeia Szukits Göncz Árpád 1994 Szeged 185
    Stanislaw Lem Solaris Kriterion Murányi Beatrix 1977 Bukarest 216
    Clifford D. Simak A város Móra Kuczka Péter 1991 Debrecen 220
    Mario Puzo A keresztapa Magvető Vándodr Vera 1987 Debrecen 480

    van egy táblázat, fentebb látható. Bocs h kicsit széthúzta
    a lényeg látható azért remélem
    ezek közül kéne lekérdezéseket csináln:

    külön lapra a táblázatban gyüjtse ki a magvető kiadó könyveit a12től kezdődően

    a 90 es években kiadott könyveket kellene kigyüjteni, ill azok átlagos oldalszámát kiszámolni (ez a második része nem gáz) csak ezt is külön lapra

    nem magyar műveket kigyüjteni (ahol nicns fordító)

    sávdiagram amagyar kötetek oldalszámairól

    kösz a helpet :)

  • Kobe

    veterán

    sziasztok

    szeretnék készíteni egy pivot táblát, azonban csak excel 2007 áll rendelkezésemre, amiben a 2003 hoz képest teljesen megbolygatták az általam jobban ismert funkciókat, de nem is biztos hogy az a legalkalmasabb funkció arra amit szeretnék, mert elég dinamikus.

    Egy olyan táblát szeretnék létrehozni, ami ezeket tartalmazza

    -egy bizonyos napon érvényes összeg, pl jan 1. Nevezzük nyitónak
    -egy bizonyos napon - pl dec 31 - ennek az összegnek a kamattal növelt mennyisége. Nevezzük zárónak.

    2 fajta csökkentő tétel is van
    -egy befizetés, ami magát a kamat (nyitó és záró között fix kamatlábbal számolt rész) összegét csökkenti.
    -egy plusz befizetés, ami magát az eredeti nyitó összeget csökkenti

    illetve ezeknek a befizetéseknek a dátuma

    Azt szeretném elérni, hogy egy táblába elég legyen csak alkalomadtán bevinnem a befizetést és annak dátumát (persze a megfelelő oszlopba, mert nem egy időben történnek, s nem mindig azonos összegekről van szó) és az excel automatikusan frissítse a nyitó összeget, a zárót, illetve a kamatot magát, attól függően milyen típusú befizetés történik. Vagyis azt is szeretném látni hogy a záró dátumon mekkora a periódus között eltelt kamat összege, hogyan változik a befieztések kapcsán, illetve ugyanezt a nyitó tőkével is, reprezentálva az egyes befizetések dátumát és összegét is.
    Mivel kamatos kamatról lévén szó, egy következő periódusban ez a záró tőkésítésre kerül, és ugyanazoknak a műveleteknek kellene alapjául szolgálni, mint amit a msotani nyitó összeggel szeretnék csinálni

    tudnátok ebben segiteni ?

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Kobe #7125 üzenetére

    azt elfelejtettem emliteni, hogy a dolog pikantériája, hogy a kamat kulcs egy éves periódusban fix, a táblázatot mindig egy jan 1 - dec 31 közötti időszakra szeretném elkészíteni, és attól a dátumtól kezdve, hogy történt egy befizetés, változik a kamatozó összeg mértéke

  • Kobe

    veterán

    Sziasztok

    adott egy allando kinezetu, formatumu riport, egy eleg bonyolult Pivottal.
    Ezt a riportot havonta kell frissiteni. A gyorsabb munka erdekeben arra gondoltam egyszeruen kicserelem az elozo havi listat, adattablat az uj adattablaval. Ezek formatumra, oszlopok sorrendjere, darabjara, nevere stb tokeletesen megegyeznek.

    A problemam az, hogy ha szimplan kicserelem es ranyomok a pivoton a refresh datara, akkor ugyan az uj adatokkal, de a regi mennyisegben frissiti a tablat. Pl juliusban 2500 item volt a tablazatban, augusztusban 3400, akkor ha berakom a regi tabla helyere az augustusi 3400at, a 3400bol csak az elso 2500at veszi figyelembe

    Lehet ezt utolagosan modositani valahogy, hogy mind a 3400at figyelembe vegye a Pivot frissitesenel?
    Azert lenne ra szukseg mert tenyleg egy komplex pivot, amit havonta ujra felepetine es megformazni nem kis feladat

  • Kobe

    veterán

    még 1 kérdés.

    Van egy pivot tábla (kb 2-3000 soros) és ehhez a pivothoz jobb oldalra van hozzácsapva 2 oszlop - mindkettő kommentelésre szolgál, de nem a pivot része, csak a pivotnak megfelelő sorba mellév an írva egy megjegyzés

    Szeretnék csinálni egy kivonatot summary sheetet a pivot táblázatból, ami ugyanolyan struktúrában mutatja ugyanazokat az adatokat, de csak azokat amiknél van valami a komment fieldben

    Erre azért volna szükségem mert 3 tartalmilag és felépítésében azonos pivotból kellene összrakni 1 db kivonatot, és mauálisan kitörölgetni a nem kommentált mezőket (cca 10ezer sorból kb) elég húzós

  • Kobe

    veterán

    válasz Delila_1 #8122 üzenetére

    köszi, kipróbálom majd
    ezekszerint ha fogom a 3 pivot táblát és egymás alá illesztem mondjuk egy új sheetben, akkor végig fut az egészen?

    "A makró feltételezi, hogy a kérdéses oszlop minden cellájában van valamilyen adat, ott is, ahol nincs megjegyzés."

    ezt nem egészen értem, mármint értem, hogy mit jelent, de magyarra lefordítva akkor bármilyen olyan sort kitöröl a táblázatból, ahol adott oszlop adott sorában semmilyen adat nincs ? ezt akrja jelenteni ?
    illetve befolyásolja a makró működését, hogy a commentek nem kézzel beírt kommentek, hanem előre kiválasztható listából legördülő menüvel lehet választani közülük?

    [ Szerkesztve ]

  • Kobe

    veterán

    egy olyan szummázási képlet kellene nekem amivel egy adott oszlopban levő számokat abszolút érték szerint tudom összeadni

    pl az oszlop elemei
    150
    -150
    200
    -230

    akkor ne -30 at adjon eredménynek, hanem 730at

  • Kobe

    veterán

    Hello

    Makro segitseg kellene. Szeretnek egyadatfilet letrehozni amiben egy urlap rogziti a bevitt adatokat. A gond az hogy kb 7-8 kulonbozo adatot kellene felvinni egy recordhoz, 6 ot az elso felvitelkor amikor rogzited 2-3 masikat csak kesobb lehetne hozzaadni

    3 urlapot szeretnek letrehozni, azelson van pl 3 gomb bezaras, uj rekord felvitele, meglevo rekord frissitese. Az egyik felhozza a sima kitoltos urlapot, a masik meg egy kereso urlapot. Az jelent gondot hogyan tudnek egy olyan urlapot letrehozni amiben a korabban bevitt rekordok kozott tudok keresni egyszeruen es hozzaadni, esetleg updatelni a hianyzo, meglevo adatokat.

  • Kobe

    veterán

    válasz Delila_1 #15370 üzenetére

    szerintem komplett access adatbázis lesz belőle, az adatokat rekord formájában sokkal egyszerűb tárolni, rájöttem, mint excelben egy listában

  • Kobe

    veterán

    sziasztok

    volna egy excel makrós kérdésem. Van egy listám, ami mindig ugyanabból az oszlopokból áll, ám a sorok száma mindig változik. Egy olyan makrót akarok összehegeszteni, ami a lefuttatáskor beszúr 2 oszlopot a meglévők mellé, az oszlopokban pedig egy függvény által visszaadott értéket ír be, majd az egész táblából (az eredeti + 2 hozzáadott oszlop) csinál egy pivot táblát.

    Mivel a sorok száma ugye dinamikusan változik (a kapott adatok egy adatbázis letöltésből származnak), ezért legelőször abba a problémába ütköztem, hogy a rögzített makró csak meghatározott számú sorba rakta bele a kalkulált értékeket, tehát meghatározott egy ranget pl Range(A1:A40) és később végig erre hivatkozott, de mikor pl 60 soros volt a lista, akkor is csak az első 40 sorba rakta be az adatokat, és a pivot táblában is csak azokat szerepeltette, vette figyelembe.

    Ezt kiküszöbölendő, a makrü legelején definiáltam egy változót:

    Dim LR As Long
    LR = Range("A" & Rows.Count).End(xlUp).Row

    Ezekután a kódban kicseréltem azokat a részeket, ahol a konkrét rangere hivatkozott, a változóra, pl Activesheet.Range("A1:A" & LR").Select lett az Activesheet.Range("A1:A40").Select helyett

    Így már rendesen feltölti az összes, változó számú sorba a kiegészítő adatokat, viszont a pivot táblánál még mindig csak az első 40 sorral kalkulál. Próbáltam ugyanígy updatelni a pivot tábla forrására vonatkozó részt, de akkor emg hibára futott a makró sajna :(

    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "Munka1!R1C1:R18C3", Version:=xlPivotTableVersion14).CreatePivotTable _
    TableDestination:="Munka4!R3C1", TableName:="Kimutatás1", DefaultVersion _
    :=xlPivotTableVersion14
    Sheets("Munka4").Select

    a kiemelet részt próbáltam így updatelni: "Munka1!R1C1:R & LR C C18" updatelni.....az oszlopok száma mindig 18, a sorok számába kéne bebűvölni a korábban meghatározott változót. gyanítom csak valami szintaktikai hiba
    any idea hogy kellene ezt beleírnom a pivot os részbe ?

    [ Szerkesztve ]

  • Kobe

    veterán

    helló

    még egy syntax erroros problémám lenne :) Van egy makróm amit egy másik, accesses makróból szeretnék futtatni. Ehhez az kell, hogy a makrót sorrol sorra be tudjam másolni az Excel Visual Vasic ablakába. 98% ban megy, de sajnos 2 helyen syntax errorra fut a "" jelek miatt

    Az eredeti, exceles makró egy részlete - ha ilyen formában futtatom excelből, tökéletesen fut, tehát nekem szóról szóra ezt kellene visszakapnom a beillesztés után

    Range("P2").Select
    ActiveCell.FormulaR1C1 = _
    "=IF(RC[-11]=""YES"",RC[-8]-RC[-10],RC[-9]-RC[-10])"
    Selection.AutoFill destination:=Range("P2:P" & lngLastRow)Range("P2").Select

    2 módszert ismerek amivel be lehet illeszteni Excel VBA ba:

    .InsertLines

    vagy változóként definiálva

    .InsertLines LineNum, "Range("P2").Select"
    LineNum = LineNum + 1

    .InsertLines LineNum, "ActiveCell.FormulaR1C1 = _"
    LineNum = LineNum + 1

    .InsertLines LineNum, ""=IF(RC[-11]="""YES""",RC[-8]-RC[-10],RC[-9]-RC[-10])""
    LineNum = LineNum + 1

    vagy

    Code = "Range("P2").Select" &vbNewLine
    Code = Code & "ActiveCell.FormulaR1C1 = _" &vbNewLine
    Code = Code & ""=IF(RC[-11]="""YES""",RC[-8]-RC[-10],RC[-9]-RC[-10])"" & vbNewLine

    A gondom az, hogy az Excelben a makró csak akkor fut le, ha az If feltételben megadott értéket 2 db idézőjellel írja vissza a modulba a program, pl ""YES"", mivel szöveges érték.

    Akármelyik metódust választom a fentiek közül, mindig "levágja" 1 "" ra, és "YES" t csinált belőle és elakad a makró annál a sornál.

    Próbáltam módosítani, de ha átírom accessben pl """YES""" re, akkor a sor többi részébe is be kell szúrnom plusz "" jeleket, mert nem fut le - Syntax Error - Expected End of Statement hibaüzit dob az accesses makró. Ha hozzáigazítom a többit, hogy jó legyen, akkor meg oda is felesleges "" jeleket rak be, ahova nem kéne, és így excelben akad el.

    Van valami ötletetek, hogyan kellene a "=IF(RC[-11]=""YES"",RC[-8]-RC[-10],RC[-9]-RC[-10])" sort átrni, hogy a fent említett 2 megoldással is működőképes amradjon ?

    [ Szerkesztve ]

  • Kobe

    veterán

    Sziasztok

    olyan problemam lenne, hogy van egy access adatbazisom, ami gombnyomasra egy adott lekerdezes eredmenyeit excelbe importalja, es futtat rajta egy makrot - beszurja a kodot, ami csinal belole egy pivot tablat, semmi extra.

    Az a gond, hogy a file minden megnyitaskor ujra probalja futtatni a makrot, ujra megkrealni a pivot tablat es ujranevezni az aktiv tabot, ami mar ugye letezik, ezert hibara fut, ami nem tul esztetikus egy ilyen automatizalt folyamatnal.

    Nem lehetne valahogy beallitani, hogy a makro csak 1x fusson le, ujbol megnyitas utan ne akarjon ujra lefutni ?

    Ha igen, mit kellene beszurni a kodba ?

  • Kobe

    veterán

    válasz m.zmrzlina #17689 üzenetére

    megnézem majd, igazából úgy épül fel amga a történet, hogy van egy hosszabb makró, annak az elején az accesses változók, lekérdezések, útvonalak vannak definiálva, hova mentse a filet, stb, majd van egy része ami azt definiálja hogy ha lementette a filet, abba milyen kódot "szúrjon be". Gondolom csak a beszúrt kódot kell hasonlóképp megbűvölni

  • Kobe

    veterán

    válasz Mutt #17694 üzenetére

    köszi, megnézem ezt is :)

    közben felvetnék még egy kis makró tervezést, amolyan elméleti síkon ki hogy csinálná. Tehát az alapszitu:

    Adott 2 excel tábla, ami nagyon hasonló adatokat tartalmaz, az oszlopok olyan 60%-ban megegyeznek. Mind a két fileban a tételeket kommentálni kell, az egyikben már alapból benne vannak ezek. Az egyik tételhez tartozó kommenteket szeretném átmásolni a másik fileba, hogy ne manuálisan kelljen, időt spórolva. Ezt a következő lépésekben gondoltam megvalósítani a makróval, csak érdekelne szerintetek mennyire életképes:

    1. adatbázisból kiexportálni a tételeket - gyak létrehozni a Workbook1-et, egy megadott hálózati mappában, adott néven - ez csak egy ideiglenes file lenne, amit a folyamat végén jó lenne törölni.
    2. Workbook1-ben létrehozni egy egyedi azonosítót, amire VLOOKUP-pal lehet majd hivatkozni a másik fileból.
    3. Megnyitni Workbook2-t valamely hálózati mappából
    4. létrehozni Workbook2-ben benne ugyanazt az azonosítót
    5. A megadott cellákba VLOOKUP-pal Workbook1-ből Workbook2-be másolni az adatokat
    6. Mivel az ideiglenes filet törölni kellene, ezért a vlookup által adott adatokat értékként beilleszteni ugyanazokba a cellákba (mivel ha törlődik workbook1, megszakadna a link a fileok között, és csak #N/A maradna a cellákban :)
    7. Workbook2 mentése, Workbook1 törlése

    Szerintetek ez összesűríthető 1 makróba ? a legpöpecebb lenne ha az egy access-es gombnyomásra lefutna :) Szerintem megvalósítható, az egyetlen probléma az, hogy Workbook2-ben nem minden tételre kellene bemásolni az adatokat. Workbook2 ben van egy oszlop, amiben van egy azonosító - "Hazai" vagy "külföldi", ez a két féle érték van a cellában. A makrónak ebben az esetben csak a "hazai" tételekre kellene kitölteni a dolgokat (a "külföldi" tételekre futna egy ugyanilyen makró egy másik adatbázisból és azt az töltené ki), gondolom ez egy sima If-fel menne, pl.

    IF A1="hazai" then
    makró szövege
    Else
    Exit sub

  • Kobe

    veterán

    Hali

    Egy kis tanacs kellene, van egy tablazat, ahol az X oszlopban 2 fele ertek van megadva (hazai vagy kulfoldi)
    az Y oszloban pedig egy fuggveny lenne , concatenattel irnek vissza egy erteket

    Azt szeretnem megoldani, hogy az Y oszlopban csak azokra a tetelekre szamitson concatenattel az excel barmit is, ahol X oszlopban "hazai" van. Erre tudna valaki egy VBA mintakodot mutatni ? Annyi csavar vaan benne hogy a sorok szama mindig valtozik a tablazatban tehat azt is bele kene kalkulalni hogy a hazai teteleket mindig A1-tol n ig keresse

  • Kobe

    veterán

    válasz Delila_1 #17716 üzenetére

    Koszi de nekem vba ban kellene es nem sima fuggvennyel megoldva, anyway az if csak 1 cellara vizsgalja a tartalmat, nekem megy valtozo sor szamu dinamikus listam van, mint irtam. Es az a baj, hogy nincs else statementem, mert nem kell, en azt szeretnem hogy a "kulfoldi" sorok cellait teljes mertekben hagyja beken, ne csinaljon vele semmit (azokat egy masik makro toltene fel)

    a makronak automatikusan vegig kellene mennie az osszes soron es magatol beirni minden cellaba ahol hazai van

  • Kobe

    veterán

    válasz Delila_1 #17718 üzenetére

    ez egy rendesen kitöltött táblázat, mindig ugyanaz a fejléc van az első sorban benne, a makró célja pedig hogy egyik excel fileból (ami adatbázisból ered), a másikba másoljak egy egy sorhoz fűzött kommenteket, adatokat

    A-AB oszlopokig vannak megcímezve a fejléc cellái, a file "eredeti" állapotban csak A-X oszlopokban tartalmazza az adatokat folyamatosan, plusz ugye X-AB ig ures cellákat, ezekbe kellene majd makróval hozzáilleszteni az adatokat VLOOKUPPAL

    A-X oszlopokban minden folyamatosan van kitöltve, egyedül a sorok száma változik, de minden oszlop ki van töltve.

    A makró úgy indul, hogy Y oszlop elé beszúr egy új oszlopot, és ott CONCATENATE tel létrehozza az azonosítót, ami alapján másik fileból behúzza az adatokat Z-AB oszlopokba.

    az Y2 es cella tehát így nézne ki: =CONCATENATE(X2,"-",ROUND(W2,0)) de ezt csak azokra a cellákra kellene beillesztenie, ahol X2="Hazai"

    Mint írtam az IF nem igazán jó megoldás itt, illetve dinamizálni kellene valahogy, hogy mindig X2-Xn számú sort nézzen át

  • Kobe

    veterán

    hello

    van egy ilyen kodom, de sajnos az idezojelekkel gondba vagyok, a kod maga sztem jo csak az idezojelekkel csusztam el

    Code2 = ""
    Code2 = Code2 & " Dim lngLastRow" & vbNewLine
    Code2 = Code2 & " lngLastRow = Cells(Rows.Count, ""A"").End(xlUp).Row" & vbNewLine
    Code2 = Code2 & " Columns(""A:A"").Select" & vbNewLine
    Code2 = Code2 & " Selection.Insert Shift:=xlToRight" & vbNewLine & vbNewLine
    Code2 = Code2 & " Range(""A1"").Select" & vbNewLine
    Code2 = Code2 & " ActiveCell.FormulaR1C1 = ""common_id""" & vbNewLine & vbNewLine
    Code2 = Code2 & " Range(""A2"").Select" & vbNewLine
    Code2 = Code2 & " ActiveCell.FormulaR1C1= ""=CONCATENATE(RC[2],""" - """,ROUND(RC[9],0))""" & vbNewLine

    a legutolso sornal elakad a makro, azert van igy Code2 valtozokent definialva mert a makrot access bol futtatom es onnan szurom be az excel fileba. A legutolso sorig rendbe lefut, letrehozza az uj oszlopot, elnevezi stb, viszont a concatenates fuggvenyt nem tudja kezelni, vmi gaz van az idezojelekkel.

    valaki at tudna nezni ?

  • Kobe

    veterán

    válasz Mutt #17741 üzenetére

    helló

    köszi a tippet, így működik

    Viszont az egyik makróm továbbra sem akar tökéletesen funkcionálni:

    Function OpenformatSWP()
    Dim objexcel As Object
    Dim objworkbook As Object
    Dim CodeMod As Object
    Dim LineNum2 As Long
    Dim Code3 As String
    Const DQUOTE = """" ' one " character
    Dim destination2 As String

    destination2 = "C:\Users\test\swp\test.xls"

    Set objexcel = CreateObject("Excel.Application")
    objexcel.Visible = True
    objexcel.DisplayAlerts = False

    Set objworkbook = objexcel.Workbooks.Open(destination2)
    Set CodeMod = objworkbook.VBProject.VBComponents("Sheet1").CodeModule

    Code3 = ""
    Code3 = Code3 & " Dim lngLastRow" & vbNewLine
    Code3 = Code3 & " lngLastRow = Cells(Rows.Count, ""A"").End(xlUp).Row" & vbNewLine
    Code3 = Code3 & " Columns(""X:X"").Select" & vbNewLine
    Code3 = Code3 & " Selection.Insert Shift:=xlToRight" & vbNewLine & vbNewLine
    Code3 = Code3 & " Range(""X1"").Select" & vbNewLine
    Code3 = Code3 & " ActiveCell.FormulaR1C1 = ""common_id""" & vbNewLine & vbNewLine
    Code3 = Code3 & " Range(""X2"").Select" & vbNewLine

    With CodeMod
    LineNum2 = .CreateEventProc("Change", "Worksheet")
    LineNum2 = .VBE.MainWindow.Visible = False
    LineNum2 = LineNum2 + 1
    .InsertLines LineNum2, Code3

    End With
    objworkbook.Save
    objworkbook.close
    'reopen Excel to run autostart
    objexcel.Workbooks.Open (destination2)
    End Function

    ezt a functiont futtatom accessből, és az volna a cél, hogy a test.xls file első munkalapjára beszúrjon és futtasson egy kódot.

    Perpillanat accessben Runtime error 40063 as hibával leáll a makró ennél a sornál:

    LineNum2 = .CreateEventProc("Change", "Worksheet")

    Az excel fileban is elég érdekes az eredmény, a Code3 ként definiált kódot egyszerűen nem a Sub / End Sub közé szúrja be, hanem elé. Sorról sorra így néz ki az Excelben megjelenő kód:

    Dim lngLastRow
    lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Columns("X:X").Select
    Selection.Insert Shift:=xlToRight
    Range("X1").Select
    ActiveCell.FormulaR1C1 = "common_id"
    Range("X2").Select
    Private Sub Worksheet_Change(ByVal Target As Range)
    End Sub

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz lapa #17745 üzenetére

    nyílván a makró tovább lesz építve, további funkciókat szeretnék majd "beinjektálni" az excel fileba, csak előbb az alap funkciókat tesztelném (hogy egyáltalán rendesen bele tudja rakni a már meglévő dolgokat). A selectek a továbbiakhoz kellenek majd

  • Kobe

    veterán

    válasz lapa #17747 üzenetére

    az oké, csak írtam hogy a makró ennél a sornál hasal el:

    LineNum2 = .CreateEventProc("Change", "Worksheet")

    először ezen a soron kellene átlendíteni valahogy

  • Kobe

    veterán

    válasz lapa #17749 üzenetére

    igen, de ugyanúgy annál a sornál akad el amint az előbb írtam

  • Kobe

    veterán

    válasz lapa #17751 üzenetére

    mivel ugyanaddig a sorig jut el a makró, ezért ugyanúgy néz ki:

    ezt rakja be visual basicbe:

    Dim lngLastRow
    lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Columns("X:X").Select
    Selection.Insert Shift:=xlToRight
    Range("X1").Select
    ActiveCell.FormulaR1C1 = "common_id"
    Range("X2").Select

    Ezt meg hozzácsapja alulra:

    Private Sub Worksheet_Change(ByVal Target As Range)
    End Sub

    Az access meg runtime error 40063 at dob

  • Kobe

    veterán

    válasz lapa #17753 üzenetére

    A code3 nevu beillesztett kod tartalmatol fuggetlenul mindig ugyanazzal a hibaval fut le, es Sub / End sub okat mindig kulon rakja be, eloszor a kod majd utana a sub/ end sub, es accessben elakad a korabban irt sornal

    amit baromira nem ertek hogy van egy ugyanilyen makrom, az egy excelbe importalt adatlistan hajt vegre muveletet ott tokeletesen mukodik, itt meg hogy egy elore letrehozott filbe akarom, nem megy

  • Kobe

    veterán

    válasz lapa #17761 üzenetére

    na, 1 kicsit hegesztettem a kódon 1-2 apróságot, így ebben a formában már sikerült elérnem hogy az Excel VBA-jába a Sheet 1 -re Private Sub / End Sub közé teszi be a Code3 tartalmát.

    Az egyetlen gondom az, hogy a sub nem fut le automatikusan, pedig jó lenne ha azt beinsertálás után automatikusan futtatná is.

    Van tippetek mit kellene hozzáadni, változtatni hogy az is menjen ?

    Function OpenformatSWP()
    Dim objexcel As Object
    Dim objworkbook As Object
    Dim CodeMod As Object
    Dim LineNum As Long
    Dim Code3 As String
    Dim destination2 As String

    destination2 = "C:\Access programmer\test.xls"
    Set objexcel = CreateObject("Excel.Application")
    objexcel.Visible = True
    objexcel.DisplayAlerts = False
    Set objworkbook = objexcel.Workbooks.Open(destination2)
    'Set CodeMod = objworkbook.VBProject.VBComponents("Sheet1").CodeModule
    Set CodeMod = objworkbook.VBProject.VBComponents("Ark1").CodeModule
    Code3 = ""
    Code3 = Code3 & " Dim lngLastRow" & vbNewLine
    Code3 = Code3 & " lngLastRow = Cells(Rows.Count, ""A"").End(xlUp).Row" & vbNewLine
    Code3 = Code3 & " Columns(""X:X"").Select" & vbNewLine
    Code3 = Code3 & " Selection.Insert Shift:=xlToRight" & vbNewLine & vbNewLine
    Code3 = Code3 & " Range(""X1"").Select" & vbNewLine
    Code3 = Code3 & " ActiveCell.FormulaR1C1 = ""common_id""" & vbNewLine & vbNewLine
    Code3 = Code3 & " Range(""X2"").Select" & vbNewLine
    With CodeMod
    LineNum = .CreateEventProc("Change", "Worksheet")
    ' .VBE.MainWindow.Visible = False
    LineNum = LineNum + 1
    .InsertLines LineNum, Code3
    End With
    objworkbook.Save
    objworkbook.Close
    'reopen Excel to run autostart
    objexcel.Workbooks.Open (destination2)
    End Function

  • Kobe

    veterán

    válasz Mutt #17791 üzenetére

    hello mester :) köszi a tippeket mint mindig

    igen, próbálkoztam azzal, hogy átírom így, ahogy te is javasoltad:

    LineNum = .CreateEventProc("Open", "Workbook")

    de ilyenkor valamiért összeakadt a kód többi sorával - általában elakadt ennél a sornál, és accessben egy "Event handler is invalid" hibaüzenetet kaptam.

    Igazából az lenne a cél, hogy az adott makró csak 1 fusson le, és többször ne, gondolom akkor ez az If amit írtál, azt csinálja hogy csak akkor futtatja, ha A1 üres, ha bármilyen érték van benne, akkor már nem fut le. Ez tök jó lenne, mert A1 általában mindig ki van töltve, csak amint átakarnám írni Open eventprocedurre a dolgot, onnantól kezdve borul a bili :(

    pedig van egy hasonló makró ami létrehoz és emgformáz egy táblázatot excelben, az ugyanezzel a kóddal perfektül működik. Nem tudom, hogy az xls tartalmának lehet e közze hozzá, ez a file amit használni akarok annyiban komplikáltabb hogy általában 3 munkalap van rajta:

    Sheet1 (INT)
    Sheet2 (excl INT)
    Sheet3 (All)

    én igazából ezt a makrót mindig csak az INT nevű munkalapon szeretném futtatni, gondolom akkor ezt valahogy a Code = Code & .... részben definiálni kellene

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Mutt #17795 üzenetére

    helló

    nincs sajnos semmilyen event a fileban, teljesen makrómentes, ezért is volt furcsa miért hasalt el. De ez amit írtál, nagyon pöpec lenne ha ki lehetne törölni a lefutás után a subot, megpróbálom ezzel a megoldással

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Mutt #17795 üzenetére

    hat ez valami kibaxott nagy access issue lesz, vagy nem tudom :( Kiprobaltam mindent amit leirtal, vegigbogarasztam a teljes CPearson fele VBA programming szekciot, gyakorlatilag mindenhol ugyanezt a emgoldast hasznaljak, amit te is mutattal, nalam ez is errorra fut. Minden valtozo definialva van rendesen, ennel a linenal viszont errorra fut :

    Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)

    mondvan a vbext_ct_StdModule nincs definialva mint valtozo, ami tok erdekes mivel ugye ez standard VBA komponens es kulon definialas nelkul is mennie kene...

  • Kobe

    veterán

    na sziasztok

    végre hosszas szenvedés után sikerült egy olyan keretet írni accessben az excel makrónak, ami képes egy modulet rendesen beszúrni, abba a kódot illeszteniés futtatni, valamint a végén a memóriát is kitakarítja utána.

    Az egyetlen problémám az, hogy ezt a kódot ugye Module- ra illeszti be, viszont nekem a makrót mindig egy adott worksheeten kell futtatni - no problem, megfelelő hivatkozással a Sheet-re megoldható a moduleról is, de mivel a végleges makró maga elég hosszú lesz, nem szeretnék minden hivatkozást pl Activeworkbook.Worksheet("Sheet1").Range....bla bla bla formátumra átírni - nem túl elegáns, meg sajnos nem is működne, mert:

    a munkalap neve mindig INT a fileban amin a makrót futtatni szeretném, viszont a visualbasices neve változhat: mivel a file manuálisan van összerakva, így a user lehet az adatokat a Sheet1-re, máskor a Sheet2-re rakja, viszont a Sheetet magát mindig INT-re nevezi át. Ezt a problémát orvosolandó, gondoltam már a Sub legelején definiálni kéne valahogy, hogy a további része csak az INT munkalapra fusson le

    Pl egy if függvénnyel, if munkalap neve = INT, lefut a makró, else nem fut le :)

    valaki tudna segíteni, hogy lehet ezt a feltételt pontosan megírni VBA ban ?

    az alábbi kód elejére kellene beilleszteni

    Private Sub MyMacro()

    Dim lngLastRow
    lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Columns("X:X").Select
    Selection.Insert Shift:=xlToRight
    Range("X1").Select
    ActiveCell.FormulaR1C1 = "common_id"
    Range("X2").Select
    .
    .
    .
    .

    End Sub

  • Kobe

    veterán

    válasz Fire/SOUL/CD #17855 üzenetére

    igen valami hasonlóra gondoltam, de ez nem definiálja, hogy a kód maradék része azon a munkalapon fusson le. Vagy igen ? :)

  • Kobe

    veterán

    válasz Fire/SOUL/CD #17857 üzenetére

    A belinkelt kod egy valos kod resze. Annyi a csavar a dologban hogy azt a codeot egy access adatbazis hozza letre az excel fileban. Mivel a kod ilyenfajta excel automatizmuson keresztul "szuletik", az excel fileban alapjaraton a Module1 VBA kodlapjara kerul beillesztesre, ahonnan perpillanat meg nem tud sikeresen lefutni mert az excel fileban tobb munkalap van, es a kodban nincs munkalap hivatkozas,igy az excel nem tudja eldonteni pontosan melyik munkalapon kene futtatni.

    nem szeretnem az egesz kodot atirni, mert baromi sok sor es eleg macera minden hivatkozas ele meg egy munkalap hivatkozast is betenni. Szeretnem valahogy a Private sub utan determnalni, hogy a kod tovabbi resze csak es kizarolag az INT munkalap tartalmara fusson le. Az eredeti if feltetel igy kicsit pontatlan volt: nem azt szeretnem, hogy akkor fusson le ha van INT nevu munkalap a fileban, hanem azt, hogy a kod maga az INT nevu munkalapon fusson le

  • Kobe

    veterán

    válasz Delila_1 #17724 üzenetére

    helló

    arra esetleg van valamilyen tipped, hogy a későbbiekben hogy lehetne dinamikusan azokra a cellákra hivatkozni pl VLOOKUP függvényben, amiket ez a sub amit mutattál kitöltött ?

    Kicsit részletesebben: van ugye egy változó sorú adattábla ahol az egyik oszlopban Hazai vagy Külföldi van írva. Ez a sub kitölt egy oszlopot a Hazai sorokra. Ezt a "Hazai" sorokra visszakapott értéket én egy azonosítónak szánom, és egy vlookup függvénnyel egy másik fileból az ehhez tartozó plusz információkat szeretném bemásolni vele.

    Az egyetlen gondom az, mint ami az eredeti subnál is volt: csak azokba a sorokba szeretnék beíratni valamit ahol az X oszlopban "hazai" volt, tehát valahogy dinamikusan szeretnék hivatkozni a VLOOKUP függvényben az Y oszlop kitöltött soraira.

    Próbáltam úgy, hogy definiálok egy változót, tovább folytatva a te Subodat. Alul a konkrét kód, a hivatkozások és oszlopok kicsit mások lehetnek benne, mert ez már a végleges változat ami fut.

    ez gyakorlatilag ugyanaz, mint amit te írtál, és klasszul működik: ehhez akarom majd hozzáépíteni a Vlookupot
    Dim lnglastrow as Long
    Dim lnglastrow2 as Long

    lnglastrow2=Range("L"&Rows.Coun).End(xlUp).Row

    For lnglastrow=2 to lnglastrow2
    If Cells(lnglastrow,"R")="Hazai" then Cells(lnglastrow,"AB")=Cells(lnglastrow,"O")&"-"&Round(Cells(lnglastrow,"L"),0)
    Next

    a Vlookupot próbáltam így hhozzáépíteni:

    Dim IDNUMBER as Long
    IDNUMBER= Cells(lnglastrow,"AB")=Cells(lnglastrow,"O")&"-"&Round(Cells(lnglastrow,"L"),0)
    For lnglastrow=2 to lnglastrow2
    If Cells(lnglastrow,"R")="Hazai" then Cells(lnglastrow,"T")= "=VLOOKUP(IDNUMBER,'C:/test/[test.xls]INT'!$A$1:$P$65536,5,FALSE)"
    Next

    a Vlookup rendben le is fut, azonban az eredménycellákba csak ?#NAME hibaüziket ír vissza, mert rosszul hivatkoztam az IDNUMBER változóra. Ha az IDNUMBER-t manuálisan kicserélem pl AB1-re, akkor már a jó értéket írja vissza az eredménycellába.

    Tudnátok segíteni mit kellene updatelnem ?

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Delila_1 #17863 üzenetére

    valszeg valamit elrontottam a ctrl c ctrl v nél :)

    Cells(sor, "X") & "-" & Round(Cells(sor, "W"), 0)

    erre van emgadva az érték, de így nem működik. Igazából az érdekelne, hogy a VLOOKUP os részt hogyan kellene átírni ahhoz, hogy ugyanúgy működjön, mint a korábbi concatenates subod, hogy csak azokra a sorokra leressen rá, ahol az eredeti concatenates sub is

  • Kobe

    veterán

    válasz Delila_1 #17865 üzenetére

    A T oszlop csak és kizárólag azon soraiba szeretnék vlookuppal beiratni egy értéket, ahol az AB oszlop megfelelő sora ki van töltve. A vlookup az AB oszlop tartalmát keresi egy másik fileban.

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Delila_1 #17867 üzenetére

    köszi :)

    igazából pont fordítva megy, de az nem gáz, csak meg kell cserélni hogy melyik excel filet adod meg a WS változóban.

    Egész pontosan úgy megy, hogy van a temporary.xls nevű file (ez egy adatbázis letöltés, access hozza létre és először ezt nyitja meg), és van a test.xls. A temporary.xls-ből szeretnék adatokat másolni a test.xls-be, de a többi úgy megy, ahogy leírtad - a test.xls INT nevű lapján az AB oszlopban található azonosítót keresem a temporary.xls ben, és a test.xls/INT lap T oszlopára írom vissza az értéket.

    Viszont a makró nem tudom miért, de ennél a sornál elakad (ez az amit már átírtam, hogy a másik filera hivatkozzon):

    Set WS = Workbooks("temporary.xls").Worksheets("Report")

    gondoltam hogy nem találja a filet, ezért próbáltam a teljes hivatkozást berakni a filehoz így:

    Set WS = Workbooks("C:/Users/Desktop/database test/test.xls").Worksheets("Report")

    de sajnos ez esetben sem működött. Az excel azt írja hogy Run-time error 9: Subscript out of range

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Delila_1 #17872 üzenetére

    excel 2010, a 2 toolpak be van kapcsolva. Nem ez a hiba forrasa sajnos :(

    Komolyan mondom kezd kilenni a ...., egy basic funkciot akarok megcsinalni es folyamatosan ilyen kezelhetetlen hibakra fut ez a rohadt makro

  • Kobe

    veterán

    válasz Delila_1 #17879 üzenetére

    Gyak ugyanazt csinaltam, mint amit te is mutattal a kodban, kicsit aktualizaltam a fileneveket de a valtozokhoz nem nyultam. Igazabol utananeztem neten es nagyon gyakran elojon ez a hiba vba s vlookupnal, csak epp mindig mas indokkal...igy eleg nehez sajna megoldast googlizni ra :(

  • Kobe

    veterán

    válasz Delila_1 #17884 üzenetére

    Igen de sok vba ban megirt vlookupnal elojon ez a hiba, eleg sok eset van neten errol. Gyakorlatilag az excel valamiert ugy erzekeli h a megadott munkafuzet nincs megnyitva ezert mar ertekadasnal nem tud hivatkozni ra, viszont ez hulyeseg, ott virit mellette a masik munkafuzet

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Delila_1 #17888 üzenetére

    utolsó mentsvárként megpróbálom azt, hogy a munkalapot átrakom a másik munkafüzetbe és onnan vlookupozok. remélem másolni azért tudja

  • Kobe

    veterán

    válasz Kobe #17889 üzenetére

    Kvajo, a munkalapot makroval masolni sem lehet ugyanugy subscript out of range hibara fut :S

  • Kobe

    veterán

    válasz Delila_1 #17907 üzenetére

    sorry, de azt nem tudom :( céges adatok vannak benne, ezért szenvedtem a programkódok körbeírásával is virágnyelven, hogy semmilyen üzleti jellegű adat ne látszódjon :(

    marad a googlezás, csak kvára idegesít

    [ Szerkesztve ]

  • Kobe

    veterán

    sziasztok :)

    remélhetőleg a legutolsó kérdésemmel fordulok hozzátok a jelenlegi makró kapcsán :)

    egy kis formázásbeli problémám lenne. Van 2 fileom, mindkettőben van egy oszlop, amiben 1-999-ig van egy azonosítószám. A két fileban sajna eltérő a formátum, és a vlookup nem igazán tudja kezelni. az egyikben a 13-as pl simán 13 nak van írva, a másikban 013-nak (nem, nem csak a formátuma ilyen, a cellába írt érték maga is 013 ként jelenik meg).

    Gondoltam ahol simán 13nak írja, beállítok egy custom formátumot, 000 formában, szépen viszsa is írja a 013 at, de ugye ez csak egy "vizuális" formázás, a cellába írt érték ugyanúgy 13 marad. Nincs valami tippetek hogy tudnám a cellába írt értéket is egy formázással megváltoztatni ?

    azért lenne szükségem rá, mert egy komplex azonosítót akarok kreálni, amivel vlookupozok. összefűzöm pl a Városnév-irányítószám kombinációt, és arra keresek. De ugye a különböző formátumok miatt az egyik fileban ez az azonosító így néz ki: Kistarcsa-023 , míg a másikban Kistarcsa-23 , és a vlookup nem talál egyezőséget

  • Kobe

    veterán

    válasz Delila_1 #17970 üzenetére

    köszi, ez így működik is :) viszont a macskakaparás jelekkel megint gondban vagyok :( a fenti képletet egy stringben definiáltam:

    Code = Code & bla bla bla

    Code = Code & "ActiveCell.FormulaR1C1= ""=RC[1]&"""-"""&RIGHT("""000"""&RC[2],3)""" & vbNewLine

    sajna valahol félrecsúsztak a macskakaparás jelek, és a VBA Expected end of statement üzenetet dob, de nekem minden idézőjel páros "rendben lezártnak" tűnik.

    Any guess, hol typoztam el ?

  • Kobe

    veterán

    válasz Delila_1 #17972 üzenetére

    mert pont az lenne a lényeg, hogy az a folyamat, aminek ez a képlet beírás egy igen nyúlfarknyi része, teljesen automatizált legyen.....főleg mert az utána következő folyamatok elég bonyolultak és makróval gyorsabban végrehajtható. :)

  • Kobe

    veterán

    ugy tunik nagyon peches formam van az excellel.....amint megoldom az egyik problemat, jon vele a masik...

    Most a valtozatossag kedveert Runtime error 1004.

    A koncepcio: van 2 db, strukturajaban es mukodeseben teljesen azonos adatbazisom, csak amsfajta adatok vannak benne nyilvantartva. Mindegyikben ugyanazok a makrok vannak, ugyanugy mukodnek. Hetente kapok 1 excel filet amiben olyan adatok vannak, amiket a 2 adatbazisbol ki tudok halaszni. Az elkepzelt folyamat az lenne, hogy egyik user megnyitja a sajat access adatbazisat, lefuttatja a makrot, ami automatikusan kiszedi es bemasolja az excel fileba az o teteleire vonatkozo adatokat.

    Majd user2 fogja a masik adatbazisat, ugyanugy futtat belole egy makrot, ami ugyanabba a fileba a masik tetelekhez bemasolja ugyanazokat az adatokat.

    Vagyis 1 fileon szeretnek egymas utan 2 ugyanolyan makrot futtatni ( a subok neve termeszetesen mas, igy nem akadnak ossze). A makro maga beszur egy uj modult az excel fileba, beilleszti a Sub szoveget es lefuttatja.

    A problema az, hogy nem tudom egymas utan lefuttatni mind a ket makrot, a masodik (tokmindegy melyik adatbazisbol futtatom elsonek), a masodik mindig Runtime error 1004 hibara fut ennel a sornal:

    Set xlmodule = xlbook.VBProject.VBComponents.Add(1) 'vbext_ct_StdModule

    vagyis az uj, masodik modult nem tudja hozzaadni az excel filehoz. Ami fura, hogy neha meg szokott mukodni, csak nem tudtam rajonni a semara. Szerintetek mi okozhatja ezt altalanossagban ? miert nem tud uj modult berakni egy mar leteze fileba, amikor egy ugyanolyan makro mar meg tudta csinalni ?

    [ Szerkesztve ]

  • Kobe

    veterán

    sziasztok

    kellene egy kis segitseg, egy makro debuggolasaban. Van egy egesz komplex makro, ami 4 kulonbozo dokumentumot megformaz, csinall belole egy filet, elmenti amolyan backup copykent ezt a nyersvaltozatot, majd tovabb porogve a makro ezen az aggregalt nyersfileon vegez formazast.

    A formazas egyik lepese az, hogy a felesleges sorokat kitorli. Felesleges sorok azok, ahol a datum a user altal az urlapon meghatarozott idointervallumon kivul esik.

    Pl a user azt mondja, hogy a kovetkezo X napra esedekes teteleket szeretne latni. Ilyenkor a makro egyik funkcioja megvizsgalja, a tablaban levo datum kisebb-e mint (mai nap + X), es ha a feltetel teljesul, torli azt a sort / rekordot a tablabol.

    Sajnos valamilyen problema miatt a makro jelenleg keptelen kezelni az evvaltast, ha pl olyan teteleket kellene filterelni, ahol a datum mar jovo ev januar 1 re vagy az utan esik, akkor rengeteg potencialis tetelt kitorol.

    Ha ezt a reszletet a makronak mai nap (dec 18) + 13 napra futtatom, jot mutat, ha mai nap + 14 re, akkor rosszat, kevesebb rekord marad az eredmeny listan mint kellene:

    If Menu.CheckBoxDateRangeFilter.Value = True Then

    lastrow = Cells.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row

    Range("B2").Select
    Do Until ActiveCell.Row > lastrow
    If Range("B" & ActiveCell.Row).Value <> "" And Range("B" & ActiveCell.Row).Value <> "XYZ" And Format(Range("B" & ActiveCell.Row).Value, "mm/dd/yyyy") > Format(Now + Menu.TextBoxDaysAfter.Value, "mm/dd/yyyy") Then
    Rows(ActiveCell.Row).Delete
    lastrow = lastrow - 1
    Else
    ActiveCell.Offset(1, 0).Select
    End If
    Loop

    End If

    Ha ezt a reszet kihaygom a futtatasbol, a tobbi formazos resz tokeletesen elfut. A menuben / urlapon gyakorlatilag ugyanez a formatum lett definialva a cellanak, tehat nem 2 kulonbozo formatum akad ossze.
    Otlet, mi okozhatja ezt ?

    [ Szerkesztve ]

  • Kobe

    veterán

    válasz Mutt #19884 üzenetére

    A B oszlopban egy kalkulált dátum van mm/dd/yyyy formátumban, illetve van ahol egy szöveg, amit bizonyos sorokra a dátum helyett ír be a makró (XYZ) más feltételek alapján. Az lenne a lényeg, hogy törölje azokat a sorokat, ahol valami XYZ től eltérő szöveges érték, vagy a (mai nap + X) dátumon túli dátum van benne.

    Mivel egy elég komplex makróról van szó, gyanítom akkor elég sok helyen át kell írni ezeket. Van egy menü, egy űrlap, ahol a user beadja az X értékét, úgy emlékszem ott is annak a rublikának az értéke

    Format(Now + Menu.TextBoxDaysAfter.Value, "mm/dd/yyyy")

    ként van definiálva, akkor ott is át kéne írni date diffre ?

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