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.
Jozsef ezeket nagyon vágja szerintem. De amit lehet, ne priviben, mert másnak is hasznára válhat. Pl. nekem:) Nekem nem volt problémám még vele - bár én kisebb dolgokat szoktam vele orvosolni, és szó ami szó, több mindenre is lehetne használni....
Aziránt érdeklődöm, hogy van-e köztetek valaki aki otthon van a Solverben. És hajlandó lenne velem konzultálni. Mert amilyen hasznos ez a funkció amikor jól müködik, annyira bosszantó, hogy irgalmatlanul labilis. Az még hagyján, hogy a kezdőértékekre érzékeny. De van, hogy megmagyarázhatatlan okokból átírja a célcella képletét. Aztán vagy jelzi, vagy nem, hogy hibás eredményt adott. Máskor nem ír át semmit, de nem vesz figyelembe egy korlátozó feltételt. Olyat, amit egy korábbi futtatásnál figyelembe vett. A legjobb lenne, hagyni a fenébe. Amit azonban még se szívesen tennék, mert már sok optimalizálási problémát megoldottam vele, amit szeretnék a továbbiakban is.
Szóval, ha van valaki, aki már megbirkózott hasonló problémákkal, örömmel venném ha jelezné nekem. Akár priviben is.
Köszi ez még jobb, ezzel megoldottam a múltkori autoszűrős kérdésemet is. thx!
Private Sub ToggleButton1_Click() If ToggleButton1.Value Then OK: Application.Calculation = xlCalculationManual Selection.AutoFilter Field:=5, Criteria1:="*" & InputBox("Szótöredék:") & "*", Operator:=xlAnd ScreenUpdating = False 'MsgBox "Autofilter bekapcsolva. Automatikus lapfrissítés kikpcsolva"
Select Case MsgBox("Újabb szűrés?", vbYesNoCancel) Case vbYes GoTo OK Case vbNo On Error Resume Next ActiveSheet.ShowAllData Application.Calculation = xlCalculationAutomatic 'MsgBox "Automatikus lapfrissítés visszakapcsolva" ToggleButton1.Value = False Case Else ToggleButton1.Value = False Exit Sub End Select End If End Sub
marhára örül a fejem ha sikerül valami. Igaz Goto nélkül nem tudam hogy kell, de nekem tökéletes így is.
Szasztok, tudnátok segíteni abban, hogy miként lehet feltételhez rendelni azt hogy ha egy MsgBox-on No avagy Yes gombot nyomtak meg? Tehát ha No akkor ez van ha Yes, akkor amaz
Valahogy az megoldható, hogy a funkció billentyűkhöz (F1 - F12) hozzárendeljek makrót? Illetve azt szeretném elérhi, hogy van egy makró ami lefut ctrl+m -re, de csak akkor fusson ha az form1 aktív, ha a form2 aktív akkor ne fusson (a form2 csak akkor aktív ha a form1 is meg van nyitva, de inaktív). Előre is köszönöm.
Ez így továbbra sem teljesen elég de azért már nagyjából értem. A lenti kódot egy olyan alkalmazásból vettem ki, amit akkor használtam amikor sokszáz leányvállalat adatait kellett egy pivot táblából különböző fájlokba szétdobálni.
Mondjuk a pivottábla neve "PivotTable1" és amiket szűrsz azok leányvállalatok az a mező ("Affiliate").
Sub idu()
Application.Screenupdating = False
'Két egymásba ágyazott ciklust használunk:
i = ActiveSheet.PivotTables("PivotTable1").PivotFields("Affiliate").PivotItems.Count
For i1 = 1 To i
'végigmész az összes különbözo rekordon
For i2 = 1 To i 'a pivot táblának csak azon elemei lesznek láthatóak, amelyeket szeretnénk, a többit elrejtjük
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Affiliate") If i2 = i1 Then
.PivotItems(i2).Visible = True On Error Resume Next
.PivotItems(i2 - 1).Visible = False On Error GoTo 0
Else
On Error Resume Next 'ez az esetleges üres mezok miatt kell .PivotItems(i2).Visible = False On Error GoTo 0 End If
Az oldalmező egy szűrő a Kimutatás oldalterületén. Lényegében hasonlóképpen néz ki, mint egy tábázat fejlécén az autoszűrő. Egy lenyíló lista, benne rendezetten láthatók az alatta lévő oszlopban található adatok. Lenyitod a listát, szűrsz az első tételre, kinyomtatod. Szűrsz a másodikra, kinyomtatod, és így tovább. Lényegében ezt szeretném egy makróval megoldani. Az objektum nevek mások, mert Pivot Tábláról van szó. Azon kívül, mivel az eredmény több mint ezer oldal lesz, valamivel kezelni kellene a folyamatot.
Ha az oldalmező azt jelenti hogy van egy oszlop ahol egy adott érték már új oldalra kell hogy kerüljön, akkor: (feltételezve hogy ez az érték az A oszlopban van és mindig "q")
Sub oldaltores() ' Cells.Select ActiveSheet.ResetAllPageBreaks Selection.SpecialCells(xlCellTypeLastCell).Select X = ActiveCell.Row ' a tartomány -ig sora
For i = 2 To X If Cells(i, 1) = "q" Then Rows(i).Select ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell Else End If Next i End Sub
Üdvözlet Mindenkinek, Segítséget kérek. Egy oldalmező tételei szerint szeretnék kinyomtatni egy kimutatást, minden tételt új oldalon kezdve. A tételszám ezres nagyságrendű. Az oldalankénti nyomtatás funkció nem jó. Egy makró kellene. Tudtok segíteni? Köszönöm.
Köszönöm, én is gondoltam valami ilyesmire, számítottam valami frappáns megoldásra. Mindenesetre target változóval megcsináltam, aztán majd kiderül mennyire válik be. köszi még1x
Értem már. Nos, egy kerülő megoldást tudnék javasolni.
Mivel az autoszűrés nem váltja ki a Worksheet_Change eseményt, szerintem szűréskor kapcsold ki az automata számolást, és Worksheet_Change eseménnyel kapcsold be. Amíg csak szűrsz, addig nem kell számolgatni, viszont ha a munkalapon módosul valami, akkor elképzelhető, hogy kell.
A gond itt az lehet, hogy Application.Calculation = xlCalculationAutomatic utasításra mindnképpen átszámolja a képleteket, ha addig xlCalculationManual volt az érték. Tehát esetleg akkor is, ha a szűrés után az első változás olyan cellában történik, amely nem része semmilyen képletnek. Ezért indokolt lehet a Change esemény lekorlátozása a Target változó segítségével.
Nem tudom, jó megoldás-e, első ránézésre annak tűnik...
Bocs, ha nem volt érthető - pedig igyekeztem. A fő probléma az, hogy egy 6000 soros táblázat szűrésekor a táblázat frissül, újraszámolja az egészet és ez sokáig tart. Ugyanakkor a Beállítások/számolás fülön a kikapcsolt frissítést vissza kell kapcsolnom a makró végén - hisz a további használat során szükség van erre. Viszont visszakapcsoláskor - ami teljesen helyénvaló - frissül a táblázat.
Például ez a kód az lefut:
Sub K() Application.Calculation = xlCalculationManual Selection.AutoFilter Field:=5, Criteria1:="*" & InputBox("Szótöredék:") & "*", Operator:=xlAnd ScreenUpdating = False Application.Calculation = xlCalculationAutomatic End Sub
De az utolsó sorban a visszakapcsolás miatt frissül a táblázat és számolgat egy csomót. Magyarul azt el lehet kerülni, hogy autoszűrő használatakor ne frissüljön a táblázat?
Nem nagyon használtam még Office 2007-est, de úgy rémlik, azt olvastam valahol, hogy a kezelőfelületét át lehet állítani a megszokott régire. Hogy hogyan, azt nem tudom, de szerintem a Súgó tudja. Esetleg a Súgó tudhatja azt is, hogy az X-et hogyan kell kitenni a jobb felső sarokba...
Gondolj úgy a képletekre, mint az általános iskola első osztályának matekkönyvében szereplő, szaloncukor alakú "gép"-ekre. (Az én időmben még ilyenekkel etettek :)) Felül bedobsz valahány számot, alul kijön egy darab érték. Az Excel függvényei általában ilyen, 1 azaz egy kimenettel rendelkező gépek. Azt mondom, "általában", mert lehet, hogy tévedek, de most nem tudnék olyan függvényt mondani, amelyiknek két kimenő adata van. Olyat sem láttam még, hogy egy beírt képlet a beírás cellájától eltérő cellában módosít értéket. (Hacsak nem felhasználó által, VBA kóddal megírt függvényről van szó, mert ott akármi is történhet.)
Magyarul és röviden: ha az E1-ben képlettel számított értéket akarsz látni, akkor oda (E1-be) be kell írnod azt a képletet, amely az értéket kiszámítja.
Esetedben a mennyiségi egység kimásolása hasonló képlettel működik, mint az ár kiszámítása. Az FKERES függvény paraméterei változnak. A keresési érték ugyanaz (vagyis az árucikk), a tartomány A:B oszlopokról A:C oszlopokra módosul, az oszlopszám 3, a tartományban keres pedig marad hamis. (Legalábbis, ha jól látom a helyzetet.) Ja, és persze - ellentétben az egységárral - ezt nem kell beszorozni a mennyiséggel.
Ezt hogy csináltad, hogy a behúzások így megmaradtak? Nekem mindig trim-meli az összes soromat a fórum szoftver, és minden sorom a doboz elején kezdődik...
Az utóbbi problémával továbbra is küzködök. Nem igazán értem ezeket a képleteket. A felállás a következő: Egy munkafüzeten belül van egy ártábla (artabla) munkalap ami tartalmazza az:
C1 | D1 | E1 | F1| mennyiség | cikk | mennyiségi egység | ár |
szóval amíg az első megoldást javasoltad, azt sikerült megcsinálnom úgy is hogy az árakat egy másik lapon helyeztem el. Ezt megoldottam a lap elnevezésével és az érvényesítésnél megadtam az adatok lap nevét. Teljesen jól működött. De aztán hozzájött ez a mennyiégi egység amit az artabla lapon csak az ár utáni oszlopba raktam be C1től lefele az árak mellé. Namármost azt szeretném ha az összesítőn ha kiválasztom a terméket akkor bemásolja mellé az artabla lapon lévő mennyiségi egységet is autómatikusan az E1 cellába. Gondolom ezt is képletként kell megadni a korábban írt képletbe, vagy ez külön képlet az E1-re vonatkozóan??
Dim i As Integer Dim k As Integer Dim Kom For i = 4 To 700 For t = 4 To 128 If Cells(i, t) = "M" Then Set Kom = Cells(i, t).Comment If Not Kom Is Nothing Then Cells(i, t) = Cells(i, t).Comment.Text Set Kom = Nothing End If Next t Next i