- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Samsung Galaxy S25 - végre van kicsi!
- Samsung Galaxy S21 FE 5G - utóirat
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Samsung Galaxy A56 - megbízható középszerűség
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- Samsung Galaxy A55 - új év, régi stratégia
- Samsung Galaxy A54 - türelemjáték
- iPhone topik
- One mobilszolgáltatások
-
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
-
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
-
Paxker315
veterán
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
-
Paxker315
veterán
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
A 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
Ez 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
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lapnev As String
If Target.Address = "$B$3" Then
Application.EnableEvents = False
lapnev = "Állandó " & Range("L1")
Sheets(lapnev).Name = "Állandó " & Range("B3")
Range("L1") = Range("B3")
Application.EnableEvents = True
End If
End Sub
Első 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
Szia!
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
Ööö, ehhez nem kell makró, mert ez 10 másodperces munka max...
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
Jobb 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
Bocs, 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.
'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 String
MyDate = Format(Now, "yyyy.mm.dd - hh:mm:ss")
Sh.Name = MyDate
End Sub
sh.Name = Mydate
-
válasz
hódmaci #47930 üzenetére
Kö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
Szuper.
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
í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
Ha 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
Szia!
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
1a.) 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
Szia!
É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
Ez csak azt mutatja, hogy tabulálással jól lehet láttatni az összetartozó egységeket. Hibakezeléssel:
If Range("A1") > 0 Then
Go To Hiba
Else
Range("B1") = 20: Exit Sub
End If
Hiba:
MsgBox "..."
On Error GoTo 0
Egy rossz példa találomra erről a fórumról:
Select Case CStr(freq)
Case "4 weekly", "monthly"
nyomtatni = True
Case "2 monthly"
nyomtatni = Month(nextmonth) Mod 2 = 1
Case "3 monthly"
nyomtatni = Month(nextmonth) Mod 3 = 1
End Select
-
Delila_1
veterán
válasz
Fferi50 #47916 üzenetére
Szerintem 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 Then
Range("B1") = 10
Else
Range("B1") = 20
End If
-
Fferi50
Topikgazda
válasz
eszgé100 #47915 üzenetére
Szia!
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
1.) 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
2a.) 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
Köszönöm, ez így megfelelő lesz nekem!
-
válasz
NdrewSunix #47912 üzenetére
Ja, 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
HAHIÁNYZIK függvény.
-
lappy
őstag
válasz
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
Szia!
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
Amit 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)...
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
Szia!
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
Szia!
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
Hirdetés
- Autós topik
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Azonnali fotós kérdések órája
- 3D nyomtatás
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Asustor NAS
- Intel Dual Core 2000 felhasználók barátságos offolós topikja
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- További aktív témák...
- Eladó steam/ubisoft/EA/stb. kulcsok Bank/Revolut/Wise (EUR, USD, crypto OK)
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Vírusirtó, Antivirus, VPN kulcsok
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- A Panasonic Toughbook CF-54 i5-5300u i5-6300u TN, IPS touch Budapest, MPL Foxpost
- Samsung Galaxy A16 128GB Kártyafüggetlen, 1Év Garanciával
- REFURBISHED és ÚJ - HP Thunderbolt Dock G2 230W docking station (3TR87AA)
- KÖZEL FÉLÁR! Apple Magic Keyboard, Mouse, Trackpad, Pencil, Smart Magic Keyboard Folio, Watch szíjak
- Samsung Galaxy S10+ 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest