- Huawei Watch Fit 3 - zöldalma
- Jobb zoom, egyszerűbb kijelző - megérkezett a Sony Xperia 1 VI
- Netfone
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Apple iPhone 15 - a bevált módszer
- Ezek a OnePlus 12 és 12R európai árai
- Motorola Edge 30 Neo - wake up, Jr...
- Samsung Galaxy A33 5G - a három az majdnem öt
- iPhone topik
Hirdetés
-
Négy játékkal is szemez az új Arc meghajtó
ph A 31.0.101.5522-es, WHQL aláírással rendelkező csomag egy hibát is javít
-
Huawei Watch Fit 3 - zöldalma
ma Megnéztük, hogy tényleg okosóra lett-e a Huawei fitnesz karperecéből.
-
AMD Radeon undervolt/overclock
lo Minden egy hideg, téli estén kezdődött, mikor rájöttem, hogy már kicsit kevés az RTX2060...
-
Mobilarena
A Microsoft Excel topic célja segítséget kérni és nyújtani Excellel kapcsolatos problémákra.
Kérdés felvetése előtt olvasd el, ha még nem tetted.
Ú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
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 480van 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ökkentiilletve 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álnitudnátok ebben segiteni ?
[ Szerkesztve ]
-
Kobe
veterán
-
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
-230akkor 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
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).RowEzekutá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!R1C118C3", Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Munka4!R3C1", TableName:="Kimutatás1", DefaultVersion _
:=xlPivotTableVersion14
Sheets("Munka4").Selecta kiemelet részt próbáltam így updatelni: "Munka1!R1C1 & 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").Select2 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 + 1vagy
Code = "Range("P2").Select" &vbNewLine
Code = Code & "ActiveCell.FormulaR1C1 = _" &vbNewLine
Code = Code & ""=IF(RC[-11]="""YES""",RC[-8]-RC[-10],RC[-9]-RC[-10])"" & vbNewLineA 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
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éseSzerintetek 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 erteketAzt 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))""" & vbNewLinea 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
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 Functionezt 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
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").SelectEzt meg hozzácsapja alulra:
Private Sub Worksheet_Change(ByVal Target As Range)
End SubAz access meg runtime error 40063 at dob
-
Kobe
veterán
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
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
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
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)
Nexta 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)"
Nexta 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 #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 #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
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)""" & vbNewLinesajna 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
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 IfHa 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
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
- TCL LCD és LED TV-k
- 30 TB-ot meghaladó HDD-ket demonstrál a Toshiba
- Huawei Watch Fit 3 - zöldalma
- Videós, mozgóképes topik
- Jobb zoom, egyszerűbb kijelző - megérkezett a Sony Xperia 1 VI
- Microsoft Office és Office 365 topic
- Vigneau interaktív lokálblogja
- Óra topik
- Milyen SSD-t vegyek?
- Politika
- További aktív témák...
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Canva Pro előfizetés - 1 éves
- Warhammer Online - Age of Reckoning (DE) Collectors Box (Figurával!)
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Windows 10/11 Home/Pro , Office OEM/Retail kulcsok
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Promenade Publishing House Kft.
Város: Budapest