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.
A CriteriaRange "táblázatot" függvényekkel töltöm fel, különböző szabályok szerint, többnyire egybeágyazott HA + ÉS/VAGY függvényekkel.
Ha beadok minden adatot, akkor mondjuk kijön az alábbi táblázat, mint CriteriaRange = A1:H6
Ahol "X"-ek vannak, ott a függvény eredménye X, mivel nincs feltétele a szűrésnek. Jelen példa szerint az összes adatot, ami Típus = B és oszlop7=15 kellene, h kilistázza eredményül. De vmiért semmit nem hoz eredményül.
Nem tudom miért nem :-(
(az X nem szerepel az adathalmazban, mint érték, azért rakatom be a függvényekkel, hogy azokra a sorokra ne keressen rá)
Évek óta használom az excelt a parancssor meghívására. Viszont most beleütköztem abba a problémába, hogy olyan parancsot szerettem volna futtatni amihez rendszergadaként kell futtatni a parancssort.
Kis kutatómunkával találtam rá megoldást. Ha esetleg másnak is szüksége lenne rá, akkor itt van a kód.
Private Sub RunAsAdmin(ByVal parancs As String) Dim oShell As Object Set oShell = CreateObject("Shell.Application") oShell.ShellExecute "cmd.exe", "/k " & parancs, , "runas", 1 End Sub
A munkám folyamán sokszor kell IP címet módosítanom, amit eddig kézzel oldottam meg, de meguntam, így írtam rá excelben makrót :) Egy listából kiválasztom a megfelelő paramétert és a makró teszi is a dolgát.
A references részen nálam 4 dolog van bekapcsolva:
-visual basic for applications
-Microsoft Excel 16.0 object library
-OLE Automation
-Microsoft Office 16.0 object library
Ha jól emlékszem, akkor az object library-ket most kapcsoltam be hozzá, de nem vennék már rá mérget.
Az érvényesítés beállításakor a hibajelzés lapon kiveszed a pipát. Ekkor kiválasztod a listából a neked megfelelő sablont, majd utána módosítod, ahogy akarod.
Sziasztok! Lassan időpontot foglalhatok a hülye kérdések minisztériumába (Monty Python után szabadon). A mostani agymenésem az, hogyan lehetne valami prediktív szövegbevitel szerűséget létrehozni az excelben. Arra gondolok, hogy adatérvényesítés jelleggel egy legördülő listából ki tudnám választani egy cella szövegének általános tartalmát, de utána hibaüzenet nélkül módosítani tudjam a szöveget. Nyilván ilyenkor az adatérvényesítés hibát jelez.
Ezt csak úgy itt hagyom, a köz okulására. Az Excel 2021 fantasztikus, többszálú feldolgozása (igen, be van kapcsolva az összes mag). Ez egy 10 magos, 20 szálon dolgozó 10900KF és 64GB RAM. Az Excel képes 2 magon és 4 szálon futni, azon is csak hézagosan. Ha én lennék a Microsoft, az Excel rég a grafikus procin (3080Ti) futna, meg az összes CPU magon.
Sajnos nem segít. Valóban üres volt még a projekt, de hiába írtam bele, nem tudom lezárni betekintés elől. Még annyit, hogy találtam egy régi fájlt, amiről azt írta az Excel hogy megbízhatatlan és csak akkor nyissam meg, ha..., mivel a fájlnévből egyértelmű, hogy az enyém volt, megnyitottam, de a projektbe nem tudok belenézni. Rá se kérdez a jelszóra, csak kiírja, hogy "project is unviewable".
Jómagam WIN10-et és Excel2021-et használok. Nem bírtam reprodukálni a hibát.
Egy esetben nem állított be jelszót, ha teljesen üres volt a VBA project. De amint írtam bele valamit, akkor már be tudtam állítani rá jelszavas védelmet.
Sub FormatDate(cell As Range, diff As Long) Debug.Print "Színezés - diff: " & diff If diff = 0 Then cell.Interior.Color = RGB(0, 0, 255) ' Kék - pontos egyezés Debug.Print "Kék: " & cell.Address ElseIf diff > 0 Then cell.Interior.Color = RGB(255, 0, 0) ' Piros - már lejárt Debug.Print "Piros: " & cell.Address ElseIf diff >= -30 Then cell.Interior.Color = RGB(255, 255, 0) ' Sárga - 30 napon belül Debug.Print "Sárga: " & cell.Address Else cell.Interior.Color = RGB(0, 255, 0) ' Zöld - 30 napon túl a jövőben Debug.Print "Zöld: " & cell.Address End If End Sub
A kérdést sem tudom feltenni:( De nem működik a színezés:( A lényeg ogy évváltás szökőév stb figyelembevételével valami miatt nam az igazi.
A lejárt dátum piros
ami hamarosan lejár sárga (ez esetben 30 napos intervallum)
aznapi kék;
ami meg több mint 30 napig érvényes legyen zöld:) Aktuális dátumhoz viszonyítva
Köszönöm!
Sub LejaroEllenorzes() Dim wsTotal As Worksheet Dim wsLejaro As Worksheet Dim lastRowTotal As Long Dim lastRowLejaro As Long Dim i As Long Dim currentDate As Date Dim cellValue As String Dim diffK As Long, diffL As Long, diffO As Long, diffR As Long Dim találatCount As Long Dim dateK As Date, dateL As Date, dateO As Date, dateR As Date
' Munkalapok beállítása Set wsTotal = ThisWorkbook.Sheets("Total") Set wsLejaro = ThisWorkbook.Sheets("Lejárat")
' Az aktuális dátum meghatározása currentDate = Date
' Lejárat munkalap törlése a korábbi adatok eltávolításához wsLejaro.Cells.Clear
' Az oszlopfejlécek másolása a Total munkalapról a Lejárat munkalapra wsLejaro.Cells(1, 1).value = "Név" wsLejaro.Cells(1, 2).value = "Szül. dátum" wsLejaro.Cells(1, 3).value = "EBK alap" wsLejaro.Cells(1, 4).value = "EBK MIR" wsLejaro.Cells(1, 5).value = "Orvosi érvényes" wsLejaro.Cells(1, 6).value = "Poliol spec. oktatás érv."
' A Total munkalapon az utolsó sor meghatározása lastRowTotal = wsTotal.Cells(wsTotal.Rows.Count, "Y").End(xlUp).row Debug.Print "Utolsó kitöltött sor az Y oszlopban: " & lastRowTotal
' Az Lejárat munkalapon az első üres sor meghatározása lastRowLejaro = 2 ' Az adatok a második sortól kezdődnek
' Találatok számlálója találatCount = 0
' A Total munkalapon végigiterálunk For i = 2 To lastRowTotal ' Ellenőrizni, hogy az Y oszlop "aktív" vagy "inaktív" cellValue = wsTotal.Cells(i, "Y").value Debug.Print "Row " & i & ", Y oszlop értéke: " & cellValue
If cellValue = "Aktív" Then ' Ellenőrizni, hogy a dátumok valódi dátumok és nem üresek If IsDate(wsTotal.Cells(i, "K").value) And wsTotal.Cells(i, "K").value <> "" Then dateK = DateValue(wsTotal.Cells(i, "K").value) diffK = DateDiff("d", dateK, currentDate) Debug.Print "K oszlop dátuma: " & dateK & ", diffK: " & diffK Else diffK = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "K oszlop érvénytelen dátum" End If
If IsDate(wsTotal.Cells(i, "L").value) And wsTotal.Cells(i, "L").value <> "" Then dateL = DateValue(wsTotal.Cells(i, "L").value) diffL = DateDiff("d", dateL, currentDate) Debug.Print "L oszlop dátuma: " & dateL & ", diffL: " & diffL Else diffL = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "L oszlop érvénytelen dátum" End If
If IsDate(wsTotal.Cells(i, "O").value) And wsTotal.Cells(i, "O").value <> "" Then dateO = DateValue(wsTotal.Cells(i, "O").value) diffO = DateDiff("d", dateO, currentDate) Debug.Print "O oszlop dátuma: " & dateO & ", diffO: " & diffO Else diffO = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "O oszlop érvénytelen dátum" End If
If IsDate(wsTotal.Cells(i, "R").value) And wsTotal.Cells(i, "R").value <> "" Then dateR = DateValue(wsTotal.Cells(i, "R").value) diffR = DateDiff("d", dateR, currentDate) Debug.Print "R oszlop dátuma: " & dateR & ", diffR: " & diffR Else diffR = -9999 ' Ha nincs érvényes dátum, beállítunk egy nem létező eltérést Debug.Print "R oszlop érvénytelen dátum" End If
' Ha bármelyik dátum 30 napon belül van, vagy már lejárt és 30 napon belül volt If (diffK >= -30 And diffK <= 30) Or (diffL >= -30 And diffL <= 30) Or (diffO >= -30 And diffO <= 30) Or (diffR >= -30 And diffR <= 30) Then ' A találatokat átmásolni a Lejárat munkalapra wsLejaro.Cells(lastRowLejaro, "A").value = wsTotal.Cells(i, "A").value ' Név wsLejaro.Cells(lastRowLejaro, "B").value = wsTotal.Cells(i, "E").value ' Szül. dátum wsLejaro.Cells(lastRowLejaro, "C").value = wsTotal.Cells(i, "K").value ' EBK alap wsLejaro.Cells(lastRowLejaro, "D").value = wsTotal.Cells(i, "L").value ' EBK MIR wsLejaro.Cells(lastRowLejaro, "E").value = wsTotal.Cells(i, "O").value ' Orvosi érvényes wsLejaro.Cells(lastRowLejaro, "F").value = wsTotal.Cells(i, "R").value ' Poliol spec. oktatás érv.
' Dátumok formázása színnel Call FormatDate(wsLejaro.Cells(lastRowLejaro, 3), diffK) ' 3 = C oszlop Call FormatDate(wsLejaro.Cells(lastRowLejaro, 4), diffL) ' 4 = D oszlop Call FormatDate(wsLejaro.Cells(lastRowLejaro, 5), diffO) ' 5 = E oszlop Call FormatDate(wsLejaro.Cells(lastRowLejaro, 6), diffR) ' 6 = F oszlop
' Sorok növelése a következő találatra lastRowLejaro = lastRowLejaro + 1 találatCount = találatCount + 1 End If End If Next i
' Ellenőrizzük, hogy van-e találat If találatCount = 0 Then MsgBox "Nincs találat!" Debug.Print "Nincs találat!" Else MsgBox találatCount & " találat van." Debug.Print találatCount & " találat van." End If
' Oszlopok szélességének beállítása a Lejárat munkalapon wsLejaro.Columns("A:F").AutoFit End Sub
Sub FormatDate(cell As Range, diff As Long) Debug.Print "Színezés - diff: " & diff If diff = 0 Then cell.Interior.Color = RGB(0, 0, 255) ' Kék - pontos egyezés Debug.Print "Kék: " & cell.address ElseIf diff < 0 Then cell.Interior.Color = RGB(255, 0, 0) ' Piros - már lejárt Debug.Print "Piros: " & cell.address ElseIf diff <= 30 Then cell.Interior.Color = RGB(255, 255, 0) ' Sárga - 30 napon belül Debug.Print "Sárga: " & cell.address Else cell.Interior.Color = RGB(0, 255, 0) ' Zöld - 30 napon túl a jövőben Debug.Print "Zöld: " & cell.address End If End Sub
Sajnos csak makróval megy a módosítás, mert csak úgy lehet összekötni a változásokat.
A munkalap kódlapjára másold be ezt:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 11 And Target.Column = 1 Then Target.Offset(0, 1).Value = Application.Names(Target.Value).RefersToRange.Cells(1) End If If Target.Row = 11 And Target.Column = 2 Then Target.Offset(0, 1).Value = Application.Names(Target.Value).RefersToRange.Cells(1) End If End Sub
(Lapfülön jobb egérgomb - kód megjelenítése)
Ezután engedélyezned kell a makrók futtatását és makróbarátként kell mentened a fájlt.
Többszintű lista adatérvényesítésével kapcsolatban van kérdésem. Megoldható-e, ha egy magasabb szintű listaelemet módosítok, hogy az alacsonyabb rendűek törlődjenek? Na ez még nekem sem érthető... Inkább egy példa. Csináltam egy példa táblázatot. Első nekifutásra kiválasztottam a "Gyümölcs"-"Körte"-"Vilmos" adatsort. Eddig OK. Ám ha a legfelső szinten a Gyümölcsöt Zöldségre változtatom, a kiválasztás többi eleme (Körte-Vilmos) változatlan marad ami nyilván nem jó. Mit lehet tenni ez ellen?
Nem szeretném most arra terelni az eszmecserét, hogy mi lesz akkor, ha elmész/elküldenek a cégtől. Nélkülözhetetlen/pótolhatatlan ember nincs. :(
A védelemről:
Az Excel védelme alapvetően a felhasználók "véletlen" módosításainak megakadályozását szolgálja, elég szofisztikált módon, de nem megkerülhetetlenül/feltörhetetlenül.
A makrókat is lehet védeni a VBA nézet Tools - VBA project Properties - Protection fülön jelszóval is. De ez sem feltörhetetlen.
Ezért biztosabb az, ha magát a fájlt olyan környezetbe helyezzük, ahol a hozzáféréseket, láthatóságot vagyis a külső védelmet lehet erős eszközökkel megoldani, amire minden rendszerben, így MS-nél is megvannak a szabványos lehetőségek.
Nem küldözgetjük a fájlt, csak a végeredményt, pl. PDF formátumban mentve.
Lehet azt tenni, hogy az adatokat, amire szüksége van, külön fájlban tartjuk és csak a szükséges értékeket kérdezzük le a feldolgozáshoz. Sőt azt is lehet, hogy ez a feldolgozás is külön fájlban van. Az első fájl csak arra szolgál, hogy a hozzáférést ellenőrizzük és elindítsuk a másik /akár rejtett/, érdemi részt tartalmazó munkafüzetet.
Ez egyrészt így van! A fórum segítsége nélkül, olyan formában, ahogyan kérik tőlem, nem tudtam volna mindezt összerakni, hiszen hiányzó láncszemek voltak a folyamatban, amiket a fórumozók oldottak meg. Ezért baromi nagy köszönet Nekik!
Másrészt, ha nagyon le akarjuk sarkosítani a dolgot, akkor kellett hozzá az excel, ami a Microsoft szellemi terméke, szóval az érdem az övé, ha így nézzük. Persze ahhoz meg kellett egy gép, amin futnak a Microsoft termékek és a gép sem úgy született, hogy valaki egyik este lefeküdt, majd másnap meg felébredt és összerakott egy komplett, használható számítógépet, hanem több száz ezer ember folyamatos ötletei, fejlesztése, „szellemi termékének” a végeredménye. + a rengeteg youtubos video és feltöltőjük, amiket átnéztem, mert ha kicsi is az excel tudásom, én sem úgy születtem meg, hogy ez már a rendelkezésemre állt és bizony ők is segítettek benne az évek alatt…
Persze kellett hozzá egy keresőmotor is az interneten, hogy te is és én is rátaláljak a fórumra, az is szellemi termék. Meg persze az idex.hu is, ahol én is és te is együtt használva más szellemi termékét, tudunk most beszélgetni egymással.
Alapvetően a levédés nem az enyém, hanem az ő ötletük volt. Itt nyílván elsősorban ők féltik a céges adatokat. Szóval, ha nekik ez a megoldás jó, akkor nekem mindegy igazából.
"(béremelés, egyszeri jogdíj...stb.)" Ez sajnos nálunk nem kivitelezhető. Nagyon le vagyunk még maradva vállalati kultúrában a németektől / USA-tól. Ilyenért itt nem adnak nekem jogdíjat.... :(
egyelőre csak a cégen belüli pozíciómat tudom növelni vele, ami összefügg a fentiekkel is, hogy mi lesz akkor ha elmegyek.
Én örülök, hogy alapvetően olyan szituban vagyok most kicsit, hogy nekik van most rám szükségük elsősorban.
Ez egy kb 25-30 lépcsőből álló adathalmaz rendezés, átalakítás, műveletek elvégzése rajta, szűrés stb, ahol a lépések értelem szerűen egymásra épülnek és a sorrend nem változtatható. - Ez az, amit én raktam össze. És igazából maga az ötlet is tőlem származott, mert annyira ismertem az excelt, hogy átlássam, ezt vele meg lehetne csinálni. Ez az, amit viszont én nem feltétlenül szeretnék, hogy mások átlássanak és rajtam kívül más is össze tudja rakni, itt megint visszacsatolva a cégen belüli értékemre.
Alapvetően én örülök neki, hogy tudok segíteni a cégnek, ahol dolgozom, ahonnan a megélhetésem jön. Azzal, hogy ezt lehetőleg le kell védeni, nekem is azonosulnom kell, hiszen én ilyenkor mindig mint alkalmazott szerepelek, nem pedig mint egy külső szoftverfejlesztő mondjuk és követnem kell a vezetőség kérését.
Szia! Csak egy kérdésem van: Főnökeid mit szólnának ahhoz, ha bejelentenéd, hogy holnaptól nem dolgozol a cégnél, aminek következtében a szuperül kidolgozott, titokban tartott remek excel tábládat nem tudnák tovább használni? HIszen senki sem ismerheti, hogyan és milyen logikával működik.
Szerintem nem jó úton indultál el. Tárgyald meg a vezetőiddel, hogy az általad/általatok kifejlesztett rendszert milyen feltételekkel használhatja a cég - tudod létezik a szellemi termék tulajdon és annak védelme, ezért milyen juttatás (béremelés, egyszeri jogdíj...stb.) jár neked ezért.
Egyébként a munkafüzetbe építhetsz be jogosultságokat, ami alapján eldöntheti a makró, ki mire jogosult.
Az összes adatot tartalmazó munkalapot átteheted egy külön munkafüzetbe és a háttérben megnyitva számolhatsz vele.
Ha pedig igaz az, amit Garashannak írtál a munkatársak Excel ismeretéről, akkor semmi félnivalód nincs.
Üdv.
Ps. Azt gondolom tudod, hogy minden szoftverhez használati útmutatót illdomos adni írásban. Sőt a jövőbeni fejlesztések/esetleges javítások érdekében nem ártalmas egy pontos rendszer leírás készítése sem.
Igen, alapvetően hasonló dolgokban gondolkozom én is.
"bár azt nekem 10-15 mp eltüntetni" Szerencsére vagy nem szerencsére, alapvető, nagyon kezdő excel tudás van mindenkinek, ezért automatizálok mindent, gombokra lesarkítva. Nem tudják mi az, hogy makró stb. Kicsi az esélye, hogy bárki külsőst megkérnek, nem lehet-e feltörni a makrókat stb, mivel foglmuk sincs róla... így szerintem nem mennek tovább majd, hanem elfogadják, hogy oké, ezzel nem lehet mit kezdeni, csak "használni". Legalábbis ebben bízunk, ebből indulunk ki.
használni kell a file-t több mindenkinek. többfajta lekérdezésekből rakunk össze adatokat/információkat, amit aztán szűréssel kinyerve, csak a lényegi információt - eredményt használunk tovább. De ezt napi szinten változtatva.
Azt nem akarjuk, hogy össze tudják rakni, hogy hogyan jön ki a végeredmény + az alap adathalmazokat se lássák, hogy miből jön össze a végeredmény. (mi a folyamata az alap adatokból összeállításnak)
+ ha vki elmegy a cégtől, akkor ezt tovább vigye és felhasználja
Viszont az eredményt meg a napi munkához tudják használni, hogy vki könnyebb, gyorsabb, hatékonyabb legyen, mint az, ahogyan most dolgoznak.