- 
			  Fototrend 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
- 
			
			  nokri csendes tag Sziasztok! 
 adott egy hosszú lista, ahol a C oszlopban nevek vannak. a cégek végig nagybetűvel, a magánszemélyek kezdőbetűje nagy a többi kicsi.
   
 hogyan tudom leszűrni akár adott oszlopban vagy egy képlettel egy következő oszlopban (pl. igen/nem - igaz/hamis) csak a cégeket vagy csak a magánszemélyeket?
- 
			
			  F34R nagyúr Sziasztok, Excel-el meg tudok olyat csinalni hogy ket cellabol random vallaszon egyet es azt kilistazza? pl Malnajoghurt, Barackjoghurt 150 randomizacio es a vegen kidobja az egyiket? 
- 
			
			  Erunosta tag Sziasztok újra! Valami ötlet a fentebb említett problémámra? 
 #47976Összefoglalva 
 Rendszer: Win7 x64 Professional (+Classic shell) (teljes update)
 Verzió: Office 2003 Professional (csak Word és Excel telepítve)
 Én úgy nyitom meg az xls fájlokat, hogy külön ráklikkelek, akár több is fut egyszerre, külön ablakokban. Amiket külön is kezelt a rendszerem vagy az office, nem tudom. Tehát egyenként külön be tudtam zárni ami nem kellett. Mióta újratelepítettem a rendszert, ugyan külön ablakba nyilnak meg, de mikor bezárom az egyiket akkor mindet bezárja ami borzasztóan zavaró.
 plusz infó: A windows tálcán egérrámutatással eddig külön láttam a tartalmakat kis ablakban, navigálni is egyszerűbb volt köztük. Most nem mutatja kis képben a tartalmakat csak egy XLS ikont.
- 
			
			  EasyLife aktív tag Sziasztok! 
 Jövőévi osztalék számításhoz szeretnék excelben egy kalkulátort összehozni, elakadtam az egyik cellánál amiben a szociális hozzájárulás összegét szeretném kiszámolni ami adott érték 13%-a, viszont nem lehet több ez az érték 624e Ft-nál. Ezt hogy lehet összehozni?
- 
			
			  Delila_1 veterán Nem írtad, melyik verziót használod. Azt hiszem, a 2016-os verziótól kezdve egyszerű a dolgod. 
 Az oszlopod melletti első cellába beírod a százalékot, majd a cellán állva Kezdőlap, Szerkesztés csoport, Kitöltés, Villámkitöltés. Ez minden alatta lévő cellába beírja a helyes eredményt.
- 
			
			  ace05 senior tag Segítséget kérnék. Van egy csomó ilyen cellám : 
 6. - jellemző 100%
 6. - jellemző 100%
 5. - legtöbször jellemző 90%
 6. - jellemző 100%
 6. - jellemző 100%Van az excelben valami automatizált mód arra, hogy eltávolítsam szöveget belőle? Mert átlagot szeretnék számolni ezekből. 
- 
			
			  Erunosta tag Sziasztok! Nekem egy őskövület Office csomagom van az Office 2003 angol. Nemrég újra kellet telepítenem az egész rendszerem (8 év után) egy durva összeomlás miatt. Windows 7 x64 Professional +Classic Shell. 
 Az előző rendszeremen, ami szintén ugyanez volt máshogy működött az ablak bezárás funkció. Akkor ott, ha egy excel file-ra klikkeltem hogy megnyissam mind külön ablakban nyílt meg és mikor az egyiket bezártam a többi nyitva maradt, ezt így szerettem.
 Az újratelepített rendszeren szintén külön ablakban nyílnak meg, viszont most ha az egyiket bezárom az összes többit is bezárja ami borzasztóan zavaró.
 Extra infó hogy most a tálcán a gyorsnéző (vagy minek hívják mikor az egered, ha ráviszed kicsibe mutatja az ablakot) nem mutatja a tartalmakat, ha egynél több van megnyitva, ez szintén látható volt az előző rendszeremen.
 Segítsetek, mert már végignéztem mindent amit lehetett, de nem találom a megoldást. Azt se tudom, hogy ez most az Office beállítása vagy a Windows kezeli máshogy ezeket?A válaszokat előre is köszönöm. Eru 
- 
			
			  w.miki veterán Van egy ruhaigeny2022 táblázatom. 
 294 pontot kell elosztanom a felsorolt ruhák közt úgy, hogy az nem lépje túl a választható (néhány sorban benne van, néhányban felette) mennyiséget.
 Hogyan tudnám ezt úgy megcsinálni, hogy én írom be a darabszámokat, az excel ellenőrzi a mennyiséget, és vonja le a pontokat automatikusan.
 (És a táblázat se teljesen jó, mert van ahol elcsúszott a PDFből konvertálás mellett.)
- 
			
			  lappy őstag 
- 
			
			Köszi, nem tudtam rávenni.   Elvileg ez a AB.SZÓRÁS lenne magyarul, viszont, fogalmam sincs, hogy a "field" helyére mi kerül. Egyik adatsor az E2:E304 oszlopban van, ott vannak az E1, E2, E3... besorolások, másik sor (J2:J304) meg számokat tartalmaz (bár sok üres cella is van). Így próbálnám megnézni, hogy, az E1, E2, E3... -hoz tartozó számok szórása mennyi. Később megpróbálom még Hmmm 
- 
			
			Auh. szórást szeretnék számítani olyan számoknál, amik megfelelnek egy kritériumnak. 
 Tegyük fel, E2:E304-ig egy oszlopban keresnék a kívánt kritériumra (pl. "*E2*"), a számokat pedig az J2:J304 oszlop tartalmazza.Ugyan az átlagot ki lehet "átlagha" függvénnyel számítani, de, nem tudom, a szórást hogy tudnám ugyanezekre meghatározni? Vagy teljesen rossz megközelítés? : ) Bármi segítség v észrevétel lenne, nagyra méltányolnám.   
- 
			
			  karit csendes tag Sziasztok! Excel 2010 esetén, ha egy folderben mondjuk 3 db munkafüzetet kijelölök és Entert nyomok, egy db Excel ablak indul el, és abban nyílik meg mindhárom xlsx (ctrl+TAB-bal lehet váltogatni köztük). Az újabb Excelekben ilyenkor 3 külön Excel ablakban nyílik meg a 3 munkafüzet. 
 Rá lehet venni valahogy az új Excelt, hogy 1 db ablakban nyissa meg őket? Köszi szépen!
- 
			
			  lappy őstag Van egy egész éves naptáram (dátumok egymás alatt). Jelzi a hétvégét más színnel. Viszont szeretném a mai napot is megjelölni ami szépen megy is, de ha szökőév van akkor 1 nappal le van maradva a jelölés. Feltételes formázásban ilyen képletet használok 
 =HA(SOR($C7)-6=$D$1-DÁTUM(ÉV($D$1);1;0);1;0)
 Köszönöm
 
- 
			
			  eszgé100 őstag válasz  Fferi50
							
							
								#47925
							
							üzenetére Fferi50
							
							
								#47925
							
							üzenetéreA fájl szűrés nélküli állapotban nyílik meg, és a manual update értéke ''no". 
 Ha kézzel átállítom "yes"-re függetlenül attól, hogy szűrtem-e, akkor alábbi kóddal tudtam megoldani, de nem vagyok benne biztos, hogy jól csináltam.Set scrange = ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter))
 cntifres = WorksheetFunction.CountIfs(ws.Range("D2 : D" & lastrow), scrange, ws.Range("P2 : P" & lastrow), "yes")
 
 If cntifres = 0 Then
 If scrange.Row <= counter Then
 Excel.Workbooks(fileName).Close SaveChanges:=True
 ElseIf manualcheck = False & CStr(saveandclose) = "yes" Then Excel.Workbooks(fileName).Close SaveChanges:=True
 End If
 End IfAlapból a fájlokat nem látható ablakban nyitom meg, ezért még kellett a makró végére ez is, hogy megjelenjenek: If manualcheck = True Then
 lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
 counter = 2
 
 Do While counter <= lastrow
 
 If Not ws.Range("A" & counter).EntireRow.Hidden Then
 sPath = ws.Range("D" & counter)
 fileName = Right(sPath, Len(sPath) - InStrRev(sPath, "\"))
 manual = ws.Range("P" & counter)
 If CStr(manual) = "yes" Then Windows(fileName).Visible = True
 End If
 
 counter = counter + 1
 Loop
 
 ma.Activate
 Range("A1").Select
 
 MsgBox "Update and print the sheets manually"
 Else: MsgBox "Done!"
 End IfRánézésre jól csináltam mindent? 
- 
			
			  Fferi50 Topikgazda Szia! 
 Kár, hogy a két képet nem csatoltad.
 Ha vonaldiagramot csináltál, akkor pl. lehet esésvonalakat hozzáadni a Diagramtervezés menüben: 
 Esetleg tehetsz fel trendvonalat, annak az egyenletét, amiből ki lehet számoltatni a metszéspontot.
 [itt találtam vba-s megoldást]
 a lappy által mutatottra, ezt az adott munkafüzetbe lehet beépíteni. Utána makróbarátként kell elmenteni.
 Üdv.
- 
			
			  Kowax tag válasz  Delila_1
							
							
								#47945
							
							üzenetére Delila_1
							
							
								#47945
							
							üzenetéreEz hogy oldja meg a problémámat?   
 Csatolok két képet. Az elsőn az adatok, a másodikon a diagram. A diagram kék vonalai és a narancssárga vonal metszéspontjainak X értékére vagyok kíváncsi. A kék vonalak adatai mérési eredmények. A narancssárga az adatok közül az utolsó oszlop, ami az adatok közül a maximális érték felét jelenti.
 Na most itt akkor hogyan fogom megtudni a metszéspontokat egy új sor és oszlop felvételével?  
 Előre is köszönöm, ha elmagyarázod, mert ezt most nem látom át.  
- 
			
			  Delila_1 veterán válasz  csferke
							
							
								#47944
							
							üzenetére csferke
							
							
								#47944
							
							üzenetérePrivate Sub Worksheet_Change(ByVal Target As Range)Dim lapnev As StringIf Target.Address = "$B$3" ThenApplication.EnableEvents = Falselapnev = "Állandó " & Range("L1")Sheets(lapnev).Name = "Állandó " & Range("B3")Range("L1") = Range("B3")Application.EnableEvents = TrueEnd IfEnd SubElső futtatás előtt írd be az L1-be az állandó szöveg utáni részt. 
- 
			
			  csferke senior tag válasz  Delila_1
							
							
								#47942
							
							üzenetére Delila_1
							
							
								#47942
							
							üzenetéreSzia! 
 Mikor egy új lapot hozol létre, az a Munka1 lap B3 cellájában lévő nevet kapja meg.
 Nem pontosan erre gondoltam. Pontosítok.
 Meglévő munkalap nevét szeretném módosítani.
 Adott egy "Név" ami nem változik és ehhez kellene hozzáadni a B3 tartalmát. Amikor változik B3 tartalma akkor változzon a munkalap neve "Név "+a B3 új tartalma.köszi 
 Angol Excel 2007
- 
			
			  Kowax tag Sziasztok! Adott két oszlopom mért értékekkel. Az egyiket diagramban ábrázolom a másik függvényében. Amire kíváncsi vagyok, hogy az ábrázolt diagram egy adott pontja (ami a maximális érték fele) hol metszi az X tengelyt,vagyis aminek a függvényében ábrázoltam. Nem tudom ez így mennyire érthető, kicsit késő van már.  
 Odáig jutottam, hogy a maximális érték felének értékével csináltam egy új oszlopot, azt is ábrázoltam a diagramban, így kaptam egy vízszintes egyenest, ami metszi az eredeti görbét. Na erre a metszéspontra lennék kíváncsi az X tengelyen.
 Valaki tudna ebben segíteni?  
 Előre is köszönöm szépen!  
- 
			
			  csferke senior tag Sziasztok! 
 Mivel erre nem reagált senki, ismételten bátorkodom feltenni a kérdést.
 Az kivitelezhető, hogy automatikusan változzon egy Munkalap neve?
 Konkrétabban. "Név "+ egy másik lapon található cella tartalma, amely változik.köszi 
 Angol Excel 2007
- 
			
			  ReSeTer senior tag Bocsánat ha rossz topic, igazából VBA topic nincs, csak VB. Hogyan tudnék egy Word dokumentumban található táblázatba új sort csinálni célzottan? Tehát ne a végére csináljon, hanem mondjuk megtudnám adni, hogy melyik sor alá. wordobjektum.Tables(táblázatazonosító).rows.add Itt tartok. 
- 
			
			válasz  hódmaci
							
							
								#47935
							
							üzenetére hódmaci
							
							
								#47935
							
							üzenetéreÖöö, ehhez nem kell makró, mert ez 10 másodperces munka max... ![;]](//cdn.rios.hu/dl/s/v1.gif) 
 Csinálsz egy munkalapot, aminek pl. Üres jelenléti ív nevet adsz (mert az az üres jelenléti ívet tartalmazza), CTRL nyomvatart, egérrel megfogod a munkalapot és elhúzod (lesz egy másolat, azon duplaklikk és átírod a nevét a megfelelő dátumra és kész...
 (vagy az üres munkalapon jobb egér/áthelyezés vagy másolás...)
- 
			
			  hódmaci senior tag 
- 
			
			  hódmaci senior tag válasz  Fire/SOUL/CD
							
							
								#47934
							
							üzenetére Fire/SOUL/CD
							
							
								#47934
							
							üzenetéreJobb lesz ha hosszabban leírom mit is szeretnék mert nem szeretném ha fölösleges köröket futna velem bárki is.   Amit szeretnék: Készíteni szeretnék egy adott lapot ami nevekkel jelenléti felsorolást tartalmaz. 
 Illetve elvégzett munkálatokat
 Afféle műszaknaplóAdott névhez adott jelenlét x-elhető. 
 (beteg, jelen, szabi, egyéb)Ezeket kitöltöm ma és elmentem. 
 Holnap megnyitom és vissza tudom keresni dátum szerint ki volt aznap és mit csinált a csapat.
 Illetve egyben nyitnák egy új lapot aminek a neve az aznapi dátum illetve a lap tartalma az kitöltetlen jelenléti ív.
 Vagyis csak neveket tartalmaz és én beírom ki van ki nincs illetve az aznapi munkát.
 Másnap kezdődik előröl.
 Új lap ami kitöltve előre az adott nevekkel én beírom aznap ki van ki nincs stb....
 pm küldtem képetlappy 
 Köszönöm.
 Működik
- 
			
			válasz  hódmaci
							
							
								#47932
							
							üzenetére hódmaci
							
							
								#47932
							
							üzenetéreBocs, csak mint a Hungaroringen a boxutcába, úgy jönnek sorba a futárok hozzánk...  Igen, mert hüle voltam, megfeledkeztem róla, hogy bizonyos karaktereket nem lehet munkalap nevében felhasználni... Bocsesz ( csak tényleg ki-be rohangálok egy ideje a futárokhoz) Mindjárt megírom újra. Még csak annyit, hogy egy újonnan létrehozott munkalapnak még nincs sem élőfeje, sem élőlába, tehát nincs mit az éppen létrehozás alatt álló munkalap nevébe beilleszteni. Esetleg úgy értetted, hogy a makró adjon az újonnan létrehozott munkalaphoz élőfejet meg élőlábat?  Az alábbi kód ezt teszi. Az alábbi kód ezt teszi.'Fire/SOUL/CD - 2021
 Private Sub Workbook_NewSheet(ByVal Sh As Object)
 
 Dim MyDate As String
 Dim MyStr As String
 
 'megadjuk a dátum- és időformátumot
 MyDate = Format(Now, "yymmdd_hhmmss")
 
 'beállítjuk az összes élőfej és élőláb szövegét
 'természetesen amelyikre nincs szükség,
 'azt a sort törölheted vagy kommentezd ki
 With Sh
 .PageSetup.LeftHeader = "Élőfej BAL"
 .PageSetup.CenterHeader = "Élőfej KÖZÉP"
 .PageSetup.RightHeader = "Élőfej JOBB"
 .PageSetup.LeftFooter = "Élőláb BAL"
 .PageSetup.CenterFooter = "Élőláb KÖZÉP"
 .PageSetup.RightFooter = "Élőláb JOBB"
 End With
 
 'melyik élőfej vagy élőláb szövegét tartalmazza a munkalap neve
 'itt a példában a középső élőfejét
 MyStr = Sh.PageSetup.CenterHeader
 
 Sh.Name = MyStr & "_" & MyDate
 
 End Sub
- 
			
			  hódmaci senior tag Hogy volt az eredeti kód? 
 Mert ez abszolút nem működik így.
 Nem tudok új lapot nyitni.
 Egy lapom van nyitva aminek a neve "2021.01.01." Így próbálok új lapot nyitniEzt a sort hozza hibára sárga nyillal:Vastag aláhúzott Private Sub Workbook_NewSheet(ByVal Sh As Object)Dim MyDate As StringMyDate = Format(Now, "yyyy.mm.dd - hh:mm:ss")Sh.Name = MyDateEnd Subsh.Name = Mydate 
- 
			
			válasz  hódmaci
							
							
								#47930
							
							üzenetére hódmaci
							
							
								#47930
							
							üzenetéreKözben javítottam/módosítottam az előző hozzászólásom, mert ha a Date függvénnyel dolgoznánk, akkor az első munkalapot létrehozná a mai dátummal, de még egyet (ugyanazon a napon) már nem, mert 2 egyforma nevű munkalap nem lehet. "Esetleg megoldható még, hogy az előfej elő-láb mező mindig a lap neve legyen?" 
 Mármint mindkettő szerepeljen a munkalap nevében?
 Megoldható, csak a munkalap neve max. 31 karakter lehet, ha hosszú az előfej és élőláb + még az ilyen hosszú dátum- és időformátum, az úgy már nem minden esetben fog menni...
 A dátumidőt még össze lehet "tömöríteni", pl 211202110150 formátumba 2021. 12 .02. - 11:01:50 helyett...
- 
			
			  hódmaci senior tag válasz  Fire/SOUL/CD
							
							
								#47928
							
							üzenetére Fire/SOUL/CD
							
							
								#47928
							
							üzenetéreSzuper. Esetleg megoldható még, hogy az előfej elő-láb mező mindig a lap neve legyen? Vagy pl az A1 mező legyen midig a lap neve 
 Nem jó ha a =MA() függvényt használom mert akkor mindig az a dátum lesz ott amelyik napon megnyitom. (Azt hiszem.)Illetve, hogy az új lapon mindig az az adott mentett sablonom jelenjen meg. Elnézést ha sok vagyok.   
- 
			
			  lappy őstag válasz  hódmaci
							
							
								#47926
							
							üzenetére hódmaci
							
							
								#47926
							
							üzenetéreígy megoldható 
- 
			
			  hódmaci senior tag Sziasztok! Van olyan trükk amivel azt lehet beállítani, ha új lapot nyitok akkor az új lap neve ne az legyen hogy "Munka1" hanem a mai dátum. (ÉV.Hó.nap.) 
- 
			
			  Fferi50 Topikgazda válasz  eszgé100
							
							
								#47923
							
							üzenetére eszgé100
							
							
								#47923
							
							üzenetéreHa jól látom, akkor a manualcheck változód a ciklus során nem változik, illetve a manual "Yes" esetén True lesz. Ez ugye szűrésnél rendben is van, de ha nincs szűrés, akkor egyetlen kézi ellenőrzésre szoruló tábla is megakasztja az összes többi bezárását is. 
 Ha jól gondolom, akkor a szűrés nélküli állapotban meg kellene vizsgálni, hogy az adott fájlhoz tartozik-e olyan sor, amelyben kézimunka szüksége.
 Ezt a Countifs függvénnyel lehet megnézni szerintem, első feltétel a fájl neve a D oszlopon, második feltétel a yes a Manual Update oszlopon. Ha ez nem 0, akkor nem lehet a fájlt bezárni.
 Üdv.
- 
			
			  Fferi50 Topikgazda válasz  eszgé100
							
							
								#47923
							
							üzenetére eszgé100
							
							
								#47923
							
							üzenetéreSzia! 
 Szerintem először nézd meg a Manual Update értékét.If Not manualcheck Then
 Set scrange=ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter))
 If scrange.Row <= counter Then Excel.Workbooks(fileName).Close SaveChanges:=True
 End If
 Sőt, tulajdonképpen a keresési eredményt közvetlenül is lehet használni:If ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter)).Row <= counter Then Excel.Workbooks(fileName).Close SaveChanges:=True
 mivel legalább az adott sorban levő tételt meg fogja találni, tehát hibát nem okozhat a találat hiánya.
 Üdv.
- 
			
			  eszgé100 őstag válasz  Fferi50
							
							
								#47916
							
							üzenetére Fferi50
							
							
								#47916
							
							üzenetére1a.) megnyitott fájlok ellenőrzésének gondolata már piszkálta nekem is a fantáziám, de bevallom, lusta disznó voltam foglalkozni vele, pedig egy nem túl bonyolult IsFileOpen funkciót használva 9 másodperccel lett gyorsabb. 1b.) valószínűleg a későbbiekben sorszámozva leszek a sheetek, hogy a fizikai lokáció szerinti sorrendben legyenek kinyomtatva, így egy helyszínre csak egyszer kell ellátogatni anélkül, hogy időt pocsékolnék a papírok válogatásával, de ezt még nem találtam ki pontosan, hogy hogy legyen. 3a.) még tesztelnem és gugliznom kell, hogy tovább kommenteljem 
 3b.) Save & Close most ilyen lett:'time to save&close
 Set scrange = ws.UsedRange.Columns("D").SpecialCells(xlCellTypeVisible).Find(what:=sPath, after:=Range("D" & counter))
 
 If scrange.Row <= counter Then
 Excel.Workbooks(fileName).Close SaveChanges:=True
 
 ElseIf manualcheck = False & CStr(saveandclose) = "yes" Then Excel.Workbooks(fileName).Close SaveChanges:=True
 End Ifamivel annyi problémám van, hogyha így állítom be az értékeket, akkor bezáródik, hiába volt "yes" valamelyik cella a Manual Update oszlopban ha a manualcheck-et is beteszem az első feltételbe, akkor run time error-t kapok 
- 
			
			  Fferi50 Topikgazda válasz  Delila_1
							
							
								#47919
							
							üzenetére Delila_1
							
							
								#47919
							
							üzenetéreSzia! 
 Én nem a program leírás áttekinthetőségére gondoltam - persze az is nagyon fontos, hanem a folyamatra magára.
 Természetesen a bemásolt programok tabulálása is fontos, de sajnos a szerkesztő nem igazán támogatja ezt és igen, előfordul figyelmetlenség is.
 Ráadásul a Go To példád pont a hibakezeléssel kapcsolatos, amire én is azt írtam, hogy néha nem is oldható meg másként. 
 Mivel az utasításkészlet tartalmazza a Go To szerkezetet, programozási stílus függő is lehet az alkalmazása.
 Üdv.
- 
			
			  Delila_1 veterán válasz  Fferi50
							
							
								#47918
							
							üzenetére Fferi50
							
							
								#47918
							
							üzenetéreEz csak azt mutatja, hogy tabulálással jól lehet láttatni az összetartozó egységeket. Hibakezeléssel: If Range("A1") > 0 ThenGo To HibaElseRange("B1") = 20: Exit SubEnd IfHiba:MsgBox "..."On Error GoTo 0Egy rossz példa találomra erről a fórumról:Select Case CStr(freq)Case "4 weekly", "monthly"nyomtatni = TrueCase "2 monthly"nyomtatni = Month(nextmonth) Mod 2 = 1Case "3 monthly"nyomtatni = Month(nextmonth) Mod 3 = 1End Select
- 
			
			  Delila_1 veterán válasz  Fferi50
							
							
								#47916
							
							üzenetére Fferi50
							
							
								#47916
							
							üzenetéreSzerintem semmi gond a Go To utasítással. Az áttekinthetőséget a tabulátorok adják. Az ugrás címe mindig a 0 pozícióban van, az összes többi ettől jobbra. 
 Nagy időt a feltételek vizsgálata igényel ismereteim szerint.Az összetartozó részek is szépen látszanak egy normális tagolásnál. If Range("A1") > 0 ThenRange("B1") = 10ElseRange("B1") = 20End If
- 
			
			  Fferi50 Topikgazda válasz  eszgé100
							
							
								#47915
							
							üzenetére eszgé100
							
							
								#47915
							
							üzenetéreSzia! 
 1.)"a ciklus későbbi lépéseiben még szükség lesz rájuk, pl amikor egy workbookban van 20 worksheet, de nem egyszerre ömlesztve akarom őket kinyomtatni,"
 ugyanakkor a ciklusban minden sornál ott van a Workbooks.Open, anélkül, hogy megnéznéd, nincs-e már megnyitva az adott file.
 "mert utána akkor még kézzel is le kell válogatnom később"
 másrészt, ha egy következő file másik munkalapját nyomtatod utána, akkor nem kell kézzel leválogatni az előzőtől?
 2.a) szerintem alapvetően akkor van szükség GoTo utasításra, ha a makró/folyamat rosszul van megtervezve, megszervezve. Az ugrálás rontja az áttekinthetőséget és szerintem lassítja is a végrehajtást. Egy esetben látom indokoltnak, a futási hibák kezelésénél, ott ahol a hiba természete miatt külön hibakezelési rutinra van szükség az adott makrón belül. (Lásd: On Error Goto .. utasítás ).
 2.b) Mod funkció -> egy osztás maradék eredményét adja vissza. Nálad azért 1 a feltétel értéke, mert mindig az adott ciklus utáni első hónapban nyomtatod a munkafüzetet (vagy ha úgy jobban tetszik, a ciklus első hónapjában). 3 havonta esetén az 1,4,7,10 hónapban. De mondhatnád azt is, hogy a 3,6,9,12 hónapban akarod nyomtatni, akkor a 0 maradék lenne a feltétel. Tehát te döntöd el, melyik hónapban kezdődjön a nyomtatási ciklus és a maradékot annak megfelelően használod feltételnek. Ugyanez igaz a többi ciklikus feltételre is.
 3.a) Hibakezelésen tehát a felhasználói hibák vizsgálatát érted (amivel egyrészt megelőzheted fals adatok dokumentálását, másrészt program futási hibák keletkezését). Azt gondolom, erre az esetre érdemes egy külön függvényt írni, ami megizsgálja a kritikus összefüggéseket és logikai értéket ad vissza a vizsgálat eredményéről, amitől függően megy tovább a ciklus vagy elengedi azt a munkafüzetet/lapot.
 Érdemes ettől függően azon is gondolkodni, hogyan kezeljük a futás idejű hibákat, mivel nem szeretnénk, ha ezek miatt utólag kellene a felhasználókkal hibát javíttatni.
 3.b) Szűrés esetén a Darabteli függvény nincs tekintettel a szűrt állapotra valóban. Ebben az esetben a Save&close cella tartalma helyett meg kell nézned a szűrt területet makróval.
 A D oszlop szűrt tartományát a következőképpen kapod meg:ActiveSheet.UsedRange.Columns("D").SpecialCells (xlCellTypeVisible)
 A Find metódussal meghatározhatod a keresett érték helyét.Dim scrange As Range
 Majd a nyomtatás után:Set scrange=ActiveSheet.UsedRange.Columns("D").SpecialCells (xlCellTypeVisible).Find(what:=sPath,after:=Range("D" & counter))If scrange.Row<=counter then --- save & close
 Mivel nincs további találalat a szűrt tartományban, ezért az első találatra fog visszaugrani.
 Üdv.
- 
			
			  eszgé100 őstag válasz  Fferi50
							
							
								#47894
							
							üzenetére Fferi50
							
							
								#47894
							
							üzenetére1.) pontosan, ott nem kell bezárni a fájlt, mert még a ciklus későbbi lépéseiben még szükség lesz rájuk, pl amikor egy workbookban van 20 worksheet, de nem egyszerre ömlesztve akarom őket kinyomtatni, mert utána akkor még kézzel is le kell válogatnom később, amit nem szeretnék. A Save&Close oszlop celláinak értéke az =IF(COUNTIF(D2:INDIRECT("D" & COUNTIF(D  ,"<>")),D2)>1,"no","yes") függvénnyel van meghatározva, ami eddigi tesztjeim alapján dinamikusan változik, amikor ugyanaz az elérési útvonal kerül a Path oszlop celláiba. Amennyiben az adott elérési útvonal nem ismétlődik többet a maradék cellatartományban az érték Save&Close "yes"-re változik és a workbook ment és bezárul ,"<>")),D2)>1,"no","yes") függvénnyel van meghatározva, ami eddigi tesztjeim alapján dinamikusan változik, amikor ugyanaz az elérési útvonal kerül a Path oszlop celláiba. Amennyiben az adott elérési útvonal nem ismétlődik többet a maradék cellatartományban az érték Save&Close "yes"-re változik és a workbook ment és bezárul2a.) mi pontosan a hátránya, hogyha GoTo-val ugrálok? 
 2b.) Másik ezzel kapcsolatban, hogy a Mod funkció működését nem teljesen értem, legalábbis az én esetemben. Pl ha "6 monthly"-t keresem, akkor azokat a hónapokat keresem, amelyeket 6-al oszthatóak maradék 1-el? Ez január és július esetében (1/6= 0 maradék 1) és (7/6=1 maradék 1), "yearly" pedig (1/12=0 maradék 1)?
 2c.) címkéket megszűntettem if - end if-eket használva3.) hibakezelés, pl valami létfontosságú cella nincs kitöltve. Szűrést pedig úgy értem, hogy kézzel leszűröm az adatokat, majd arra eresztem rá a makrót, hiba a Save&Close-nál van, mert olyankor is a maradék tartományt figyeli, mikor az egyébként a szűrés miatt nem látszik. + A kódhoz hozzáadtam egy response-t, ami a user arcába tolja, hogy a makró milyen nyomtatókat fog használni, mindkettőt le kell okézni, csak így kerül az ellenörző cellába, ahonnan a makró majd használja. Ha valamelyik cella üres, akkor a kód megáll, és informálja a usert. Ezen kívül még hozzáadtam egy manual update oszlopot is az adattáblán, alapból ki van kapcsolva, de ha "yes" az értéke, akkor csak megnyitja a workbookot, majd megy tovább a ciklus, valamint egy néhány sort, hogy szűrést és manual update-et alaphelyzetbe állítsa miután a fájl megnyílik. így néznek ki: Sub Auto_Open()
 
 Dim start As Date
 Dim weekcom As Date
 Dim today As Date
 Dim response As VbMsgBoxResult
 
 Dim lo As ListObject
 Dim ws As Worksheet, ma As Worksheet
 Dim lastrow As Long
 
 
 Set lo = Worksheets("OpenClose").ListObjects(1)
 lo.AutoFilter.ShowAllData
 
 Set ma = Workbooks("FillerPrinter.xlsm").Worksheets("MainAssembly")
 'ma.Unprotect "123"
 
 Set ws = Workbooks("FillerPrinter.xlsm").Worksheets("OpenClose")
 lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
 ws.Range("P2:P" & lastrow) = "no"
 
 
 
 Worksheets("MainAssembly").Activate
 Range("A1").Select
 
 start = Sheets("MainAssembly").Range("F3").Value
 today = Sheets("MainAssembly").Range("F7").Value
 weekcom = start
 Do While weekcom < today
 weekcom = weekcom + 28
 Loop
 Sheets("MainAssembly").Range("F6").Value = weekcom
 
 Dim Printers() As String
 Dim N As Long
 Dim S As String
 Dim col As String
 Dim bw As String
 
 Printers = GetPrinterFullNames()
 
 Sheets("MainAssembly").Range("F8:F9").Value = ""
 
 For N = LBound(Printers) To UBound(Printers)
 S = Printers(N) 'S & Printers(N) & vbNewLine
 If InStr(S, "Microsoft") <> 0 And InStr(S, "Print") <> 0 Then col = S
 If InStr(S, "HP Photosmart Wireless B109n-z") <> 0 And InStr(S, "Print") = 0 Then bw = S
 Next N
 
 response = MsgBox(col, vbOKCancel, "Confirm the Colour Printer")
 If response = vbOK Then
 Sheets("MainAssembly").Range("F8").Value = col
 Else: MsgBox "Stop-Call-Wait", vbOKOnly
 Exit Sub
 End If
 
 response = MsgBox(bw, vbOKCancel, "Confirm the B&W Printer")
 If response = vbOK Then
 Sheets("MainAssembly").Range("F9").Value = bw
 Else: MsgBox "Stop-Call-Wait", vbOKOnly
 Exit Sub
 End If
 'ma.Protect "123"
 End SubSub EOM_Main_Assy_Workbooks()
 
 'loop:
 Dim sPath As String, ssheet As String, fileName As String
 Dim lastrow As Long, counter As Long
 Dim ws As Worksheet, tp As Worksheet, ma As Worksheet
 'print:
 Dim bw As String, col As String
 Dim toprint As Boolean
 'from main worksheet:
 Dim sDate As String
 Dim sWeek As String
 Dim sWkcom As String
 Dim nextmonth As Date
 'from Table:
 Dim freq As String
 Dim area As String
 Dim loc As String
 Dim dat As String
 Dim week As String
 Dim wkcom As String
 Dim procloc As String
 Dim procname As String
 Dim machloc As String
 Dim machname As String
 Dim printer As String
 Dim copies As Integer
 Dim saveandclose As String
 Dim manual As String
 Dim manualcheck As Boolean
 
 sDate = "=[FillerPrinter.xlsm]MainAssembly!$F$4"
 sWeek = "=[FillerPrinter.xlsm]MainAssembly!$F$5"
 sWkcom = "=[FillerPrinter.xlsm]MainAssembly!$F$6"
 
 Set ma = Workbooks("FillerPrinter.xlsm").Worksheets("MainAssembly")
 
 nextmonth = ma.Range("F4")
 col = ma.Range("F9")
 bw = ma.Range("F9")
 '1st condition
 If ma.Range("F8") = "" Or ma.Range("F9") = "" Then
 MsgBox prompt:="One or both printers are not selected." & VBA.Constants.vbNewLine & "Please click on Update / Reset button!" & VBA.Constants.vbNewLine & "If not sure, please S-C-W!"
 Exit Sub
 End If
 'End of 1st condition
 Set ws = Workbooks("FillerPrinter.xlsm").Worksheets("OpenClose")
 
 lastrow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
 counter = 2
 manualcheck = False
 
 Do While counter <= lastrow
 
 '2nd condition
 If Not ws.Range("A" & counter).EntireRow.Hidden Then
 
 freq = ws.Range("A" & counter)
 area = ws.Range("B" & counter)
 loc = ws.Range("C" & counter)
 sPath = ws.Range("D" & counter)
 ssheet = ws.Range("E" & counter)
 dat = ws.Range("F" & counter)
 week = ws.Range("G" & counter)
 wkcom = ws.Range("H" & counter)
 procloc = ws.Range("I" & counter)
 procname = ws.Range("J" & counter)
 machloc = ws.Range("K" & counter)
 machname = ws.Range("L" & counter)
 printer = ws.Range("M" & counter)
 copies = ws.Range("N" & counter)
 saveandclose = ws.Range("O" & counter)
 manual = ws.Range("P" & counter)
 
 'freq check
 
 Select Case CStr(freq)
 Case "4 weekly", "monthly"
 toprint = True
 Case "2 monthly"
 toprint = Month(nextmonth) Mod 2 = 1
 Case "3 monthly"
 toprint = Month(nextmonth) Mod 3 = 1
 Case "6 monthly"
 toprint = Month(nextmonth) Mod 6 = 1
 Case "yearly"
 toprint = Month(nextmonth) Mod 12 = 1
 End Select
 
 'open sheets
 '3rd condition
 If toprint Then
 Application.ScreenUpdating = True
 ma.Visible = True
 
 fileName = Right(sPath, Len(sPath) - InStrRev(sPath, "\"))
 Application.StatusBar = "Processing File: " & fileName
 Application.ScreenUpdating = False
 
 Workbooks.Open sPath
 Windows(fileName).Visible = False
 
 '4th condition
 If CStr(manual) = "no" Then
 
 'update sheets if necessary
 If CStr(dat) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(dat).Formula = sDate
 If CStr(week) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(week).Formula = sWeek
 If CStr(wkcom) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(wkcom).Formula = sWkcom
 If CStr(procloc) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(procloc).Formula = procname
 If CStr(machloc) <> "" Then Workbooks(fileName).Sheets(ssheet).Range(machloc).Formula = machname
 
 
 'print sheets
 Set tp = Workbooks(fileName).Worksheets(CStr(ssheet))
 
 Select Case CStr(printer)
 Case "col"
 Application.ActivePrinter = col
 tp.PrintOut copies:=CStr(copies)
 Case "bw"
 Application.ActivePrinter = bw
 tp.PrintOut copies:=CStr(copies)
 Case Else
 MsgBox "No printer selected"
 End Select
 
 'wait here a bit
 
 Do While ActiveWindow.View = xlPrint
 Loop
 
 'time to save&close
 If CStr(saveandclose) = "yes" Then Excel.Workbooks(fileName).Close SaveChanges:=True
 
 
 
 Else:
 'Windows(fileName).Visible = True
 manualcheck = True
 
 'End of 4th condition
 End If
 
 'End of 3rd condition
 End If
 
 'End of 2nd condition
 End If
 counter = counter + 1
 Loop
 Application.StatusBar = "Done!"
 Application.ScreenUpdating = True
 ma.Activate
 Range("A1").Select
 If manualcheck = True Then
 MsgBox "Update and print the sheets manually"
 Else: MsgBox "Done!"
 End If
 
 End Sub
- 
			
			válasz  Fire/SOUL/CD
							
							
								#47913
							
							üzenetére Fire/SOUL/CD
							
							
								#47913
							
							üzenetéreKöszönöm, ez így megfelelő lesz nekem! 
- 
			
			válasz  NdrewSunix
							
							
								#47912
							
							üzenetére NdrewSunix
							
							
								#47912
							
							üzenetéreJa, hogy ja... Megszámolod, hogy az adott tartományban hány cella tartalmaz #HIÁNYZIK hibát, nyilván ha 0, akkor nincs egy sem a tartományban, ha meg nagyobb mint 0, akkor meg van. =HA(DARABTELI(B1:B5;HIÁNYZIK());"Van hiba";"Nincs hiba")
- 
			
			Ez magyarul hogy néz ki? =MIN(IF(ISERROR(A1:Z100),ROW(A1:A100))) #47911Fire/SOUL/CDNdrewSunix 
 Nekem úgy kellene igazából, hogy egy cellába írja be, hogy talált #HIÁNYZIK eredményt egy adott tartományban.
 Ennél a hahiányziknál az összes cellát eredményül adta egy újabb óriási táblázatban.
- 
			
			válasz  NdrewSunix
							
							
								#47909
							
							üzenetére NdrewSunix
							
							
								#47909
							
							üzenetéreHAHIÁNYZIK függvény. 
- 
			
			  lappy őstag válasz  NdrewSunix
							
							
								#47909
							
							üzenetére NdrewSunix
							
							
								#47909
							
							üzenetére
- 
			
			Hello srácok! Van nekem egy szép nagy táblázatom, sok oszloppal és sorral, benne sok képlettel. 
 Milyen módon tudnám egyszerűbben ellenőrizni, hogy valamely oszlopban van-e esetleg #HIÁNYZIK képlethiba, a szűrős egyesével lenyitogatós és legalulra tekergetés helyett?Köszi előre is a segítséget! 
- 
			
			
- 
			
			  Fferi50 Topikgazda válasz  Fire/SOUL/CD
							
							
								#47905
							
							üzenetére Fire/SOUL/CD
							
							
								#47905
							
							üzenetéreSzia! 
 Lehet, hogy félreértettem valamit.
 Volt egy ilyen mondatod: A modulban deklarált ugyanilyen nevű változó, csak a modulban található kódok számára látható.
 Üdv.
- 
			
			válasz  Fferi50
							
							
								#47903
							
							üzenetére Fferi50
							
							
								#47903
							
							üzenetéreAmit itt a képeden bemutatsz, azt raktam ki én is képben (Public deklaráció (meg még mást is))... Persze, hogy úgy már lehet vele dolgozni bárhonnan  "Téves az az információd, hogy a modul elején publikusnak definiált változót csak az a modul tudja használni, amelyben definiálták. Mivel publikus,... " Ööö a MyGlobalVariable_2 az Private deklaráció(tehát NEM Publikus, szvsz ezen átsiklottál  ), ergó sem más modulból, sem woorksheet kódból nem lehet elérni, csak abból a modulból, ahol deklarálva van (Én erről írtam, azt, amit, nem a publikus változóról)... ), ergó sem más modulból, sem woorksheet kódból nem lehet elérni, csak abból a modulból, ahol deklarálva van (Én erről írtam, azt, amit, nem a publikus változóról)... 
 Modulnév.változónév formában sem (szerkesztő el fogja fogadni, engedi beírni, nem nyaffog miatta, de ha futtatni próbálod a makrót, akkor jön a hiba
- 
			
			  Fferi50 Topikgazda válasz  Fire/SOUL/CD
							
							
								#47901
							
							üzenetére Fire/SOUL/CD
							
							
								#47901
							
							üzenetéreSzia! 
 Téves az az információd, hogy a modul elején publikusnak definiált változót csak az a modul tudja használni, amelyben definiálták. Mivel publikus, így valamennyi eljárás hozzá tud férni, ehhez meg kell adni a teljes nevét, ami Modulnév.Változónév forma és így bármilyen másik modul is tudja használni, sőt a globális modulok, amelyek nem egy-egy objektumhoz (munkalap, userform stb.) kapcsolódnak, a Modulnév nélküli változót is tudják használni.
 Amire te gondolsz az a modul elején DIM utasítással létrehozott modulszintű változó. Az valóban csak az adott modulban használható.
 Üdv.
- 
			
			  Fferi50 Topikgazda válasz  Fire/SOUL/CD
							
							
								#47901
							
							üzenetére Fire/SOUL/CD
							
							
								#47901
							
							üzenetéreSzia! 
 Megfelelő kódfelépítéssel igen, de nem kifejezetten ajánlatos. A példát látod a képen:
   
 Itt egy modulban van a függvény és a főprogram.
 Ahhoz, hogy egy függvényben számolt változó értéket kapjon, a változót publikusnak kell definálni a modul elején, eljáráson kívül, majd meg kell hívni hozzá a függvényt, ezt látod a sárgával jelölt sorban.
 Üdv.
Új hozzászólás Aktív témák
- HIBÁTLAN iPhone 12 Pro 512GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS3684, 100% Akkumulátor
- HP ProBook 440 G5 i3-7100 laptop
- Telefon felvásárlás!! Honor 90 Lite/Honor 90/Honor Magic5 Lite/Honor Magic6 Lite/Honor Magic5 Pro
- Bomba ár! Dell Latitude E7440 - i5-4GEN I 8GB I 500GB I 14" HD I HDMI I Cam I W10 I Gari!
- Veszünk: PS5 Fat/Slim/Digital/Pro konzolt, játékokat, Portalt stb. Kérj ajánlatot!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
 
						 
								 
							 
								 
								
 
							 
								 
								 
								 
							 
  
							 
								 
							 
							 
								 
  
							
 
								 
							 
							
 
								 
  
							
 
								 
							 
								 
							 
								 
								 
							 
								 
							
 
  
							 
								
 
								![;]](http://cdn.rios.hu/dl/s/v1.gif)
 
							 
  Az alábbi kód ezt teszi.
 Az alábbi kód ezt teszi. 
 
 
								 
							 
								


