-
IT café
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
-
Mutt
aktív tag
válasz Mittu88 #19536 üzenetére
Hello,
Ha nem jó a képlet, akkor csak makróval lehet megoldani:
Private Sub Worksheet_Calculate()
Const cella As String = "A2"
Range(cella).Offset(1).Value = Range(cella).Value
End Subüdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mutt
aktív tag
válasz Mittu88 #19539 üzenetére
Hello,
Kiegészítheted a korábbi makrót ezzel a sorral.
Worksheets("masik lap").Columns("A:D").AutoFilter Field:=1, Criteria1:=Range(cella).Value
Így lefut a szűrés minden alkalommal.
A gond, hogy pont emiatt erőforrás pazarló, ezért egy kicsit lehet hangolni rajta:
Dim EredetiErtek
Const cella As String = "A2"
Private Sub Worksheet_Calculate()
'kikapcsoljuk az eseménykezelést, mivel a következősor újabb eseményt (change) indítana el
Application.EnableEvents = False
'értéket másolunk eggyel a keresett cella alá
Range(cella).Offset(1).Value = Range(cella).Value
'eseménykezelést visszakapcsoljuk
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
'csak akkor engedjük futni a szűrést, ha változott a szűrési feltétel
If EredetiErtek <> Range(cella).Value Then
Worksheets("UDF").Columns("A:D").AutoFilter Field:=1, Criteria1:=Range(cella).Value
EredetiErtek = Range(cella).Value
End If
End Subüdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Mittu88
senior tag
válasz Mittu88 #19542 üzenetére
Na jó, rájöttem, hogy így se lesz jó.
Az a k.. érvényesítés így se fogja elfogadni.
Szóval a lényeg az lenne:
Van egy költséghely lista, pl:
1000 üzem
2000 raktár
3000 központi irányítás
stb.A lényeg az lenne, hogy legördülő listával lehessen a költséghelyet kiválasztani, alatta egy másik cellában szintén legördülő listával az jelenjen meg, hogy azon a költséghelyen milyen nyomtatók vannak (ehhez is van adatbázis).
pl ha kiválasztja, hogy Üzem:
Epson xy
HP xy
...Ha átállítja raktárra:
Samsung xy
Konica Minolta xy
...és így tovább.
Ezt hogy lehet megoldani? Szerintem VBA-ban egyszerű lehet, de ahhoz nem értek annyira :/
Érvényesítéssel meg szűrővel szenvedek, de rossz végén állok a brének -
Delila_1
Topikgazda
válasz Mittu88 #19991 üzenetére
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Worksheets("Igénylő").Range("C8").Value = 0 Then
MsgBox "Először add meg a kitöltő nevét!", vbOKOnly + vbExclamation
Cancel = 0
End If
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Mutt
aktív tag
válasz Mittu88 #20049 üzenetére
Hello,
Ezt használd az eseményben
Dim cbHiba As Boolean
Dim rngAdatsor As Range
Dim cella As Range
Set rngAdatsor = Worksheets("Igénylő").Range("B12:B15")
cbHiba = False
For Each cella In rngAdatsor
'ha a cella nem üres, akkor 4-el jobbra tőle is megnézzük a cellát
If Len(cella) > 0 Then
If Len(cella.Offset(, 4)) = 0 Then
'ha nincs kitöltve, akkor kilépünk
cbHiba = True
Exit For
End If
End If
Next cella
If cbHiba Then
MsgBox ("Add meg a fogadóállást a " & cella.Offset(, 4).Address & " cellában!")
Cancel = True
End Ifüdv
A tanácsaimat ingyen adom. Ha nem tetszik, akkor kérlek ne kritizáld! / https://github.com/viszi/codes/tree/master/Excel
-
Delila_1
Topikgazda
válasz Mittu88 #20049 üzenetére
Másik megoldás, ahol a ciklust elfelejthetjük:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WF As WorksheetFunction
Set WF = Application.WorksheetFunction
Sheets("Munka1").Activate
If WF.CountA(Range("B12:B50")) < 39 Then
MsgBox "Adatok hiányoznak a B12:B50 tartományból", vbOKOnly + vbExclamation
Cancel = True
Else
If WF.CountA(Range("D12:D50")) < 39 Then
MsgBox "Ejnye-bejnye!", vbOKOnly + vbExclamation
Cancel = True
Exit Sub
End If
End If
End Sub[ Szerkesztve ]
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Mutt
aktív tag
-
Mittu88
senior tag
válasz Mittu88 #21782 üzenetére
Egy ilyennel nagyjából meg lehet, de hogy klikkelésre dobja a sorrendet, azt nem tudom hogy lehet makró nélkül. Ez perpill. akármilyen cellamódosítás hatására újragenerálja a véletlen számokat, kivéve, ha ki van véve excelből az automatikus újraszámolás (99,9%-nál nincs kivéve).
-
PistiSan
addikt
válasz Mittu88 #21868 üzenetére
Olyan 300 oszlopom van, kb 80-100 cellányi tartalommal.
Az oszlopon belül van jó néhány cella ami üres, ezért az CTRL+SHIFT Nyil problémás.Rögzítettem egy excel makrót, így néz most ki.
Sub Makró7()
'
' Makró7 Makró
'
'
Columns("P:P").Select
ActiveSheet.Range("$P$1:$P$101").RemoveDuplicates Columns:=1, Header:=xlNo
End SubHa átírom a "P" oszlopot mondjuk Q-ra, akkor szépen lefut ott is, de ez elég macerás, azt gondolnám hogy valami módon lehet egy változót megadni, ami mondjuk "LH"-ig megcsinálja ezt helyettem.
Tök jó volna, ha több oszlopot kijelölve is eltávolítaná az ismétlődéseket, de sajnos nem teszi.
[ Szerkesztve ]
-
slashing
senior tag
válasz Mittu88 #21917 üzenetére
Nem használhatok összeg sort mivel folyamatosan bővülő táblázat, még ideiglenesen sem lehet majd bekapcsolni rajta az összeg sort. De nem számít annyira nem fontos dolog csak ha van egyszerű megoldás akkor belerakom.... ellenkező esetben meg ennyit kibír mindenki akinek dolgoznia kell majd vele...
[ Szerkesztve ]
-
Delila_1
Topikgazda
válasz Mittu88 #22210 üzenetére
Próbáld ezzel:
Sub Csoportok()
Dim elso As Long, ucso As Long
elso = 1: ucso = 190
Do While elso < 1900
Range(elso & ":" & ucso).Rows.Group
elso = ucso + 2: ucso = elso + 188
Loop
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Mittu88 #22215 üzenetére
Nagyon jól közelítetted meg, csak az Excel fejlesztői oldották meg kicsit furcsán.
Ha az utolsó sor + 1 a következő csoport első tagja, valamiért egybe veszi a két csoportot.
Ki kellett kísérletezni, hogy milyen módon fogadja el.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Mittu88 #22250 üzenetére
Jelöld ki a tartományt, és indítsd a makrót.
Sub Konyveloi()
Dim cella As Object
For Each cella In Selection
If cella.NumberFormat = "_(* #,##0.00_);_(* (#,##0.00);_(* ""-""??_);_(@_)" Then _
cella.NumberFormat = "General"
Next
Range("A1:F17").Select
Columns("A:A").EntireColumn.AutoFit
End SubProgramozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Delila_1
Topikgazda
válasz Mittu88 #22257 üzenetére
Az if cella.numberformat = után idézőjelek között tedd be, amit az Egyéni kategóriában kihozott.
Nálam (a Ft nélkül) csont nélkül lefutott a kérdéses cellák átformázása.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
m.zmrzlina
senior tag
válasz Mittu88 #23314 üzenetére
Nekem azt sikerült kiötleni (na jó innen loptam :-) hogy hozzáadsz a munkafüzetedhez egy lapot amin csak egy információ van a felhasználónak, hogy "Nincs engedélyezve a makró. Zárd be a munkafüzetet és nyisd meg újra miután engedélyezted a makrókat!". A fálj bezárásakor ezen a lapon kívül minden munkalapot elrejtesz és mentesz. Ha valaki engedélyezett makróval vagy letiltott makróval de biztonságos helyről nyitja meg a fájlt akkor a Worbook.Open esemény során az összes munkalap rejtése megszűnik csak az üzenetet tartalmazóé marad meg ergó tud dolgozni a user. Ha viszont nincsen engedélyezve a makró akkor megnyílik a fájl de csak egy lap látható amin az üzenet van (hiszen úgy mentetted el a fájlt hogy az összes többi rejtett).
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet
For Each sh In Worksheets
sh.Visible = xlSheetVisible
Next
For Each sh In Worksheets
If sh.Name <> "figyelem" Then sh.Visible = xlSheetVeryHidden
Next
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_Open()
Dim sh As Worksheet
For Each sh In Worksheets
sh.Visible = xlSheetVisible
Next
For Each sh In Worksheets
If sh.Name <> "figyelem" Then
sh.Visible = xlSheetVisible
Else
sh.Visible = xlSheetVeryHidden
End If
Next
End SubJa és nem Insert>New>Module-ba másolod a makrót hanem a Thisworkbook>Worksheet-ba
[ Szerkesztve ]
-
-
Mittu88
senior tag
válasz Mittu88 #23337 üzenetére
Ma pl. lecsesztek, hogy a szerveren amit anno csináltam fájlt, simán le tudta törölni az egyik felhasználó. Megnéztem és az egész fájlt törölte. Erre mondtam, hogy nem azt mondtátok, hogy ne törölhesse, hanem hogy ne törölhessen bele.
Ezt én (remélem helyesen) úgy értelmeztem, hogy ha meg van nyitva a fájl, ne tudjon munkalapot vagy cella tartalmat törölni.
Pár évnyi adatot töröltek, de van róla biztonsági mentés. -
slashing
senior tag
válasz Mittu88 #23345 üzenetére
erről én is tudnék mesélni, mikor megnyitja a munkafüzetet előjön automatikusan egy msgbox kiírja hogy mit nem szabad, a cellán érvényesítés van és kiírja hogy mit nem szabad más színnel van jelölve és még akkor is az ellenkezőjét csinálja mikor meg letiltom akár még a rákattintást is akkor meg reklamál hogy de miéééért, mert hülye vagy azért és nem fogja fel....
az abszolút hozzá nem értőnél már csak az rosszabb aki azt hiszi hogy ért hozzá, mert majd ők megoldják de még egy ha függvényt sem tud megcsinálni
minden szerénység nélkül mondom hogy nálunk 5 asszisztens munkáját fél év alatt automatizálni tudnám és még csak makró sem kéne hozzá, pedig én se vagyok egy nagy mágus de félelmetes a hozzá nem értés. A színezésen kívül talán még a szum függvény amit értenek...
-
slashing
senior tag
válasz Mittu88 #23397 üzenetére
a legegyszerűbb ha úgy mondom mint amikor keresel valamilyen fájlt a számítógépen és azt írod hogy:
*kutya*.* így megkeresel minden olyan fájlt amiben a kutya szó szerepel bármilyen kiterjesztéssel, ez is kvázi egy regex kifejezés...
szóval ilyen kifejezéssek leírhatod hogy mit szeretnél kerestetni karaktereket számokat azoknak a hosszát stb...
Mindent az ég egy adta világon le lehet írni velük de mocskos bonyolult tud lenni, szerencsére nem sok közöm volt eddig hozzá.
-
m.zmrzlina
senior tag
válasz Mittu88 #23432 üzenetére
Kijelölt cella értékének változóba írása:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$I$6" Then 'ide jön, hogy melyik celláról van szó
ertek1 = Target.Value
End If
End SubMódosított cellaérték változóba írása:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$6" Then 'ide jön, hogy melyik celláról van szó
ertek2 = Target.Value
End If
End Sub -
Fferi50
őstag
válasz Mittu88 #23446 üzenetére
Szia!
Akkor produkálja ezt a hibát szerintem, ha a selection_change úgy következett be, hogy nem volt előtte egyik cellában sem változás (pl. egy celláról simán tab-bal ment tovább valaki, vagy csak belekattintott valahonnan).
Próbáld ezt a selection_change -nél, mielőtt a cells(sor,1) utasításra mennél:
if sor=0 then msgbox "Nem volt változás" :exit subTermészetesen a then után azt írsz be, amit szeretnél, hogy végrehajtódjon. Pl. adhatsz értéket a sor változónak.
Üdv.
-
Mittu88
senior tag
válasz Mittu88 #23458 üzenetére
Hátha érdekel másokat is:
Ha a cella képletet tartalmaz ( = jellel kezdődik), enterre a sorrend: Calculate -> Change -> Selectionchange.
Ha csak beírunk valamit, NINCS Calculate.
Ha van érvényesítés és rossz értéket írunk be, annyiszor lefut a Change esemény, ahányszor módosítani akartuk a cella értékét. -
Delila_1
Topikgazda
válasz Mittu88 #23464 üzenetére
Próbáld ki Munka1-ről indítva a lentieket.
A change eseményt a Munka1 laphoz vidd be, a másikat modulba.Private Sub Worksheet_Change(ByVal Target As Range)
MásikMakró Target.Row, Target.Column, Target.Value
End Sub
Sub MásikMakró(sor, oszlop, nev)
Munka2.Cells(sor, oszlop) = nev
End SubVáltozók értékét így is átadhatod másik makrónak. Arra ügyelj, hogy a fogadó makróban ugyanaz legyen a változók sorrendje, mint az indítóban. Látod, nem kell azonosaknak lenniük a neveknek, ám a Change makróban felvehetsz 3 változót az átadáshoz – de minek?
Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
Fferi50
őstag
válasz Mittu88 #23467 üzenetére
Szia!
A Public deklaráció nem azt jelenti, hogy globálisan van generálva a változó. Az osztálymodulokban (Thisworkbook, Munkalapok kódmoduljai, stb) deklarált Public változók is elérhetőek mindenhonnan, csak az általam korábban már mutatott módon. (Ha elkezded írni bárhol máshol pl. Thisworkbook. a pont után láthatod a többi tulajdonság között a Public módon deklarált változókat is.)
A Global deklaráció csak standard (nem osztály) modulban használható.
A Public deklaráció standard modul esetén szintén nem kér teljes nevet, mert ott megtalálja.Üdv.
-
kutga
nagyúr
válasz Mittu88 #23520 üzenetére
Igen, egy munkalap egy partner. Makrókhoz nem nagyon konyítok sajna.
MOD
Wyll
Igen, így néz ki. Az elrejtés még jó is lenne, ha nem lenne belőlük egy csomó, kézzel, egyenként irtó sokáig tart, és mivel gyakran változik, gyakran meg is kell csinálni. Erre keresnék valami automatizmust.[ Szerkesztve ]
Let the Zone take me if I am.
Új hozzászólás Aktív témák
- A fociról könnyedén, egy baráti társaságban
- 3D nyomtatás
- Ezek a OnePlus 12 és 12R európai árai
- Aliexpress tapasztalatok
- OLED TV topic
- A Gigabyte is visszaveszi alaplapjainak alapértelmezett tuningját
- No Rest for the Wicked
- Xbox tulajok OFF topicja
- Ubuntu Linux
- Samsung Galaxy A54 - türelemjáték
- További aktív témák...