- Felháborodott az Apple, a Meta az iPhone-felhasználók üzeneteit akarja olvasni
- A luxusmárkáknak kell a bitcoin, az USA jegybankjának nem
- Letiltja az USA a politikusokat a telefonhívásokról és szöveges üzenetekről
- Nagy áttörés jön a napelemek piacán, nem kell annyi hely a paneleknek
- Belenyúlt az USA az Epic Games igazgatótanácsába, nyomoz az NVIDIA
-
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
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9494 üzenetére
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9492 üzenetére
Ezt nem igazán értem. Próbáltam Inputboxra alkalmazni de nem ment.
Ide kellene valahogy beilleszteni:
Private Sub CommandButton1_Click()
Dim tech As String
start:
tech = InputBox("Add meg a technikus nevét!" + Chr(13) + Chr(13) + "A lista törléséhez nyomj < SPACE >-t!")
If InStr(tech, " ") = 1 Then tech = " " Else tech = tech
If tech = vbCancel Then Exit Sub
Select Case tech
' Case Is = vbCancel
' Exit Sub
Case Is = " "
GoTo clearcontent
Case Is = ""
MsgBox "Nem adtad meg a technikus nevét!", vbCritical, "Hiányzó adat!"
GoTo start
Case Is <> ""
GoTo paste_list
End Select -
m.zmrzlina
senior tag
válasz m.zmrzlina #9490 üzenetére
Közben megoldottam a problémát.
Az Inputbox után a Select Case elé betettem ezt a sort:If InStr(tech, " ") = 1 Then tech = " " Else tech = tech
Mivel az Inputboxba nem várunk olyan adatot ami szóközzel kezdődik ezért bármilyen bevitt adat ami szóközzel kezdődik az törölni fogja a listát.
Van viszont más kérdésem az Inputbox-szal kapcsolatban.
Hogyan kell lekezelni a Cancel gombot, hogy valóban Cancel-ként viselkedjen? Jelen formájában ugyanazt csinálja mint az OK gomb. -
-
m.zmrzlina
senior tag
Ötletre volna szükségem.
A következő kód egy ActiveX parancsgombhoz van rendelve és azt csinálja, (meg még sok minden mást de ez most nem érdekes) hogy a vágólapról megfelelő helyre beilleszt egy 1 oszlop széles változó hosszúságú tartományt, vagy ha a felhasználó <Szóköz>-t nyom akkor törli a meglévőt, vagy nem engedi elfelejteni a "névadást"(Select Case 2. ág)
Private Sub CommandButton1_Click()
Dim tech As String
start:
tech = InputBox("Add meg a technikus nevét!" + Chr(13) + Chr(13) + "A lista törléséhez nyomj < SPACE >-t!")
Select Case tech
Case Is = " "
GoTo clearcontent
Case Is = ""
MsgBox "Nem adtad meg a technikus nevét!" + Chr(13) + Chr(13) + "Pótold a hiányosságot!", vbCritical, "Hiányzó adat!"
GoTo start
Case Is <> ""
GoTo paste_list
End Select
paste_list:
Application.ScreenUpdating = False
CommandButton1.Caption = tech
Cells(2, 2).Value = tech
Cells(4, 2).Select
On Error Resume Next
Selection.PasteSpecial Paste:=xlPasteAll
If Err.Number <> 0 Then
MsgBox "Jelöld ki a panellistát!" & Chr(13) & "Hibakód:" & Err.Number, vbCritical, "Hiba!!!"
Cells(2, 2).Select
Range(ActiveCell, ActiveCell.End(xlDown)).ClearContents
CommandButton1.Caption = "Tech_1"
Exit Sub
End If
'stb...stb...stb...Az a gondom, hogy ha a felhasználó izgalmában véletlenül több szóközt nyom egy helyett akkor nem a régi lista törlése történik hanem beilleszti a vágólapot úgy hogy a parancsgomb felirata " "(kvázi semmi) lesz ami kód szempontjából egy teljesen normális működés de nem ez a cél.
Ezt a felhasználói hibát kellene lekezelni a legegyszerűbben. Nem baj ha nem <Szóköz>-zel törlünk, lehet akár <Del> vagy <Backspace> is.
Hogyan lehet ezt megoldani?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Akkor valami ilyesmi lenne a feladat?
a tablazat1 kb 600 sor, a tablazat2 kb 650, tehat itt lesz olyan is, ami a tablazat1-ben nincs benne.
Ezekhez az elemekhez honnan fogunk árat rendelni? Üresen hagyjuk az ár helyét?
Mindig a tábla1 terméknevei a bővebbek mint a te példádban vagy van olyan is mint az én példámban a nagyharang-templomi nagyharang ahol a tábla2 leírása bővebb?
-
m.zmrzlina
senior tag
Ezzel nincs is gondom.
Azt nem értem, hogy az első táblázatban egy termék oszlop van a másodikban három. Az első táblázat hibás elemeit mindig a második táblázat első termékoszlopában kell keresni és a mások kettőt változtatás nélkül hozzácsatolni, vagy az első táblázat hibás eleme (a helyes névvel) előfordulhat-e a második táblázat bármely termékoszlopában?
Még egy kérdés. Azonos sorban szereplő 3 terméknek azonos az ára is?
-
m.zmrzlina
senior tag
Amit én a #9389-ből ill. a #9373-ból kiértettem, arra van szükséged, hogy két intervallumot (keretidő és tervezett idő) és két időpontot (kezdés és befejezés hete) különböző szinekkel kijelölni egy megfelelő táblázatban.
Az előző gondolatébresztő hsz-t a következőképpen pontosítottam és egészítettem ki:
I2-BH2-ig felvittem a hetek sorszámát, itt fogja keresni a WEEKNUM fv az adott dátumhoz tartozó hetet. Maga a fv úgy van paraméterezve, hogy hétfőt tekintse a hét első napjának és azért kell kivonni belőle 1-et, hogy a visszaadott érték illeszkedjen a 2011-es magyarországi hivatalos naptári hetekhez.
A négy képlet sorrendje fontos mert a kezdő és befejező hét formázása csak így írja felül a tervezett idő celláinak háttérszínét.
-
m.zmrzlina
senior tag
Nem tudom megoldódott-e már a problémád, ha nem itt egy lehetséges megoldás. Én feltételes formázással gondolom megoldani.
Ez egyelőre annyit tud, hogy egyetlen munkának "bejelöli" a keretidejét és a tervezett idejét a "naptárba".
Nézd meg, ha jó az irány akkor gondolkodunk tovább errefelé, ha nem akkor módosíthatunk.
C6-C7-ben lévő képleteket természetesen nem a táblázatba kell írni, hanem a szabálykezelőben az Új formázási szabály>A formázandó cellák kijelölése képlettel>Értékek formázása ha a képlet igaz mezőbe. A két képlet két különböző szabályt jelent.
-
m.zmrzlina
senior tag
válasz m.zmrzlina #9393 üzenetére
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9361 üzenetére
Ja, mondjuk azt a "2. sorban" dolgot nem vágom.
Mihez képest 2. sorban? C2-hőz képest, azaz 3. sorban?Az első sorhoz képest a második sorban ami A2-vel kezdődik
Szerintem megoldottuk pirit28 problémáját, a hibakezelés már csak engem érdekelt mert tudtam hogy valami hibádzik.
Köszi a segítséget.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9358 üzenetére
Az eredeti feladat itt lett leírva: #9335
A második sorban vannak az adatok C2-től kezdődően CX2-ig és az az is követelmény hogy csak a 2. sorban lévő találat érvényes, tehát pl a D4-ben hiába van meg a keresett név az nem jó.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9356 üzenetére
Még hogy az informatikusoknak nincsen humoruk...
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9354 üzenetére
Ezt sikerült kiötleni, úgy tűnik működik.
Sub find()
eleje:
Cells(2, 3).Activate
amitkeres = InputBox("Add meg a keresni kívánt nevet!", "Keresés", amitkeres, 13000, 100)
On Error Resume Next
Cells.find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
If Err.Number = 91 Then
MsgBox ("A keresett név nincs a listában.")
GoTo eleje
End If
If ActiveCell.Row <> 2 Then
Cells(2, 3).Activate
MsgBox ("A keresett név nincs a listában.")
GoTo eleje
End If
End SubMűködni működik de jó ez így?
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9352 üzenetére
Erre gondolsz?
When the first error is raised, execution transfers to the line following Err1:. The error hander is still active when the second error occurs, and therefore the second error is not trapped by the On Error statement.
Az az ok, hogy az első hibakezelő rutin még aktív mikor a második hiba bekövetkezik?
-
m.zmrzlina
senior tag
válasz m.zmrzlina #9348 üzenetére
Érdekes, hogy második alkalommal is az On Error GoTo uzenet utáni sor okozza a hibát mint elsőre de először el tud menni az uzenet: címkére másodszor már nem.Akkor sem ha nem ugyanaz az inputbox tartalma mint először.
Magyarul, ha kétszer gépeli el a júzer a nevet akkor ugyanúgy kiakad a kód mintha nem is lenne benne hibakezelés.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #9345 üzenetére
Még az előzőhöz...
Ha viszont a 2.soron kívül lévő cella tartalomra keresek akkor rendben működik (adja a hibaüzenetet) akárhányszor ismétlem meg a keresést.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #9341 üzenetére
Nekem is volna egy kérdésem a #9341-ben lévő kóddal kapcsolatban a nálam okosabbakhoz.
Miért van az, hogy ha olyan karaktersorozat kerül az inputboxba ami nincs a munkalapon, de még csak nem is része egyik létezőnek sem akkor az első próbálkozást rendben lekezeli a hibaüzenettel, a másodiknál viszont kiakad a 91-es hibával?
-
m.zmrzlina
senior tag
válasz pirit28 #9338 üzenetére
Ha egy név csak egyszer szerepel a listában akkor lehet ez egy megoldás:
Sub find()
eleje:
Cells(2, 3).Activate
amitkeres = InputBox("Add meg a keresni kívánt nevet, vagy név részletet!", "Keresés", amitkeres)
On Error GoTo uzenet
Cells.find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
If ActiveCell.Row <> 2 Then
Cells(2, 3).Activate
GoTo uzenet
End If
Exit Sub
uzenet:
MsgBox ("A keresett név nincs a listában.")
GoTo eleje
End SubNincs bolondbiztossá téve még, csak próbálkozom.
-
m.zmrzlina
senior tag
válasz pirit28 #9335 üzenetére
Valami ilyesmire gondolsz?
Private Sub CommandButton1_Click()
Cells(2, 3).Activate
Do Until ActiveCell.Value = ""
amitkeres = InputBox("Add meg a keresni kívánt nevet, vagy név részletet!", "Keresés", amitkeres)
Cells.find(What:=amitkeres, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
Loop
End SubInputboxban bekéri a keresendő karaktersorozatot és végigkeresi a C sort az utolsó névig úgy, hogy minden találatnál megáll. <Enter>-rel tudsz a következő találatra ugrani.
Szerintem a munkalapra elhelyezett parancsgombos indítás nem a legcélszerűbb (ennél a megoldásnál biztosan nem). 2007-ben a Gyorsindítás eszköztárba tennék egy parancsgombot, korábbiaknál új menüpontot tennék a menübe.
Melyik Excel verziót használod?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #9288 üzenetére
A Beszúrás/Szimbólum menüpont közvetlenül adja a karaktertáblát.
A 2007-ben igen, de a 97-ben semmi ilyesmi nincs. Én is ott kerestem először, megnéztem vagy ötször de nem találtam.
Hál' istennek nem kell nagyon gyakran használni és a drag'n drop módszer egy kicsit gördülékenyebb mint a copypaste.
Köszi.
-
m.zmrzlina
senior tag
Sziasztok!
Az a kérdésem, hogy van-e Excel97-ben egyszerűbb lehetőség speciális karakterek beszúrására azon kívül hogy a Karaktertáblán (Start>Programok>Kellékek>Rendszereszközök>Karaktertábla) vágólapra teszem majd Ctrl+V ?
-
m.zmrzlina
senior tag
A cimkéhez egy Select Case szerkezeten keresztül jutunk attól függően, hogy egy Inputboxnak mi a tartalma.
Az Inputboxot pedig egy ActiveX parancsgomb indítja ami abban a munkafüzetben (sőt azon a munkalapon) van amibe a beillesztést el szeretném végezni.
A vágólapra illesztés (a távoli asztalról) még a parancsgomb használata előtt történik.
-
m.zmrzlina
senior tag
A következő kódrészlettel az a bajom, hogy az a sor amivel egy másik munkafüzetben végzett kijelölést értékként akarok beilleszteni 1004-es hibakóddal kiakad. A makró munkafüzetében tett kijelölést hiba nélkül értékként is be tudja illeszteni.
Az xlPasteAll viszont így is úgy is gond nélkül lefut.
Mi lehet az oka, merre keresgéljek? A cél az lenne, hogy a másik munkafüzet kijelölését értékként lehessen beilleszteni.
paste_list:
Application.ScreenUpdating = False
CommandButton1.Caption = tech
Cells(2, 2).Value = tech
Cells(4, 2).Select
On Error GoTo error_1
Selection.PasteSpecial Paste:=xlPasteAll
'Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.Cells(Selection.Rows.Count + 1, 1).Select
If ActiveCell.Value <> "" Then
Range(ActiveCell, ActiveCell.End(xlDown)).Select
End If
....stb
....stb[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Nesh007 #9167 üzenetére
A feladat amiben segítséget kérsz az egy megfelelően elrendezett egyszerű kivonás.
Valamit én nem értek, vagy a feladat sokkal bonyolultabb csak én nem látom át a lényegét?
(megjegyzem simán előfordulhat, hogy így van és nem haragszom ha valaki felvilágosít)
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Shirak! #9127 üzenetére
Jól értem?
Olyan megoldást keresel aminek megmondod hogy:
1. milyen mérettartományban
2. melyik gyárban gyártott
3. 2cm+ széles - vagy nemcsapágynak mi az ára (alapul véve a listaárat)?
Vagyis egyszerűbben: hogyan befolyásolja a listaárat a fenti 3 feltétel?
Egy mérettartománynak azonos a listaára?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9093 üzenetére
Talán majd Delila_1 megoldja nekünk. Van rá 2*53*7 (vagy mennyi ) napja.
-
m.zmrzlina
senior tag
válasz scott_free #9090 üzenetére
amúgy a hivatalos "munkahetek" szerint az idei első munkahét január 3-ával indult.
Én is ebből indultam ki.
Kezdők szerencséje.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9086 üzenetére
Akkor ez az év 53 hetes, vagy ez év utolsó majdnem egész hete az már 2012 első hete?
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9084 üzenetére
Azt honnan lehet tudni, hogy 2011 első 2 napja az már 2011 első hetéhez vagy még 2010 utolsó hetéhez tartozik?
-
m.zmrzlina
senior tag
válasz scott_free #9082 üzenetére
Ha jól értem és azt szeretnéd tudni, hogy adott hét melyik napja hanyadikára esik akkor itt egy megoldás:
A2-be viszed be a hét sorszámát és D1-D7-ben íródik ki a napokhoz tartozó dátum.
D1-D7-ben az F1-F7-ben látható képleteknek kell lenni.
Jelen formájában 2011 jan 01-től működik de át lehet írni más évekre esetleg univerzálisra is
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz m.zmrzlina #9008 üzenetére
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #9006 üzenetére
Nálam meg szóközzel nem működik pedig egy régi tanfolyami jegyzetemben nekem is szókoz van nem kötőjel.
Nem tudom mi az oka. Nem lehet hogy területi beállítás?
Kötőjellel viszont megy.
-
m.zmrzlina
senior tag
válasz m.zmrzlina #9005 üzenetére
A következő formátum pedig nem "eszi meg" a legnagyobb helyiérték után következő számokat:
#,###-" e"
Természetesen a kötőjel itt is ott van az utolsó kettőskereszt mögött.
-
m.zmrzlina
senior tag
válasz bozsozso #9004 üzenetére
Egyéni formátumkód létrehozásával meg lehet oldani.
Cellák formázása>Szám>Egyéni
Itt kiválasztod akármelyiket és átírod erre:
#-" e"
(a kettős kereszt után kötőjel van és ebben van a lényeg csak itt nem nagyon látszik) 1db kötőjel 1000-rel osztja a beírt számot. Ha milliókkal vagy milliárdokkal számolsz akkor többszörözni lehet a kötőjelet és persze utána "m" vagy "mrd"
Ezzel tudsz számolni is.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Egyszer már érdeklődtem hasonló témában (#8906 #8909) és most megint belefutottam egy hasonló problémába. Azt a problémát úgy oldottam meg, hogy a munkafüzet Open eseményébe tettem az UnMerge parancsot így a beillesztés már a teljes munkalapot szétválasztott cellákkal találja. Meglátjuk mi lesz.
Most azonban van egy ilyen programrészletem ahol hasonló a probléma annyi különbséggel, hogy itt a Selection.ClearContents sor csinálja ugyanazt mint a másik esetben az UnMerge:
Private Sub ComboBox1_Change()
Range("B4").Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Selection.ClearContents
Range("B4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("B3").Value = Date
End SubAz sajnos nem megy, hogy a Selection.ClearContents után nyitjuk a forrás munkafüzetet és utána másolunk mert a forrás munkafüzet egy távoli gépen Remote Desktoppal érhető el változó néven, nem tudni milyen nevű munkalapjának milyen tartományából kell másolni és persze az elérési út is több féle. Szóval az eredeti adat kijelölését mindenképpen a felhasználóra kell bízni.
Az lenne a kérdésem, hogy van-e ennek a problémának a megoldására bevett technika vagy csak a #8909-ben leírt átmeneti tárolós módszer?
-
m.zmrzlina
senior tag
El tudja-e nekem magyarázni pár mondatban, hogy mi a különbség az Űrlap vezérlőelemek és az ActiveX vezérlők között. Mi pluszt ad az ActiveX cserébe azért, hogy minden forrás amiben olvastam róla a makrókkal hasonlatos biztonsági rizikókra figyelmeztet?
Magyarul mi az a feladat amire elég az Űrlap vezérlőelem, és mikor érdemes az ActiveX-et használni?
Van egy munkafüzet amit szeretnék felhasználóbarátabbá tenni ezért egy vágólapról beillesztést és a hozzá kapcsolódó cellaformázásokat egy parancsgombra bízni.
Mit célszerű itt alkalmazni?
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8949 üzenetére
Akkor ezt a témát kellőképpen körüljártuk, számomra tanulságos volt és megint sikerült tanulni pár dolgot. Köszi.
Itt a végső megoldás amit már nem zavar meg holmi szóköz meg egyéb elütött karakterek:
Az adott cellákat kötelező Szám formátumra formázni a SZÁM fgv használata esetén!
Ez lehet, hogy feltételes formázás esetén nem igaz mert ha Általános-ra állítom a cellaformátumot akkor is működik a formázás
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8947 üzenetére
Köszi közben megtaláltam én is (még sosem használtam)
Ennek fényében a #8932-ben megfogalmazott kérdésre egy kicsit könnyebben kezelhető megoldás így néz ki.
Az üres cellák itt most szóközöket tartalmaznak.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8945 üzenetére
Igen, erre való, hogy törölve legyenek a cellák. Erről nem a felhasználónak kell gondoskodni, hanem a munkafüzet készítőjének.
Világos csak én meg hosszan tudnám sorolni azon általam ismert felhasználóknak a listáját akik simán <SPACE>-szel törölnek egy cellát talán mert sokkal könnyebb megtalálni ezt a gombot mint a <DEL>-t vagy a <BACKSPACE>-t. Azt pedig nyilván te is tudod, hogy a megszokás milyen nagy úr.
(Elég gyilkos dolog, egy üresnek hitt cellával dolgozni, ami csak "ránézésre" üres)
Egyetértek
Van olyan fv ami a begépelt karakter ASCII kódját adja vissza? Tudom: van ha írunk egyet de úgy értem készen van-e?
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8943 üzenetére
Félreértettél, nálam pont úgy működik ahogy leírtad. Szerintem Swen_N-nél is. Bármi van a cellában (akár szóköz is) a cella háttere kék. Ezért írtam a #8933-ban hogy erre figyelni kell.
De egy olyan felhasználónak aki csak használja a munkafüzetet és nem érdekli mi miért van benne annak talán hasznos lenne hogy ha nem lát a cellában semmit akkor a cella semmiként is viselkedjen
Érdekes, hogy a =ÉRTÉK(C9) fv #ÉRTÉK! hibaüzenetet ad ha szóközt teszek C9-be
-
m.zmrzlina
senior tag
válasz Delila_1 #8938 üzenetére
Hát igen! Lehet hogy elég lenne egyszerűen csak megtanulnom olvasni:
Értékek formázása ha ez a képlet igaz:
Márpedig az ÉS() akkor igaz, ha minden argumentuma igaz. Az azért engem is érdekelne, hogy hogy lehet megszabadulni attól a problémától, hogy a C9<>"" egy <szóköz>-re is IGAZ-at ad (ezt azért érteni vélem hogy miért) de a C9>0 szintén így viselkedik még akkor is ha a cella formátumát Általánosról Számra állítom.
-
m.zmrzlina
senior tag
válasz JamesHolden #8937 üzenetére
Szivesen!
-
m.zmrzlina
senior tag
válasz JamesHolden #8930 üzenetére
Erre jó az irányított szűrés:
Tudtommal ez a lehetőség az Excel2007 előtt is megvolt, sajnos nem tudom leellenőrizni.
2007-nél Adatok>Szűrő>Speciális-nál található meg, a te verziódnál (2003 ha jól látom) is valahol azon a környéken.A képen kis csalás van mert az eredmény csak a felugró ablak leokézása után látható.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Én ezt a képletet használnám:
=HA(DARABTELI(G:G;I7)=0;0;1)
G oszlopban vannak az adatok és I7-ben pedig az amit keresünk.
A HA fv-be azért kell beágyazni, hogy ha egynél többször szerepel az I7-ben lévő adat az A oszlopban akkor is csak 1-et adjon vissza és ne azt a számot ahányszor előfordul a keresett érték.[ Szerkesztve ]
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
válasz m.zmrzlina #8906 üzenetére
A kérdés mostanra annyit egyszerűsödött, hogy ki lehet-e választani (programkódban természetesen) hogy beillesztéskor forrásként az Office vágólap és ne az oprendszer vágólapja szerepeljen?
Az történik ugyanis (a clipbrd.exe-vel kiválóan követhetően) hogy amint lefut az a programsor amiben az UnMerge van a rendszer vágólapja kiürül. Az Office vágólapon viszont továbbra is ott van a beilleszteni kívánt adat.
Két módszert próbáltam megkerülendő a problémát. Az egyik hogy töröltem az egész lapot ahová a beillesztés megy majd létrehoztam egy újat ugyanazon a néven. Talán mondanom sem kell ez nem jött be. A másik hogy az UnMerge előtt letároltam a vágólap tartalmát egy átmeneti helyre majd az UnMerge után bemásoltam a végleges helyére majd az átmeneti helyéről töröltem. Ez sem az igazi mert ez meg nagyon nyögvenyelőssé teszi a munkafüzet működését.
-
m.zmrzlina
senior tag
Van egy munkafüzetem, amibe két módszerrel szoktak adatot beilleszteni a felhasználók. (kb 1500 sor 15 oszlop) Egy e-mail html szövegtörzsét teszik vagy közvetlenül vagy egy másik excel munkafüzet közbeiktatásával vágólapra. A vágólap tartalmát - némi ellenőrzés elvégzése és formázás után - egy makró teszi a kívánt helyre. (ismét köszönet érte Delilának)
A problémám az, hogy néha - ki tudja milyen okból - "Az egyesített cella része nem módosítható!" hibaüzenettel kiakad a makró. Szerencsére (vagy sajnos) ez a hiba nagyon ritkán fordul elő és ezért nem tudtam még rájönni, hogy mi okozza. Nyilván az új adattábla egyesített cellái valami miatt elcsúsznak a régihez képest. Mivel az eredeti adattábla elég sok egyesített cellát tartalmaz ezért azt találtam ki, hogy a vágólap beillesztése előtt egy Cells.UnMerge sorral megszüntetem a régi munkalap cellaegyesítéseit és csak ezután kezdem el a vágólap beillesztését.
Igen ám de itt a probléma. Ha egyenesen e-mailből megy a vágólapra másolás akkor rendben lefut a makró de ha excelből Ctrl+C-vel akkor úgy viselkedik mintha üres lenne a vágólap. Biztosan ez a sor okozza a problémát mert ha kikommentezem akkor megszűnik a hiba. (Meg természetesen az eredeti hiba kezelése is)
Mit lehet ilyenkor tenni?
-
m.zmrzlina
senior tag
válasz Vizes Tomi #8837 üzenetére
Az nem megoldás, hogy a másik munkalapról valamilyen trükkel átlopjuk a határérték adatokat a mért értékek munkalapjára? Mondjuk valahová a legutolsó néhány oszlop legvégére.
Mekkorák a tartományok amiket használsz?
[ Szerkesztve ]
-
m.zmrzlina
senior tag
válasz Delila_1 #8817 üzenetére
Hogy egészen pontosak legyünk akkor ennél a változatnál a kijelölés és a képlet így néz ki:
Mert hogy nem a D oszloptól hanem az A-tól indulunk. Na jó B-től. :-)
"azt szeretném ha például adunk egy háttérszínt a B5-nek akkor az alatta lévő oszlop is színes legyen, illetve így tovább ha C5-nek, ha E5-nek, mikor melyik kellene"
-
m.zmrzlina
senior tag
Jelöld ki a tartományt az elejétől a végéig (a képen ez A6:E14) utána Új formázási szabály>A formázandó cellák kijelölése képlettel.
A képlet pedig így néz ki:
=$D6<$B$3 (a 6-os elől vedd ki a $ jelet amit automatikusan betesz az excel ha a cellára kattintással jelölöd ki )
A második kérdésed érdekesebb arra nem tudom a választ. Nálam elég átírni akármelyik dátumot a D oszlopban és <Enter> után aktualizálja is a formátumot.
-
m.zmrzlina
senior tag
-
m.zmrzlina
senior tag
Biztosan van rá egyszerűbb megoldás is, nekem ezt sikerült kiötleni. Akkor használható ha a munkalap celláinak eredetileg nincsenek olyan háttérszinei amelyeket nem szeretnél törölni.
Úgy működik, hogy a cellába aminek a sorát és oszlopát ki szeretnéd emelni nyomsz egy dulpakattintást.
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim sor As Long, oszlop As Long
'aktív cella azonosítók
sor = ActiveCell.Row
oszlop = ActiveCell.Column
Application.ScreenUpdating = False
'korábbi háttérszín törlése
Cells.Select
Selection.Interior.Pattern = xlNone
'aktív cellába vissza
Cells(sor, oszlop).Select
'aktív cella sorának háttérszíne
ActiveCell.EntireRow.Select
Selection.Interior.ColorIndex = 20
'aktív cellába vissza
Cells(sor, oszlop).Select
'aktív cella oszlopának háttérszíne
ActiveCell.EntireColumn.Select
Selection.Interior.ColorIndex = 20
'aktív cellába vissza
Cells(sor, oszlop).Select
Application.ScreenUpdating = True
End Sub -
m.zmrzlina
senior tag
válasz Satchmo7 #8673 üzenetére
Az hogy mennyit kell rákölteni (kell-e egyáltalán) az attól függ hogy milyen szintre mennyi idő alatt akarsz eljutni és hogy honnan indulsz.(vannak-e programozási alapismereteid)
Szerintem ez két nagyon jó könyv. Én is kezdő vagyok és nagyon sokat segítettek már. Nem tudom hogy magyarul megjelentek-e.
http://www.amazon.com/Excel-Power-Programming-Spreadsheets-Bookshelf/dp/0470044012
http://www.amazon.com/Excel-2007-Bible-John-Walkenbach/dp/0470044039excelHa meg konkrét kérdésed van küldd ide, segítőkész emberek vannak itt.
-
m.zmrzlina
senior tag
Az én megoldásomban a
Columns("A:B").EntireColumn.AutoFit
helyett ezt:
With Columns("A:B")
.Select
.EntireColumn.AutoFit
.HorizontalAlignment = xlLeft
End Withbetenni.
Ja és a
activerow = Range("A" & sorsz + 1, "I" & sorsz + 1).Value
sort törölni. Nem létező változónak ad értéket majd nem használja semmire.
Mire észrevettem, hogy benne maradt már nem volt szerkeszthető a hsz. -
m.zmrzlina
senior tag
Nekem ezt sikerült kiötleni:
Sub valogat()
Dim sorsz As Integer
Dim holavege As Integer
Sheets("Munka1").Select
Cells(Rows.Count, 1).End(xlUp).Select
holavege = ActiveCell.Row
For sorsz = 1 To holavege - 1
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(sorsz + 1).Name = Sheets(1).Cells(sorsz + 1, 1).Value
Sheets("Munka1").Select
Range("A1:I1").Select
Selection.Copy
Sheets(1 + sorsz).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Munka1").Select
Range("A" & sorsz + 1, "I" & sorsz + 1).Select
activerow = Range("A" & sorsz + 1, "I" & sorsz + 1).Value
Selection.Copy
Sheets(1 + sorsz).Select
Cells(1, 2).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Columns("A:B").EntireColumn.AutoFit
Next sorsz
Sheets("Munka1").Delete
ActiveWorkbook.SaveAs "C:\Documents and Settings\agb\Dokumentumok\masneven.xlsm"
End SubAbból a munkafüzetből indul ahol a kiindulási lista van, elkészíti a munkalapokat igény szerint, majd törli az eredeti lista munkalapját és menti a munkafüzetet más néven.
Nem egy minden részletében kimunkált végleges megoldás inkább csak gondolatébresztő, de működik.Érdekelnének a szakértő vélemények.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8626 üzenetére
Én bénáztam, bocs.
Összekevertem ezt:Sheets("szűrőháló").Range("A1").Select
ezzel:
Sheets("szűrőháló").Range("A1").Value = "akármi"
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Az miért van hogy ez a hivatkozás nem működik
Sheets("szűrőháló").Range("A1").Select ebben a formában
csak így:
Sheets("szűrőháló").Select
Range("A1").SelectÍgy azonban működik:
Sheets("szurohalo").Range("A1").Select
Természetesen az ékezetes formánál a munkalapnak is ékezetes a neve, a másiknál pedig nem.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8622 üzenetére
Köszönöm a választ így világosabb egy kicsit.
A topicban leggyakrabban elég egyszerű problémák merülnek fel, legalábbis arra gondolok, hogy nem igazán számít a sebesség.
Bár egy Application.ScreenUpdating = False/True páros még egszerűbb esetekben is látványos eredményt tud produkálni.
összeszednek mindenféle leírást és azt alkalmazzák, azaz ilyen dirib-darabokból "tákolják össze"
A tákolással (hobbiszinten) szerintem nincs baj inkább azzal, hogy ha valaki megelégszik a tákolmánnyal és nem akar fejlődni és jobbat csinálni.
-
m.zmrzlina
senior tag
Fura dolgot találtam miközben VBA kódok optimalizálása (működés gyorsítása) témakörben olvasgattam.
Itt: http://www.avdf.com/apr98/art_ot003.html a Tip #3-nál azt írják (ha jól értem) hogy ha lehet ne használjuk az Excel függvényeit a kódban inkább programozzuk le az összefüggést.
Itt meg: http://www.cpearson.com/excel/optimize.htm a Worksheet Functions résznél mintha pont az ellentéte lenne leírva.
Most akkor valamit félreértek vagy tényleg valami ellentmondás van?
-
m.zmrzlina
senior tag
létrehoztam a view>toolbars>command toolbox segítségével egy command buttont amit tök szépen megformáztam.
ha ráklikkelek jobb gombbal nem tudom 1 makrohoz se hozzárendelni, míg ha beillesztek
egy wordart,clipart stb képet akkor jobb gombbal hozzá tudom adni a makrót,(assign macro).
mit tegyek hogy a command button-on működjön?Ha arról beszélünk ami nálam az Űrlap vezérlőelemek helyen elérhető akkor szerintem ne a gombon, hanem a keretén (nem kretén:-) kattints jobbal (ne ferdén csíkozott hanem pontozott legyen a keret)
Ha majd müködni fog a command buttonom szeretném hogy az legyen az első dolga hogy
megkérdezi a felhasználót hogy honnan nyissa meg a forrás(adat) file-t (ctrl+o) ezt hogy csináljam?Nem tudom milyen fájlt kell megnyitni és mit kell vele csinálni de ha jó az neked, hogy egy textfájl minden sorát egyetlen cellába másolja (egy sor egy cella) akkor próbálkozz ezzel:
Public FileName As Variant
Sub GetImportFileName()
Dim Filt As String
Dim FilterIndex As Integer
Dim Title As String
Filt = "Text Files (*.txt),*.txt," & "All Files (*.*),*.*"
FilterIndex = 1
Title = "Válaszd ki a fájlt"
FileName = Application.GetOpenFilename (FileFilter:=Filt, FilterIndex:=FilterIndex, Title:=Title)
If FileName = False Then
MsgBox "Nem volt fájl kiválasztva."
Exit Sub
End If
Open FileName For Input As #1
r = 0
Do Until EOF(1)
Line Input #1, Data
ActiveCell.Offset(r, 0) = Data
r = r + 1
Loop
Close #1
End Submi az a parancs amivel kitudom jelölni azt a tartományt ami tartalmaz adatot?
pl. itt van nálam egy excel amibe van 50 sor adat a p oszlopig, jövő héten ez a táblázat 400ig
fog adatot tartalmzi az ai oszlopig.nekem most csak 50 sor kell legközelebb pedig 400,
ha mindet kijelölöm az azért nem jó mert van egy másik táblám ami szintén 50sort tartalmaz
most holnap meg150-et. tehát 2 excelből kellene 1 csak a tartomány mindig változik.Erre több megoldás is van, pontosítsd a feladatot. Egybefüggő-e a tartomány stb... stb...
-
m.zmrzlina
senior tag
válasz dellfanboy #8584 üzenetére
Erre a karaktersorozatra keress rá:
Wiley.Excel.2007.Power.Programming.with.VBA.Apr.2007.chm
Szerintem biblia a témában.
"God save John Walkenbach"
-
m.zmrzlina
senior tag
válasz tknof1871 #8578 üzenetére
Mit jelent az "automatikusan"?
Mert ha A1-be beírod, hogy 0, A2-be 50, aztán kijelölöd az A1:A2 tartományt és a tartomány jobb alsó sarkánál fogva lehúzod a kijelölést akkor az lesz az eredmény amit szeretnél.
Ez annyira nem automatikus, inkább kézinek mondanám.
[ Szerkesztve ]
-
m.zmrzlina
senior tag
Ez se rossz, még ha a legtöbb esetben nem is a legjobban használható módszer.
The following example reads a text file and then places each line of data in a single cell (beginning with the active cell):In most cases, this procedure won't be very useful because each line of data is simply dumped into a single cell.
Sub ImportData()
Open "c:\data\textfile.txt" For Input As #1
r = 0
Do Until EOF(1)
Line Input #1, data
ActiveCell.Offset(r, 0) = data
r = r + 1
Loop
Close #1
End Sub[ Szerkesztve ]
-
m.zmrzlina
senior tag
Hogyan tudom beállítani, hogy ha egy text fájlból szeretnék szöveget beilleszteni egy excel munkalapra akkor alapértelmezetten ne történjen semmilyen tördelés (Szövegből oszlopok)
hanem ami a text fájlban egy sorban van az az excelben egy cellába kerüljön?1. sor--->A1
2. sor--->A2
.
.
n. sor--->AnHogyan lehet erről makróban intézkedni?
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8565 üzenetére
Nyilván alapvető hiányosságaim vannak ami a programozást illeti (ez vitán felül áll nem is tagadom) vagy csak funkcionális analfabéta vagyok (magyarul és angolul is) de nekem ez:
Ha azt akarjuk, hogy a program folytatódjon hibaüzenet nélkül, ha hiba történik, akkor használjuk a következő formátumot:
Sub Teszt
On Error Resume Next
' ... feladat végrehajtása, amely közben hiba történhet
End Subugyanazt jelenti mint amit Chip Pearson hivatkozott oldalán találtam.
Mindenesetre az eredeti problémámat megoldottad, és hogy miért jó úgy azt egyszer úgyis megértem.
Köszönöm.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8562 üzenetére
The second form, On Error Resume Next , is the most commonly used and misused form. It instructs to VBA to essentially ignore the error and resume execution on the next line of code. It is very important to remember that On Error Resume Next does not in any way "fix" the error. It simply instructs VBA to continue as if no error occured. However, the error may have side effects, such as uninitialized variables or objects set to Nothing. It is the responsibility of your code to test for an error condition and take appropriate action.
Ebből a bekezdésből gondoltam, hogy gond lehet abból ha a kód többi részében előfordul egy hiba amire nem készítettem fel a programot. Számomra ez arról szól, hogy az On Error Resume Next önmagában nem old meg semmilyen hibát csak ettől a kód "nem vesz tudomást" a hibáról. Aztán ha én magam intézkedtem a hibakezelésről - mint te a válaszodban adott kóddal - akkor minden ok, ha meg nem akkor....kisnyúl.
-
m.zmrzlina
senior tag
válasz Fire/SOUL/CD #8558 üzenetére
Köszi a megoldást de szükségem lenne egy kis magyarázatra is.
Nem lesz abból gond, hogy ha a további utasítások során valahol hibára fut a kód akkor nem lesz ami lekezelje? Az On Error Resume Next sor - gyakorlatilag mivel a makró egyetlen szubrutin - kikapcsolja a hibakezelést az egész kódban, és az utána lévő néhány sor csak a beillesztés problémáját kezeli.
Az On Error Resume Next-tel kapcsolatban itt:
http://www.cpearson.com/excel/ErrorHandling.htm
legalábbis ilyesmit lehet olvasni.Nem akarok tudálékoskodni csak nem értem a dolgot.
-
m.zmrzlina
senior tag
Van egy makróm ami azt csinálja, hogy a felhasználó által egy txt fájlban kijelölt szöveget beilleszti egy munkalapra elvégez bizonyos ellenőrzéseket majd megformázza.
A következő módszerrel egy felhasználói hibát szeretnék kezelni ami abból adódik, hogy nem tett semmit a vágólapra mielőtt elindította a makrót. Így szeretném csinálni:
Cells(1, 1).Select
On Error GoTo hiba
ActiveSheet.Paste
'további utasítások (jó ág)
hiba: 'hiba ág
MsgBox "Nincs mit beilleszteni." + Chr(13) + "Végezd el a kijelölést!", vbCritical, "Figyelem !!!"
Exit SubEz most úgy működik, hogy akár üres a vágólap akár nem a hibaüzenet mindenképpen megjelenik és folytatódik tovább a program. Mintha mindkét ág lefutna függetlenül attól hogy volt-e hiba vagy sem.
Mit rontok el?
-
m.zmrzlina
senior tag
Az lenne a kérdésem, hogy milyen szokásos formája van egy változó értékadásának ha a változó minden értéke egy egy feltétel teljesülésétől függ.
Pl:Sub back_color()
If whatMin_new - whatMin_old < 0,000694 Then backcolor=7
If MeterEvent = "MeterLost" Then backcolor = 4
If MeterEvent = "MeterRecovered" Then backcolor = 3
End SubAzt szeretném, ha az első feltétel igaz, akkor a második kettőt ne is vizsgálja.
Saját ötletből így csinálnám:Sub back_color()
If whatMin_new - whatMin_old < 0,000694 Then
backcolor=7
Exit Sub
End If
If MeterEvent = "MeterLost" Then backcolor = 4
If MeterEvent = "MeterRecovered" Then backcolor = 3
End SubVan-e erre a feladatra bevett profi módszer?
Új hozzászólás Aktív témák
- Napelem
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- Kerékpárosok, bringások ide!
- iPhone topik
- Milyen notebookot vegyek?
- AMD Navi Radeon™ RX 6xxx sorozat
- Politika
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Samsung Galaxy A54 - türelemjáték
- Víz- gáz- és fűtésszerelés
- További aktív témák...
- Új, bontatlan World of Warcraft gyűjtői kiadások
- NORTON 360 for Mobile! 1 eszköz, 1 év! DOBOZOS, BONTATLAN!
- AKCIÓ! Microsoft szoftverek, vírusírtó szoftverek, egyéb szoftverek széles választéka!
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest