-
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
-
bteebi
veterán
Sziasztok!
Van egy event makróm az adott munkalapban, ami a C oszlopban (3. oszlop) kiválasztott érték ("OK", "Rossz", vagy "N/A") alapján hoz létre a D oszlopban egy listát. De csak akkor, ha a kiválasztott érték a "Rossz". Emellett még rajzol egy keretet.
Az érdekesség az, hogy a makró önállóan lefuttatva (a célcellára ráállva) teljesen jól működik, de ha event makróként futtatnám (a Dim Target/Set Target sorok nélkül, de akár azokkal is) nem csinál semmit. Mi lehet a baj? Már az is felmerült bennem, hogy a dropdown miatt van, hogy esetleg a cellában az értékváltozást nem tekinti változásnak, de másik makrókban ugyanebben a munkafüzetben meg hibamentesen megy... Valahogy pedig nem triggerelődik az event...
Sub test()
'Private Sub Worksheet_Change(ByVal Target As Range)
Dim Target As Range
Set Target = ActiveCell
Dim rng As Range
If Target.Column = 3 Then
If Target.Value = "OK" Or Target.Value = "N/A" Then
Sheets("Stat").Cells(Target.Row, "D").ClearContents
Sheets("Stat").Cells(Target.Row, "D").Validation.Delete
End If
If Target.Value = "Rossz" Then
With Sheets("Stat").Cells(Target.Row, "D").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="Hiba 1,Hiba 2,Hiba 3,Hiba 4"
End With
End If
Set rng = Sheets("Stat").Range("D" & Target.Row & ":E" & Target.Row)
With rng.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With rng.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With rng.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With rng.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With rng.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
End With
End If
End SubVan valami ötletetek, hogy mi lehet a gond? Nagyon köszönöm!
Cancel all my meetings. Someone is wrong on the Internet.
-
Fferi50
őstag
válasz bteebi #41351 üzenetére
Szia!
Szerintem ott a gond, hogy nem kapcsolod ki közben az eseménykezelést.
Az elejére Application.EnableEvents=False a kikapcsolás.
A végére Application.EnableEvents=True a visszakapcsolás.
Eseménykezelésnél erre mindig figyelni kell, hogy ne következzen be nem kívánt eredmény (az esemény ugyanis bekövetkezik, ha egy cellának változtatod az értékét akár makróból is).
(Mondjuk a hiba rendezése után a keretet sem ártana eltörölni... )Üdv.
[ Szerkesztve ]
-
Delila_1
Topikgazda
Biztosan át tudtad írni.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2")) Is Nothing And Target.Value = "" Then
Application.EnableEvents = False
Range("C5:E10, C12:E20") = ""
Application.EnableEvents = True
End If
End SubA 11-es sor címszavait meghagytam.
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 bteebi #41351 üzenetére
Nem a hibára válaszolok, hanem a keretezést egyszerűsítem.
With rng
.BorderAround LineStyle:=xlContinuous, Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
End WithProgramozó: 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 bteebi #41351 üzenetére
Nálam működik a programod.
FFeri arra az esetre gondolt, hogy eseményvezérelt makróba teszed a módosításokat. Átírtam.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
If Target.Column = 3 Then
Application.EnableEvents = False
Sheets("Stat").Cells(Target.Row, "D").ClearContents
If Target.Value = "OK" Or Target.Value = "N/A" Then
Sheets("Stat").Cells(Target.Row, "D").Validation.Delete
Else
With Sheets("Stat").Cells(Target.Row, "D").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="Hiba 1,Hiba 2,Hiba 3,Hiba 4"
End With
End If
Set rng = Sheets("Stat").Range("D" & Target.Row & ":E" & Target.Row)
With rng
.BorderAround LineStyle:=xlContinuous, Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
Application.EnableEvents = True
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.
-
bteebi
veterán
válasz Delila_1 #41354 üzenetére
Köszi, ez így sokkal praktikusabb és elegánsabb. A poén az, hogy a makrórögzítő azt a béna kódot adta, pedig csak két kattintás volt (keret körbe és belül).
#41352: Köszönöm ezt is. Szerintem ebbe a makróba nem kell EnableEvents (nyilván te nem látsz rá az egész file-ra és a többi makróra), viszont másik Event makróban volt EnableEvents ki-bekapcsolás, lehet, hogy az kavart be. Ha egy másik, teljesen független makróban (másik lapon) a futás végére is
EnableEvents = False
maradna, akkor az addig False-on marad az egész munkafüzetre vonatkozóan, amíg egy másik makró át nem teszi True-ra? Mert lehet, hogy ez volt a probléma... De ha minden igaz, akkor a file bezárása/megnyitása törli ezt, és azEnableEvents = True
az alapérték.#41355: Most már nekem is működik, pedig azon a makrón nem változtattam. Egy másik makró viszont elég bonyolult (a magam egyszerű szintjén...), ott eltolhattam az eseménykezelést, már ha a fentebb írott probléma valós. Ezen a munkalapon csak ez a makró van, egy másik munkalapon van az a makró, ami az eventeket ki-be kapcsolja.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Fferi50 #41352 üzenetére
"Mondjuk a hiba rendezése után a keretet sem ártana eltörölni..."
Nem tudom, hogy ezzel mire gondolsz, keretet (rácsot) direkt rajzolok, véglegesnek. Igazából egy másik makróból berajzolhatnám azt a plusz 2 sort is, de amiatt nem teszem, mert így jobban látszik, hogy az a rész még nincs "kitöltve". Persze ha változik a cella tartalma, akkor többször lefut ugyanaz a parancs feleslegesen, de ez érdemben nem lassít semmit se.
Meg még annyit Delila korábbi válaszára, hogy több soros tartomány esetén így jó a kód:
With rng
.BorderAround LineStyle:=xlContinuous, Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
.Borders(xlInsideHorizontal).Weight = xlThin
End WithPersze nekem eredetileg csak egy sor volt, de ha valaki egy több sorból és oszlopból álló területhez akar rácsot adni, annak kell a
Borders(xlInsideHorizontal)
is.#41357: Köszi, akkor majdnem teljesen biztos, hogy az volt a gond. Egy (nekem) elég bonyolult makróban volt, sok If mellett, de végül látszólag sikerült jóra javítanom .
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
koncyka
csendes tag
Sziasztok!
Olyan segítségre lenne szükségem, hogy van egy számlázó progim, aminek az adatbázisa tudja kezelni az excel fájlt, viszont csak a direktbe beírt adatokat viszi át. Amelyik cellám hivatkozik vagy függvény szerint jeleníti meg az adatot, akkor magát az egyenletet viszi át, pedig nekem az adatra lenne szükségem.
A számlázó program semmilyen lehetőséget nem ad az érték kiolvasására és remélem excelben meg tudom oldani.
Van egy olyan megoldás hogy: a cellát ami egy függvény szerint mutat adatot kimásolom és egy tetszőleges cellában irányított beillesztés/érték szerint beillesztem. A szám megvan, nincs függvény. Viszont ha a forrás cella értéke változik (állandóan változó értékű cellákról van szó) az irányítottan beillesztett cellám értéke nem.
Azt hiszem a függvények ebben az esetben nem segítenek, esetleg valami kimutatás vagy hasonló.Remélem valaki tud segíteni és előre köszönöm!
-
Pakliman
tag
válasz koncyka #41362 üzenetére
Szia!
A "legegyszerűbb" megoldás az lenne, ha a Billingo észrevenné/értesülne az anomáliáról és javítaná a programját. Ha jelzed nekik, talán megoldják. Majd. Egyszer. Valamikor.
Egyéb lehetőség:
(Lásd Összefoglaló!) Worksheet_Change eseménykezelőbe programból megoldod, hogy ha egy cella értéke változik (feltételezzük. hogy az automatikus újraszámítás engedélyezve van!), akkor egy másik munkalap azonos cellájába íródjon be az ÉRTÉK (Workshhets("Importálandó").Cells(Target.Row, Target.Column).Value=Target.Value
).
Az importáláshoz már ezt ("Importálandó") a munkalapot kell megadnod.
Ennek a megoldásnak akkor van egy kis (vagy nagy) hátránya, ha sok ezer képlet van a munkalapon, mert nagyon le tudja fogni a gépet
Probléma lehet, ha mindig más táblázattal kell dolgozni
De ha készítesz egy sablont, ami alapján a későbbiekben létrehozod a "munka" munkafüzeteket, akkor csak a sablonba kell EGYSZER megírni a programot -
Pakliman
tag
-
MCMLXXXII
tag
sziasztok!
Érdeklődnék hogy van e arra mód hogy van egy egy agyag leltárom több sorban oszloponkénti darab számmal és csak azt szeretném hogy ha írom be az új kiadott mennyiséget automatikusan az utolsó üres mezőbe ugorjon beállításban vagy billetyű kombinációval2000 ---> Alkatel Max ; Siemens m35i ; Motorola v3i ; Samsung Omnia ; Samsung Note 3 ; Samsung Note 8+Dex-Pad helyett Melopow m002;. Note 10
-
Delila_1
Topikgazda
válasz MCMLXXXII #41370 üzenetére
Az összes többi celláról vedd le a védelmet (Cellaformázás, Védelem fül, Zárolt négyzetből pipa ki).
Ezután védd le a lapot (lapfülön jobb klikk, Lapvédelem), a Zárolt cellák kijelölése elől vedd ki a pipát.Programozó: hibás programok megírására és kijavítására kiképzett szakember. Többet ésszel, mint ész nélkül.
-
HREH
senior tag
Sziasztok!
Biztos van erre valami pofonegyszerű megoldás, csak nem bírok rájönni
Lényeg az lenne, hogy az 'A' oszlopba beírt színkóddal töltse ki a mellette lévő 'B' oszlopban lévő cellát.
Valahogy így:Köszi!
[ Szerkesztve ]
"Fun isn't something one considers when balancing the universe. But this... does put a smile on my face."
-
Fferi50
őstag
Szia!
Nem mondanám, hogy pofonegyszerű...
Eseménykezelő makró kell a munkalap kódlapjára:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Target.Offset(0, 1).Interior.Color = RGB(Application.Hex2Dec(Left(Target.Value, 2)), Application.Hex2Dec(Mid(Target.Value, 3, 2)), Application.Hex2Dec(Right(Target.Value, 2)))
Application.EnableEvents = True
End If
End Sub
Ha az első oszlopban egy cellába beírsz egy hatjegyű Hexa számot, a mellette levő cellát beszínezi a megfelelő színre.
Vigyázz, hibakezelés nincs benne, ha nem hatjegyű a szám, akkor mindenféle előfordulhat.
(de gondolom a hosszát meg tudod vizsgálni...)Üdv.
-
HREH
senior tag
válasz Fferi50 #41376 üzenetére
Köszi!
Jól működik, a gond csak annyi vele, hogy ha egy másik munkalapról beillesztek pl. 5 sornyi színt, akkor Run-time error: '13' Type Mismatch hibát dob.
Ezt ki lehet valahogy küszöbölni?"Fun isn't something one considers when balancing the universe. But this... does put a smile on my face."
-
Fferi50
őstag
Szia!
Ez azért van, mert itt csak egy cellányi változásra készítettük fel.
Próbáld így:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Application.EnableEvents = False
Dim cl As Range
For Each cl In Target.Cells
cl.Offset(0, 1).Interior.Color = RGB(Application.Hex2Dec(Left(cl.Value, 2)), Application.Hex2Dec(Mid(cl.Value, 3, 2)), Application.Hex2Dec(Right(cl.Value, 2)))
Next
Application.EnableEvents = True
End If
End Sub
Üdv.
-
Petium001
csendes tag
Sziasztok
Az outlook topicból "zavartak át" ide
Amit e-mailban kapok webes form által küldött táblázatot, hogyan tudom automatikusan xls formátumba konvertáltatni ?
Köszi
[ Szerkesztve ]
Petium
-
Fferi50
őstag
Szia!
Milyen műveletet szerettél volna végezni, amikor ezt a hibát kaptad?
Több cellát másoltál be? Mert akkor keletkezik ilyen hiba, mivel ebben az esetben a Target.Value tulajdonságot nem tudja értelmezni.
Pár hozzászólással korábban mutattam erre megoldást.
Külön kell venned a két feltételt. Először nézd meg, a B2 cella módosult,
utána a következő sorban, hogy van-e benne érték:
If Not Intersect(Target, Range("B2") Is Nothing Then
If Target.Value="" Then
…
End If
End IfÜdv.
-
Fferi50
őstag
Szia!
Egyesített cella NEM JÁTSZIK ebben az esetben! Ezért ad hibaüzenetet. Mert ugyan te úgy látod, hogy a B2 cella van kijelölve, de "mögötte" a tartományban ott van a másik három.
Szerintem itt más módon kell a B2 cella értékét megvizsgálni.
Mindjárt lecsekkolom.
Egyenlőre nem sikerült a hibát előállítanom. Nem hiszem, hogy az előzőekben írtak okozzák.
Melyik cellát/cellákat választottad ki, amikor a hiba előjött?Üdv.
[ Szerkesztve ]
-
Fferi50
őstag
Tegyél légy szíves egy töréspontot az első feltételvizsgálathoz. (Egérrel rámutatsz a sor előtt levő mezőre és bal klikk - a sor elé kerül egy pont és kiszínesedik a sor.)
Utána soronként próbáld meg végrehajtani.
Az első sor végrehajtása után az Immediate ablakban meg tudod nézni a Target címét így:
?Target.Address erre üss egy entert.
Ezt a képet mutasd meg légy szíves, mi lett az eredmény.Üdv.
-
Fferi50
őstag
válasz Fferi50 #41395 üzenetére
Szia!
A problémát mégis az okozta, hogy az adott cella (B2) egyesített cella volt, így a Target objektum mindhárom cellát tartalmazta, ezért nem tudott értéket vizsgálni rajta.
Mivel az első feltétellel megállapítottuk, hogy a B2 cella "benne van" a tartományban, utána már hivatkozhatunk rá közvetlenül:
If Range("B2").Value="" Then
Üdv.
-
noorbertt
őstag
Sziasztok,
Egy kis/nagy segítséget szeretnék kérni.
Munkába kérnek egy Excel táblázatot, persze senki nem ért hozzá és majd szeptember után lesz pénz ilyen tanfolyamokra..:)
Ezért ha valaki tudna segíteni annak nagyon hálás lennék.
Az elképzelés a következő:Név oszlop: nevek fixen rendszerben és csak választani kell (persze lehessen bővíteni.)
+Y, y, z oszlop: szabadon kitölthető mező
Beírva oszlop: igen, nem
Becsült idő: számok
Dátum: automatikusanMajd hónap végén egy kördiagram, ahol a név és a becsült idő alapján kreálódna ezekből az adatokból.(Ha a diagram első naptól folyamatosan változik az lenne a legjobb. )
Az egészet úgy hogy minden hónap új lapokon legyenek.
Win10van és hozzá az új excel. Esetleg lenne egy vállalkozó kedvű? Az is jó ha én csinálom segítséggel hogy mit merre keressem és hogyan:) legalább még meg is érteném
[ Szerkesztve ]
-
ReSeTer
senior tag
Sziasztok!
Hogyan lehet azt megoldani, hogy egy szűrő cellát tartalmazó oszlopban szűrni tudjak üres cella utáni sorokban is? Nem listázza a lenyíló menüben ha van üres sor az oszlopban.
Előre is köszi!
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Otthoni hálózat és internet megosztás
- Trollok komolyan
- Kerékpárosok, bringások ide!
- Stellar Blade
- Opel topik
- AMD Radeon™ RX 470 / 480 és RX 570 / 580 / 590
- A fociról könnyedén, egy baráti társaságban
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Ubuntu Linux
- exHWSW - Értünk mindenhez IS
- További aktív témák...