-
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
válasz Fferi50 #52313 üzenetére
1. Igazad van, az talán a
.Paste
-nél kell(ene).
2. Ez világos, de én a VBA esetében pont azt nem akartam, hogy képlet kerüljön a cellába. Jobb szeretem úgy, habár nem minden esetben praktikus. (Ha fixen képlet kell, akkor az persze már másik eset.)Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz ratkaics #52303 üzenetére
Szia!
Muszáj képlettel csinálni? Én spec. rühellem a CONCATENATE-et. Használd simán akár függvényeknél, akár VBA-ban az ampersand ("&") jelet. Ha pl. az A1 cella tartalma az, hogy "Stan", a B1 pedig "Pan", akkor az
=A1 & " and " & B1
képlet eredménye "Stan and Pan" lesz (szóközökre figyelni!). Nekem egyszerűbb, áttekinthetőbb. VBA-ban is hasonlóképp tudod megadni, pl.Range("C1") = Range("A1") & " and " & Range("B1")
. Ebben az esetben persze ha frissülne az A1 vagy a B1 tartalma, akkor a C1 celláé nem. Viszont cserébe a cella tartalma egy sztring, nem pedig egy képlet, ami tud praktikus lenni (meg nekem jobban is tetszik).#52311: Egy
Application.CutCopyMode = False
-ot még odaraknék, bár nem muszáj.[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Fferi50 #52196 üzenetére
Vóv, köszi, múkodik!
A
=True
-ra gondoltam, hogy lehet felesleges, de mivel se így, se úgy nem ment, ezért inkább benne hagytam. Neked is köszi Delila!Mit csinál máshogy az
Application
, mint aWorksheetFunction
? Sokan amúgy eleveApplication.WorksheetFunction
-t szoktak írni.Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Készítettem egy UDF-et, ami az n. karakter pozícióját adja meg egy sztringben. Működni működik, de azt szeretném, ha az karakter nem szerepel n-szer, vagy egyáltalán nincs benne a sztringben, akkor egy "Nincs ilyen!" üzenetet küldjön, ne pedig
#ÉRTÉK!
legyen. Erre simán írtam egy If-et:Function Findnth(rng As Range, character As String, n As Integer)
If WorksheetFunction.IsNumber(WorksheetFunction.Find(Chr(160), WorksheetFunction.Substitute(rng, character, Chr(160), n))) = True Then
Findnth = WorksheetFunction.Find(Chr(160), WorksheetFunction.Substitute(rng, character, Chr(160), n))
Else
Findnth = "Nincs ilyen!"
End If
End Function
De valamiért sajnos nem működik így. Nem lehet UDF-be If-et tenni? Hogy lehet megkerülni a problémát? Előre is köszönöm a segítséget!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Event makrókkal próbálnám azt elérni, hogy bizonyos cellákat/oszlopokat csak bizonyos személyek (
Environ("UserName")
-mel kiolvasott név alapján) szerkeszthessenek egy adott (mondjuk "DZS" nevű) munkalapon. Nagyrészt működik is, már csak 1-2 nem annyira jelentős anomália van, amiknek jó eséllyel könnyű a megfejtése, de én egyelőre nem jöttem rá.Az egyik oszlopot (5.) csak C és D személy írhatja, a többit pedig csak A és B, de rajtuk kívül senki más (tehát pl. E és F semmit sem csinálhat). Ehhez egy
Worksheet_Change
makrót használok. Ez most már működik. Viszont azt is szeretném megakadályozni, hogy a korábban pl. az 5. oszlopba a jogosult személyek által bevitt adatokat ki tudják törölni arra nem jogosultak. AWorksheet_Change
makró ugye csak akkor fut le, ha a változás már megtörtént. Tehát kiírja azt, hogy pl. nem lehet szerkeszteni az adott cellát, de addigra az már szerkesztődött. Vagyis vissza kell másolni az eredeti cellaértéket. Erre van egyWorksheet_SelectionChange
makró (nyilván ugyanazon a lapon):Dim origvalue As Variant
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
origvalue = Target
End Sub
Ez csak annyit csinál, hogy tárolja a cella előző értékét, és ha a módosítás/törlés nem megengedett, akkor a
Worksheet_Change
makróval beleírja azt, hogy Target = origvalue. Ez teljesen jól működik, csak az a baj, hogy amikor még csak megnyitod a file-t, akkor azorigvalue
üres, mert nincs seWorksheet_Change
, seWorksheet_SelectionChange
, szóval még mindig ki tudod törölni azon cella korábbi értékekét (file megnyitásonként csak a legelsőt), amelyiken éppenséggel a kurzor áll.Ez ellen kellene egy
Private Sub Workbook_Open()
, amiről most már tudom, hogy aThisWorkbook
-ba kell rakni, és részint működik is, de nem pont úgy, ahogy szeretném:Public origvalue As Variant
Private Sub Workbook_Open()
origvalue = ActiveCell.Value
End Sub
És így az origvalue-ban a megnyitáskor aktív cella értéke tárolódik. Viszont ha nem kattintok sehová, csak del-t nyomok a megnyitás után, akkor mégis ki tudom törölni az értéket.
Próbáltam már többféleképp megoldani, de sehogy se jó. Hogy kellene úgy átírnom, hogy a másik ("DZS") munkalapon lévő kódban is tudjam használni ezt az
origvalue
-t? (Próbáltam azon a lapon isPublic origvalue As Variant
-ként, de az se segített.) Egyszerű megoldás lenne, ha valami üres cellára ugrana megnyitáskor aPrivate Sub Workbook_Open()
, de az egy elég gagyi megoldás lenne.Nagyon köszönöm a segítségeteket!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Így vagy úgy, de fura. Ha munkalapba van téve a kód, akkor nem működik. (Ezt a részét egyelőre nem értem.) ThisWorkbook-ban viszont igen. Egy dolgon kellett módosítani, mert talán nincs simán olyan, hogy Workbook_Close (tulajdonképp logikus), csak olyan, hogy Workbook_BeforeClose:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayFullScreen = False
Application.WindowState = xlMaximized
End SubHa csak a
DisplayFullScreen
van a kódban, akkor ugyan újra megjeleníti a ribbont, viszont ablak méretűvé változtatja a file-t, ezért kell bele aWindowState
is. De akármilyen módban is hagyom ekkor (ribbon mutatás/rejtés, vagy épp ablak/teljes képernyő), a következő file-t annak megfelelően nyitja meg ribonnal vagy anélkül, ablakban vagy teljes képernyőn.Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Egy kis félreértés van, valamelyest becsapós a megfogalmazás.
Van a "teljes képernyő"-nek nevezett nézet, ami annyit csinál, hogy elrejti a menüket, és csak a cellák látszanak (vagyis nagyobb a látható "hasznos" munkaterület). Ezt csinálja az
Application.DisplayFullScreen
. Ez működik akkor is, ha az Excelt csak egy ablakban futtatod, vagy ha az ablakméretet maximalizálod ("teljes képernyős ablak"). A lényeg pedig annyi lenne, hogy a makrót tartalmazó file, ablakban vagy nem ablakban ("teljes képernyőn") futtatva is teljes képernyős nézetben, vagyis menük nélkül induljon.Azt viszont nem szeretném, hogy a teljes képernyős nézet (=rejtett menük) más file-ok megnyitásakor is megmaradjon, ezért kapcsolnám ezt ki a Workbook_Close makróval. De ez utóbbi sehogy se működik...
Remélem most már érthetőbben fogalmaztam; nem vagyok teljesen biztos benne.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Van két event makróm:
Private Sub Workbook_Open()
Application.DisplayFullScreen = True
Application.WindowState = xlMaximized
End Sub
Private Sub Workbook_Close()
Application.DisplayFullScreen = False
End SubAz első azt csinálná, hogy kiteszi teljes képernyőre és teljes képernyős nézetre az Excelt a file megnyitásakor, a második pedig kilépéskor visszaállítaná az eredeti (nem teljes képernyős) nézetet.
De valamiért nem mennek... Ha külön elindítom a makrót, akkor működik, de magától nem. Pedig pont ez lenne a lényege. Makrók futása engedélyezve van. Vajon mi lehet a gond?
Közben kipróbáltam úgy, hogy az adott munkalap helyett a ThisWorkbook lapba másoltam a makrókat. Ekkor már az első működik, de a második, a Workbook_Close nem.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Magnat #48960 üzenetére
"Igazából sztem csak a vba "engedékenységének" köszönhető, h a Vizsgal nélkül nem fut hibára az első körben"
Azt külön lekezeltem, még ha kicsit gagyin is, egy If-fel (összehasonlítás egy fixen üres cellával). De majd lehet, hogy átírom, mert jobban tetszik, amit írtál, csak volt pár apróbb gond az átírásnál, ezért inkább kiszedtem. Az én szintemen már ez is elég bonyolult makró, jól széthúzva már vagy 80-90 sor.
"(Ha meg a ciklus előtt adnál értéket a PreCellnek, pl azt, h PreCell=0, akkor meg az lenne a gond, h ha az első mezőben szintén pont 0 az érték, akkor "Please check"-re fut ok nélkül ... szóval sztem ezért korrekt a Vizsgal változóval)"
(Nem voltam kellően explicit a probléma körülírásával, alapvetően direkt.) Az érték gyakorlatilag nem lehet 0. De még ha az is lenne, az se lenne igazi gond, mert "csak" annyi a jelentősége az összehasonlításnak, hogy felhívja a figyelmet egy esetleges hibára. Elvileg lehetnek azonosak, vagy nagyon hasonlóak az egymás utáni értékek, csak kicsi rá az esély. Van esély fals pozitívra és fals negatívra is, az viszont már a júzer feladata, hogy akarja-e egyáltalán ellenőrizni. Mindenesetre legalább a lehetőség, az automatikus figyelemfelhívás adott hozzá.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bepken #48936 üzenetére
Szia!
Először is szívesen.
Elsőre én is kicsit nehezen értettem meg, pedig amúgy nem annyira bonyolult. Nem teljesen azt adtad meg, amit szerettél volna. Azt mondtad, hogy ha az A oszlop a cél cella (Target) sorában nem üres, akkor írja be a B-be a dátumot. Vagyis ha a cél cella oszlopa nem az A oszlop volt, viszont a sorában az A oszlop nem üres, akkor is frissült a dátum.
Ehelyett az kellett, hogy ha az A oszlopban van a cél cella, akkor (és csak akkor) írjon a B-be, ha az nem üres. Hasonló, de nem ugyanaz.
Használd nyugodtan az ="" (üres) vagy épp <>"" (nem üres) kifekezéseket, illetve ha több feltételed is van, akkor azokat "And"-del vagy "Or"-ral fűzd össze.
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy nem összefüggő tartományba (B2:B10,D2:D10,F2:F10) írok, vagyis olvasok be adatokat makróval. Ez teljesen jól működik, viszont felmerült az kérdésként, hogy az egymás utáni nagyon hasonló értékeket jelezhetné a makró (ha pl. valami véletlenül kétszer került volna rögzítésre). Az "eredmenyek" tartomány mindig üres cellájába írja a szerkesztett adatot ("ertek"). kód:
Set eredmenyek = ActiveSheet.Range("B2:B10,D2:D10,F2:F10")
For Each cella In eredmenyek
...
If cella = "" Then
cella = ertek
Application.Speech.Speak "OK", SpeakAsync:=True
Exit Sub
End If
Az ellenőrzést egyszerűen meg lehet csinálni az esetek többségében, oszlopon belül, csak a fentebbi cella értékét kell kivonni a frissen bemásoltból (offset -1):
If Abs(cella - cella.Offset(-1, 0)) < 1 Then
Application.Speech.Speak "Please check", SpeakAsync:=True
Else: Application.Speech.Speak "OK", SpeakAsync:=True
End If
Csak ugye amikor oszlopváltás van (pl. B-ről D-re), akkor ez nem működik. Lehetne valahogy egyszerűbben az "eredmenyek" tartományra hivatkozva megkeresni az előző írott cellát, tehát pl. a D2-t összehasonlítani a B10-zel?
Nem szép módszerrel meg tudnám oldani:
ha cél cella sor = 2 és oszlop >=D, akkor előző cella sor = 10
és oszlop offset -2
De kell(ene) lennie ettől lennie szebb, univerzális(abb) megoldásnak. Tudnátok ebben segíteni? Előre is köszönöm!Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Ha úgy próbáltam, hogy
Zscore = WorksheetFunction.Norm_S_Inv((WorksheetFunction.Rank(score, cnt, 1)_
_ - 0.5) / WorksheetFunction.Count(cnt))
, akkor már legalább számolt valamit... de nem jót. Aztán átírtam a Long-ot Double-re, és jó lett. Szóval köszi! Tehát:Function Zscore(score As Variant, cnt As Range) As Double
Zscore = WorksheetFunction.Norm_S_Inv((WorksheetFunction.Rank(score, cnt, 1)_
- 0.5)
/
WorksheetFunction.Count(cnt))
End Function
Mondjuk az még érdekes, hogy
WorksheetFunction
nélkül hogy lehetne szebben/rövidebben.Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy sima UDF-et szeretnék írni kvantilis-kvantilis diagram (Q-Q plot) készítéséhez. A lényeg, hogy van egy adattömb, és abból egy-egy adott értékhez számolt Z-érték (x tengely) alapján kell ábrázolni az adatokat (y tengely). Nem is túl bonyolult hozzá a képlet:
=NORM.S.INVERZ((SORSZÁM(C2;C:C;1)-0.5)/DARAB(C:C))
ahol a C2-ben lévő elemnek a Z-értékét számolnám ki a C:C tömbben (nyilván ez lehetne egy meghatározott tartomány is, mondjuk B1:B8). Az UDF pedig a következő lenne:Function Zscore(score As Variant, cnt As Range) As Long
Zscore = "=NORM.S.INV((RANK(score,cnt,1)-0.5)/COUNT(cnt))"
End Function
#ÉRTÉK! hibaüzenetet kapok rá. Valószínűleg több sebből is vérzik, de sajnos nem tudom, hogy mik ezek (cnt is Variant kellene, hogy legyen? vagy kellene mögé, hogy .Value?). Hol vannak ebben a hibák? Előre is köszönöm!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy program segítségével USB kábellel ASCII adatokat olvasok be egy mérőeszközből, egy körben 11 sort, az A oszlopba. Minden újabb beolvasáskor az eredmények az előző után íródnak. (Vagyis mivel hülye a program, ezért valójában a kijelölt cellába, majd onnan lefelé kezd el írni. De ha nem nyúl az ember semmihez, akkor az utolsó mérés után.)
A sorok egyesével, fentről lefelé íródnak. Nekem a 10. sorban lévő cella egy része kellene, ezt már megoldottam.
Egy event makróval próbáltam volna megoldani az automata eredménykiolvasást, de sajnos nem sikerült. A lényeg az lett volna, hogyha a Target cella tartalmának az eleje egy adott sztring, akkor abból a cellából szedje ki az eredményt és másolja be egy másikba.
És itt talán, vagy többek között a soronkénti léptetéssel van baj, egyszerűen nem működik az event makróval. A kód nagy része viszont jó, mert egy sima Sub-ban lefuttatva tulajdonképp működik. A kulcs valószínűleg a 2 alsó sor nem működésében van:
Private Sub Worksheet_Change(ByVal Target As Range)
...
Set Target = Columns("A")
If Left(Range("A" & Target.Row), 4) = "Data" Then
A Target.Row-t valamiért fixen 1-nek veszi, nem "lépteti". Azt hogy lehetne megoldani? (A sorok egyesével íródnak.)
Előre is köszi a javaslatokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy olyan diagrammot szeretnék készíteni Excelben, amilyet talán nem lehet, vagy legalábbis nekem sajnos ötletem sincs rá. A lényeg, hogy van egy táblázat, amiben (a példa kedvéért) különböző bérelhető autók használatát próbálnánk ábrázolni egy adott időszakra (mintakép lentebb).
A táblázat úgy néz ki, hogy az A oszlopban van az autó típusa, a B oszlopban a használat dátuma (pl. 2019. március 18.), a C oszlopban a használat kezdete (pl. 11:20), a D oszlopban pedig a használat hossza (pl. 5:30 óra - ergo a jelen példánál maradva a kocsit 11:20 és 16:50 között használták). Minden egyes használat/karbantartás külön sor, tehát egy-egy autó annyiszor szerepel a táblázatban, ahányszor történt vele valami. Ez külön probléma a
Mivel a kezdő időpont sincs konkrétan megadva (B és C oszlop kombinációja), a vége meg végképp nincs (B oszlop és C+D összegének kombinációja), ezért az időpontok ábrázolása segédoszlopok nélkül aligha fog menni. Ez mondjuk még oké (bár jobb lenne anélkül). Amit viszont kapni szeretnék, az valami ilyesmi:
Azért van kétféle szín (kék és piros), mert az egyik a használatot mutatja, a másik meg a karbantartást. (A karbantartási adatok ráadásul - igaz, hasonló struktúrában, de másik munkalapon vannak.)
A kérdés pedig az lenne, hogy lehet-e, és ha igen, akkor hogyan, a fentihez hasonló ábrát készíteni Excelben? (A fenti mintát rajzoltam.) Próbáltam ehhez hasonlót találni a neten, de sajnos nem sikerült .
Előre is köszönöm, hogyha van valamilyen ötletetek. Másik programban talán meg tudnám oldani (OriginLab Origin), de egyrészt talán abban se , másrészt meg az nincs a munkahelyünkön, szóval irreleváns.
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.
-
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
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.
-
bteebi
veterán
válasz Bocimaster #40572 üzenetére
Ha egybefüggő a tartomány, akkor nem kell (egérrel) lehúznod a képletet, hanem elég, ha a képletet tartalmazó cella jobb alsó sarkához mész az egérkurzorral. Ha az egérmutató egy kis fekete keresztté változik, és duplán kattintasz a bal egérgombbal, akkor lemásolja a képletet/cellatartalmat az összefüggő tartomány aljáig. Ha az 10 sor, akkor 10 sor, ha 50000, akkor 50000.
Ha nem egybefüggő a tartomány ("szakadás" van benne), de az egyszerűség kedvéért egyben akarod lemásolni a képletet, akkor ctrl+C-vel tedd a vágólapra a képletet tartalmazó cellát. A ctrl+nyilak segítségével fel-le, jobbra-balra tudsz ugrálni. Az ugrálgatással keresd meg az utolsó sort (pl. ctrl+le, majd egyet balra, és ctrl+fel nyíl, ezzel elvileg megtaláltad az utolsó sort), majd vissza a képletet tartalmazó sorba (a jelen példánál maradva egyet jobbra), majd ctrl+shift+felfelé nyíl (a shift ugye azért kell, hogy kijelöld a cellákat, amikbe le akarod másolni a képletet). Addig nyomd a felfelé nyilat, amíg el nem éred a másolt cellát, majd ekkor vagy ctrl+v-t, vagy entert nyomsz, és kész is van. (Ha a képletet tartalmazó oszlop a legszélső, és nincs az oszlopban semmi más, akkor nem kell többször megnyomnod a felfelé nyilat, mert kapásból a másolt cellára kell ugrania.)
Leírva talán bonyolultan hangzik , de ha kipróbálod, akkor majd rájössz, hogy milyen egyszerűen működik. Kezdetnek nyomkodd a ctrl+nyilakat össze-vissza, aztán az ugrálásokra ráérezvén majd meg tudod egyszerűen oldani a képlet, vagy bármi másnak a másolását.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Szia!
Kipróbáltam, működik . Le a kalappal a képletek előtt, a nagyobb részüket már meg is értettem.
Aztán a végén véletlenül szinte biztos, hogy találtam egy hibát: a K oszlopban lévő képlet látszólagosan figyelmen kívül hagyja az autótípust, és a márka és szín alapján szűr (bár azok alapján, arra a két paraméterre, jól):
Az ELTOLÁS függvény és a névkezelő viszonyát nem értettem, ezért erről beteszek egy képet:
Az Érvényesítésnél meg ez van:
Ettől teljesen függeltenül írtam egy makrót, ami egyelőre látszólag teljesen jól működik, és némi hibakezelés is van benne. Bemásolom ide, még jó kiindulási alap lehet másnak.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rendszamok As String
Dim sor As Long
Dim usor As Long
'utolsó sor megkeresése
usor = Sheets("Feladat").Cells(Sheets("Feladat").Rows.Count, 1).End(xlUp).Row
For sor = 2 To usor
'Oszlopok összehasonlítása és a megfelelő rendszámok hozzáadása a rendszamok nevű listához
If Sheets("Feladat").Cells(sor, 1) & " " & Sheets("Feladat").Cells(sor, 2) & ", " _
& Sheets("Feladat").Cells(sor, 3) = Sheets("Feladat").Range("F2") Then
rendszamok = rendszamok & Sheets("Feladat").Cells(sor, "D") & ","
End If
Next sor
'Ha valamiért nem lenne megtalálható az adott típus, pl. hibás adatbevitel, akkor lépjen ki
If Len(rendszamok) < 1 Then
Application.EnableEvents = False
With Sheets("Feladat").Range("G2")
.ClearContents
.Validation.Delete
End With
Application.EnableEvents = True
MsgBox Sheets("Feladat").Range("F2") & " típusú autó" & vbCr & "nincs a listában. Ellenőrizd.", vbCritical, "Hiba!"
Exit Sub
Else
'Az utolsó vessző eltávolítása
rendszamok = Left(rendszamok, Len(rendszamok) - 1)
End If
'legördülő lista létrehozása a "rendszamok" nevű lista elemeivel
With Sheets("Feladat").Range("G2").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=rendszamok
End With
End SubHa van találat:
Ha nincs találat:
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz temporello #40533 üzenetére
Szia!
A felvetés nem rossz, igazából nem gondoltam rá. Az is lehetne egy megközelítése a problémának, makrónál még esetleg lehet hasznos. De hogy relatíve rövidre zárjam: a user friendlység miatt se jó, meg amúgy a valós probléma ettől egy kicsit komplexebb.
#40534: Nagyon köszönöm a részletes választ, mindenképp ki fogom próbálni , bár már leghamarabb is csak holnap este lesz rá lehetőségem. Majd megírom, hogy (hogy) sikerült adaptálnom.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok! Egy feltételes legördülő listát szeretnék készíteni. A probléma kicsit általánosítva így néz ki:
Szóval van egy lista, autómárkával, típussal, színnel és rendszámmal. Amit el szeretnék érni, az az, hogy ha egy külön cellába (a képen az F2) beírom a pontos típust és a színt, akkor a mellette lévő cellában legyen egy legördülő lista, ami a pontos típushoz tartozó rendszámokat tartalmazza, hogy azok közül könnyen lehessen választani.
Ezt ugyebár szépen magyarul dependent dropdown-nak hívják, és korábban már én is csináltam egy-két egyszerűbbet, de itt most attól függetlenül, hogy az autók paraméterei 3 oszlopban (A, B és C) vannak, és nem csak egyben, egyszerűen valamiért nem tudom elérni, hogy működjön.
Rákerestem neten, és több forrás az INDIREKT függvényt használta a legördülő listához tartozó képletben, de azzal se tudtam megoldani. Próbáltam még kombinált FKERES-sel (=HA(F2<>"",FKERES(F2,Lista,1,HAMIS) & " " & FKERES(F2,Lista,2,HAMIS) & ", " & FKERES(F2,Lista,3,HAMIS),""), de az se működik, a lenti képen is látható hibaüzenetet kapom. (A "Lista" a teljes tartomány neve, ami a képen az
A2:D33
tartomány).Makróval macerásan, kerülő úton minden bizonnyal meg tudnám oldani, hogy működjön (végig lépegetve az összes soron, és a feltételeknek megfelelő rendszámokat egyesével hozzáadni a legördülő lista elemeihez), de nagyon lassú lenne.
Esetleg van valami ötletetek, hogy hogyan lehetne (lehetőleg makró nélkül) megoldani? Előre is köszönöm a segítségeteket!
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
A munkahelyemen bevezették a munkaidő nyilvántartását, Excelben. Egy hét egy munkalap, külön-külön file van minden munkavállalóhoz minden hónapra (kis cég). Minden bizonnyal nem ez a legpraktikusabb megoldás, de egyelőre ez van (persze ha van rá egyértelműen jobb ötletetek, ne tartsátok vissza ). A feladat pedig kimutatások, összegzések készítése lenne, pl. hogy melyik munkavállaló mennyi időt töltött az adott tevékenységgel az adott projektben. A mintaképpel remélhetőleg érthetőbb lesz:
Szóval olyan kimutatások lennének, hogy pl. Gipsz Jakab az A projekt F tevékenységével 11 órát töltött (1-et hétfőn és 10-et kedden), akárcsak a C projekt H tevékenységével (3+8). Na alapvetően ez kellene leginkább havi lebontásban (de akár hetiben is), első körben munkavállalónként. Valószínűleg egy külön file-ba jobb lenne elkészíteni, és akkor abból lehetne projektenkénti összesítést is készíteni - tehát hogy az összes munkavállaló mennyit dolgozott az adott hónapban az adott projekt adott tevékenységein és összességében, akár heti/havi lebontásban is.
Remélem érthető , nem vagyok benne teljesen biztos . Elkezdtem rá írni egy makrót, de aztán elgondolkoztam azon, hogy a pivot table talán pont erre való (vagy nem), ahhoz viszont egyáltalán nem értek. Szóval a kérdésem az lenne, hogy makróval álljak-e neki, vagy van erre egy jobb, valamelyest automatizálható/beépített funkció?
Előre is köszönöm a javaslatokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Delila_1 #38044 üzenetére
Excelben igen (azt még én is tudtam , de persze köszönet azért is ), de nekem az kellene, hogy a Wordben lévő összes fej- vagy láblécben (is, tehát mindenhol) tudjam szerkeszteni az adatokat, cserével, Excelből (Excel VBA-val). A csere (replace all) maga működik, de csak a szövegtörzsben.
Tehát ha például azokat az elemeket, hogy "Város1" le akarom arra cserélni, hogy például "Nagykanizsa", akkor az működik a Word file szövegtörzsében, de a fej/láblécben nem megy. Ez a probléma, remélem így már (nem félre)érthető . Bocsánat az esetleg pontatlan megfogalmazásért .
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy Excel file "Csereadat" munkalapján lévő cellák tartalmával (cserélendő szöveg az 1., csereszöveg a 2. oszlopban) szeretnék egy Word file-ban szavakat kicserélni. Itt van hozzá a makróm:
Sub OpenDoc()
Dim ablak As FileDialog
Dim WordApp As Object
Dim WordDoc As Object
Dim fname As String
Const wdReplaceAll = 2
Dim NumRows As Integer
Dim ChRow As Integer
Set ablak = Application.FileDialog(msoFileDialogFilePicker)
If ablak.Show = True Then
fname = ablak.SelectedItems(1)
Else: Exit Sub
End If
Application.ScreenUpdating = False
Application.EnableEvents = False
Set WordApp = CreateObject("Word.Application")
Set WordDoc = WordApp.Documents.Open(Filename:=fname)
NumRows = Sheets("Csereadat").UsedRange.Rows.Count
For ChRow = 2 To NumRows
With WordDoc.Content.Find
.Execute FindText:=Sheets("Repeated data edited").Cells(ChRow, 1), _
ReplaceWith:=Sheets("Repeated data edited").Cells(ChRow, 2), Replace:=wdReplaceAll
End With
Next ChRow
Application.ScreenUpdating = True
Application.EnableEvents = True
With WordApp
.Visible = True
.Activate
End With
Set ablak = Nothing
End SubAlapvetően jól működik, egyetlen problémával. Csak a szövegtörzsben cseréli ki a szöveget, a fejlécben és a láblécben nem. Word VBA-val találtam rá megoldást (wdStoryRange), de Excellel nem tudtam megoldani. Tudnátok tanácsot adni? Előre is köszönöm!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz pigster #36235 üzenetére
Nem, már megvan a megfejtés. Elég idegesítő . A lényeg az, hogy két cellában (a 11000 sorból) hiba volt, és azoknál így nem tudott értéket adni a len-nek. És emiatt szállt el az egész. Szóval végig jó volt, csak a forrásadatban volt hiba . Amúgy magyar Excel 2010-em van, és nagyon oda szoktam figyelni, hogy ne úgy nevezzem el a változóimat, hogy ilyen problémák felmerülhessenek. De a felvetés teljesen jogos volt .
Amúgy vicces, ahogy rájöttem. Message box-ot beletéve, minden sor eredményét kiíravta lefuttattam a ciklust 10 sorral, és úgy lefutott hiba nélkül. Ahogy 100, 1000 és 5000 sorral is. 8000-rel viszont már nem, mert 7800 körül volt az első hiba. (Csv-ből lettek az adatok beolvasva, és a kötő- és egyenlőségjel okozott gondot.)
Még egyszer köszönöm mindkettőtök segítségét!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Fferi50 #36229 üzenetére
Dim chars as Long
, a cikluson kívül meg van adva az értéke (0), a makró előtt megOption Explicit
van. ALen(sh.Cells(sor, 5))
eredménye meg szám, message box kiírja, szóval nem értem, hogy achars = chars + Len(sh.Cells(sor, 5))
már miért nem jó . Achars
-nak ugyan elfelejtettem kezdőértéket adni (bár az akkor automatikusan 0, nem?), de ha meg is adom ugyanott, ahol a többi változónak, akkor is type mismatch ...[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy adott tartományban, bizonyos feltételeknek eleget tevő cellákban szeretném megszámolni a karakterek számát. Egy apróságtól eltekintve működik. Ez pedig:
chars = chars + Len(sh.Cells(sor, 5))
A
chars
longként van megadva, akárcsak asor
, szóval elvileg kellene működnie, de nem megy. Type mismatch. Message box-szal működik aLen(sh.Cells(sor, 5))
, de a szintén long típusú változóhoz nem tudom hozzáadni. (Ash
is jól van megadva, máshol működik:Dim sh As Worksheet, Set sh = ThisWorkbook.Sheets("Stat")
). Mi lehet a gond? Köszönöm a megfejtést!Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Krogoth #34895 üzenetére
Ez ugyan az autoszűrőre, és a teljes használt tartományra van, de az
ActiveSheet.UsedRange.AutoFilter
paranccsal ki, és be is lehet kapcsolni a szűrőt. Gondolom irányított szűrőnél is valami hasonló van - makró rögzítővel ki lehet próbálni. Ezt egy Worksheet_Change eventhez kell rendelned, amiben a változandó sorra/oszlopra hivatkozol. Amennyiben annak az értéke megváltozik, akkor fusson le a makró, ami ki, majd visszakapcsolja a szűrőt.Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz vandeminek #34897 üzenetére
Szia!
Én mondjuk sajnos nem nagyon értek a pivot táblákhoz, de szerintem egy teszt munkafüzetben vedd fel makró rögzítővel az általad végzett módosításokat, az lehet egy viszonylag jó kiindulási alap. Egyébként - nekem legalábbis - kicsit körülményes elképzelni, hogy pontosan mi is a gond, egy mintafájl (dummy adatokkal) sokat segíthetne a megértésben. De persze lehet, hogy valaki tőlem jóval okosabb nemsokára megmondja a megfejtést . Ha nem, akkor szerintem kellhetne a mintafájl...
#34896: Lefagy, megáll? Nem lehet, hogy csak sok idő kell neki? Talán hülyeség, de ha egy mód van rá, én kipróbálnám másik Office verzióval is, leginkább talán a 2010-zel.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Mértékegység konverziót szeretnék végezni a g-mg-µg-ng-pg tartományban. Azt szeretném, hogyha mondjuk beírom azt, hogy valami hány mg, akkor számolja ki az általam megadott mértékegységben az értékét. Az érték az A1 cellában, a mértékegysége a B1-ben, az eredmény az A2-ben, a mértékegysége pedig a B2-ben lenne. Képlettel szeretném megoldani, lehetőleg segédoszlopok (és makró) nélkül. Egyelőre a legjobb ötlet, ami eszembe jut, az az egymásba ágyazott HA függvények kezelhetetlen hosszúságú sora lenne. Az viszont rendkívül hosszú lenne, alapból már szerintem nem is bírná kezelni az Excel, hiszen minden mértékegységnél meg kellene az összes mértékegységre az átszámolást, ami összesen 25 lehetőség.
Van valami jobb ötletetek? Vagy marad a makró? Előre is köszönöm!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz csferke #33664 üzenetére
A pdf az egy érdekes probléma. Nézd meg az oldal/margóbeállításokat. Esetleg azt próbáld meg, hogy a két képet összegyúrod egybe, és úgy teszed be, hátha az segít. Sajna a konkrét file nélkül nehéz segíteni, bár azzal együtt se biztos, hogy menne...
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Delila, Fferi, nagyon köszönöm mindkettőtöknek! Holnap jobb esetben (ha nem leszek beteg) ki is fogom próbálni mindkettőt.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
-
bteebi
veterán
Sziasztok!
Írtam egy olyan makrót, amivel egy adott sorban lévő adatokat tudok átmásolni egy másik lap utolsó sorába úgy, hogy az eredeti helyről törlöm őket, vagyis effektíve "archiválom" az adatokat:
Public rwind As Long
Private Sub Worksheet_Change(ByVal Target As Range)
Dim valasz As String, firstemptyrow As Long
If Target.Column = 6 Then
rwind = Target.Row
If Target = "Archiválható" Then
valasz = MsgBox("Szeretnéd archiválni?", vbYesNo, "Archiválás")
If valasz = vbYes Then
firstemptyrow = Sheets("Archivált").Cells(Sheets("Archivált").Rows.Count, 2).End(xlUp).Row + 1
Range(Sheets("Adatok").Cells(Target.Row, 2), Sheets("Adatok").Cells(Target.Row, 6)).Copy Destination:=Sheets("Archivált").Cells(firstemptyrow, 2)
Range(Sheets("Adatok").Cells(Target.Row, 2), Sheets("Adatok").Cells(Target.Row, 6)).Delete Shift:=xlUp
Else: MsgBox "Nem lett archiválva!", vbOKOnly, "Archiválás"
End If
Sheets("Adatok").Cells(rwind, 2).Select
End If
End If
End SubElső közelítésben teljesen jól működik. Két "probléma" van vele: ha megosztom a munkafüzetet (sokan használnák), akkor nem működik az archiválás, mert - gondolom - az "Archivált" lapon nem tudja megtalálni az utolsó sort. Valahogy meg lehetne ezt kerülni?
A másik kérdésem pedig az lenne, hogy hogy lehet olyat csinálni, hogy egy szöveg egy adott ideig (pl. 5 másodpercig) legyen csak kiírva, utána pedig eltűnjön? Ha jól gondolom, akkor ilyet message boxszal sehogy se lehet csinálni.
Előre is köszönöm a javaslatokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz excelproblem #32407 üzenetére
Talán kicsit hülyén hangzik, de akkor lehet, hogy olyasvalamit keresel, ami gyakorlatilag nincs is ott, bár elvileg ott kellene lennie...
Az Origint (demo verzió innen) viszont mindenképp nézd meg. Rengeteg beépített függvénye van, talán olyat is találsz, ami egy az egyben erre a feladatra való (de amúgy custom függvényeket is lehet vele modellezésre használni). Amit első körben próbálnék ki vele, az egy másodrendű exponenciális függvény illesztése a csökkenő szakaszra (valószínűleg nem kis hibával terhelt, bár némi szerencsével elég jól megtalálható az ideális megoldás), ahol is a második exponenciálisnál kapott x (idő) érték adná meg azt, amit szeretnél. Talán.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz excelproblem #32405 üzenetére
Ez igazából nem Excel probléma, és nem is Excelnek való probléma. Az OriginLab Origint ajánlanám erre, ami azt hiszem egy az egyben tud deriválni - ami ennél a feladatnál nem ártana, mert ha jól gondolom, akkor tulajdonképp első körben egy inflexiós pontot keresel, ami az első deriváltnál a maximális érték, a másodiknál pedig nulla. Az egy simítás/exponenciális illesztés után minden bizonnyal könnyebben menne. Meg a logaritmikus ordinátát is meg lehetne próbálni. De ha nem ismered, akkor is nézd meg az Origint, azt hiszem van demo verziója. Addiktív . Mondjuk deriválni talán az Excel is tud (manuálisan mindenképp), szóval azon keress maximumot. Gondolom.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Kicsit rendhagyó, mert igazából Worddel kapcsolatos, viszont VBA-s kérdés, úgyhogy szerintem érdemesebb itt feltenni, mint a Word topikban. Van egy Word file, ami a lenti makrón felül mezőket tartalmaz. Azt szeretném, hogy egy dialógusból kiválasztott másik Word file-ban a megegyező nevű mezők tartalmát felülírja a kiindulási file-ban lévő értékekkel.
Ez utóbbinál akadtam el. Elvileg egy mezőnek a
ActiveDocument.Fields(n).Result
adja meg az értékét, így például aMsgBox mezo.Result
működik is, viszont arra, hogymezo.Result = "1"
Type mismatch hibakódot kapok. Ezen kívül azt se tudom, hogy azt hogy lehetne megcsinálni, hogy (csak) azoknak a mezőknek a tartalmát írja felül a makró a megnyitandó file-ban, amiknek az eredeti file-ban is ugyanaz a neve (pl. Cim1, Cim2, stb.). A meglévő kód:Sub MezoToltes()
Dim innen As Document, ide As Document, mezo As Field, WordApp As Application
Set innen = ActiveDocument
Set ablak = Application.FileDialog(msoFileDialogOpen)
ablak.Filters.Clear
ablak.Filters.Add "Word dokumentumok", "*.doc*"
ablak.Title = "Válaszd ki a feltöltendő file-t"
ablak.InitialFileName = innen.Path
ablak.InitialView = msoFileDialogViewList
ablak.FilterIndex = 1
filechosen = ablak.Show
If filechosen = -1 Then
fajlnev = ablak.SelectedItems(1)
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open fajlnev
WordApp.Visible = True
Else: Exit Sub
End If
For Each mezo In innen.Fields
mezo.Result = "1"
Next mezo
innen.Fields.Update
End SubElőre is köszönöm a javaslataitokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bsasa1 #32244 üzenetére
Működik is, köszönöm . Igazából nem tudom, hogy miért nem gondoltam rá, pláne úgy, hogy amúgy a DARABTELI megvolt ... Ez az oldal egyébként tele van hasznos DARABTELI példákkal (többek között wildcard-okkal), szerintem kifejezetten érdemes megnézni.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bsasa1 #32242 üzenetére
Szia! A kép egy minta a G oszlopban a helyes megoldással. Tehát azt szeretném kapni képlettel, amiket kézzel beírtam oda. Megcsináltam makróval, és működik is, de macerás és lassú (200 soron 5 tétellel tesztelve legalább 5 másodperc...). Egyébként tudom, hogy nem magyaráztam túl jól , ezért most egy kicsit tovább ragozom:
- labda: egy rendelés hiányzik csak (a többinél van rendelési időpont a B oszlopban)
- zokni: minden meg van rendelve, 0 db van hátra
- nadrág: 2 rendelés hiányzik (az A6 és az A7, az A5 rendben van)Remélem így már érthető(bb). Az bosszant, hogy majdnem teljesen biztos vagyok benne, hogy meg lehet(ne) oldani egy relatíve egyszerű képlettel (leginkább Fferi és Delila szokott olyanokat írni), csak nem tudom, hogy hogyan .
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok! Az A oszlopban különböző rendelési tételek vannak felsorolva, a B oszlopban lévő cella pedig vagy üres, vagy egy dátum van benne attól függően, hogy meg lett-e rendelve az adott tétel. A termékek (pl. labda) egyesével fel vannak sorolva az F oszlopban (F1-től lefelé). Azt szeretném összeszámolni a G oszlopban, hogy az adott termékhez hány aktív (nem teljesített) rendelés van. Ha azt feltételezzük, hogy az A1:A100 tartományban vannak a rendelések, akkor a darabtelivel könnyen meg lehet számolni, hogy hány termékrendelés van összesen, azt viszont nem tudom (csak makróval - és úgy sajnos nagyon lassú), hogy hogy lehetne meghatározni csak az aktív (nem teljesített) rendelések számát. Nem tudom, hogy mennyire volt érthető, amit írtam, ezért feltöltöttem egy képet is.
Előre is köszönöm a segítségeteket!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok! Egy adott értéket (ami a D8-as cellában található) szeretnék megkeresni egy makróval megnyitott, elég sok lapot tartalmazó munkafüzetben. Azt szeretném, hogy a keresett értéket tartalmazó cellára ugorjon a makró (elvileg csak egy ilyen cella van). A keresés része nem működik. Megnéznétek, hogy mi a gond vele? Előre is köszönöm!
Sub holvan()
Dim srch As String, ws As Worksheet
srch = ActiveSheet.Range("D8")
Workbooks.Open Filename:="D:\proba\minta.xls", ReadOnly:=True
For Each ws In Workbooks("minta.xls").Worksheets
Set found = ws.Cells.Find(What:=srch, LookIn:=xlValues, LookAt:=xlPart)
Next ws
End SubCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Delila_1 #32173 üzenetére
Ezt is köszönöm!
Végül összeállt minden, és jó is lett. Bemásolom ide a végső kódokat:
Sub listakereso()
Dim datum As Long, file As Variant
datum = ActiveSheet.Range("C4")
file = Dir("D:\Proba\lista_" & datum & "*.pdf")
Do While (file <> "")
UserForm1.ListBox1.AddItem file
file = Dir()
Loop
If UserForm1.ListBox1.ListCount = 0 Then
MsgBox "Nem találom a listát!", vbExclamation
Exit Sub
End If
UserForm1.Show
End SubAz OK gombhoz rendelve pedig:
Private Sub ButtonOK_Click()
Dim sor As Integer
For sor = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(sor) = True Then
Shell CreateObject("Wscript.Shell").RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe\") _
& " /A " & Chr(34) & "&zoom=95" & Chr(34) & " " & Chr(34) & "D:\Proba\" & ListBox1.List(sor) & Chr(34), vbNormalFocus
End If
Next sor
Unload Me
End SubLényeges elem, hogy bár a kiválasztást a
ListBox1.Selected(sor)
adja, a listaelem nevét viszont aListBox1.List(sor)
- időbe telt, amíg megtaláltam .Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Delila_1 #32170 üzenetére
Nagyon köszönöm! Már majdnem teljesen jól működik . A UserForn-on létrehoztam egy OK és egy Cancel gombot. A Cancel gombbal csak be akarom zárni a formot, és megszüntetni a kijelölést/törölni a listát. Ha jól gondolom, akkor arra jó ez a két sor:
UserForm1.Hide
UserForm1.ListBox1.ClearA ListBox-ban kijelölt elem(ek)re egyébként hogy kell hivatkozni (engedélyeztem a MultiSelect-et)? Én azt hittem, hogy a
ListBox1.Selected
jó lesz erre, de azzal nem működik, "Argument not optional" hibaüzenetet kapok. Hogy kellene hivatkoznom rá?Shell CreateObject("Wscript.Shell").RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe\") _
& " /A " & Chr(34) & "&zoom=95" & Chr(34) & " " & Chr(34) & "D:\Proba\" & ListBox1.Selected & Chr(34), vbNormalFocusCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Fferi50 #32163 üzenetére
Köszönöm! Módosítottam a makrót, így már egy dropdown-ba (vagy bármi másba) ki tudom gyűjteni a file-okat az általad megadott módon. Hogy lehetne ezt megjeleníteni egy message/input boxban?
Sub listakereso()
Dim datum As Long, file As Variant, lista As String
datum = ActiveSheet.Range("C4")
file = Dir("D:\Proba\lista_" & datum & "*.pdf")
lista = ""
Do While (file <> "")
If lista = "" Then
lista = file
Else
lista = lista & "," & file
End If
file = Dir()
Loop
With ActiveSheet.Range("C5").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:=lista
.IgnoreBlank = True
.InCellDropdown = True
End With
If lista = "" Then
MsgBox "Nem találom a listát!", vbExclamation
End If
End SubCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
-
bteebi
veterán
Sziasztok! Egy mappából szeretnék egy cellában megadott file-t megnyitni. A file-ok elnevezése lista_"dátum".pdf, pl. lista_201601.pdf. A dátumot kérem be a C4-es cellába. Ezt a makrót írtam hozzá:
Sub listakereso()
Dim datum As Long
datum = ActiveSheet.Range("C4")
If Dir$("D:\Proba\lista_" & datum & ".pdf", vbDirectory) <> "" Then
Shell CreateObject("Wscript.Shell").RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe\") & " /A " & Chr(34) & "&zoom=" & 95 & Chr(34) & " " & Chr(34) & "D:\Proba\lista_" & datum & ".pdf" & Chr(34), vbNormalFocus
Else
MsgBox "Nem találom a listát!", vbExclamation
End If
End SubTeljesen jól működik - vagyis működne -, viszont a file-oknak esetenként több verziója van (és mindegyik verzió benne van a mappában), a fenti példánál maradva pl. lista_201601 v1.pdf (és akár v2, v3, stb.). Emiatt szükség van arra (?), hogy egy loop-pal végignézze az összes file-t:
Sub listakereso2()
Dim datum As Long, file As Variant
datum = ActiveSheet.Range("C4")
Do While (file <> "")
If Mid(file, 7, 6) = datum Then
Shell CreateObject("Wscript.Shell").RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe\") & " /A " & Chr(34) & "&zoom=" & 95 & Chr(34) & " " & Chr(34) & "D:\Proba\" & file & Chr(34), vbNormalFocus
Exit Sub
End If
file = Dir()
Loop
MsgBox "Nem találom a listát!", vbExclamation
End SubEz azonban még mindig csak ugyanazt csinálja, amit az előző makró, csak jóval bonyolultabban. A feladat pedig igazából az lenne, hogy a legutolsó file verzió nyíljon meg. Ennél viszont már sajnos elfogy nálam a tudomány. Tudnátok ötletet adni arra, hogy hogy lehetne folytatni?
A legideálisabb megoldás egyébként az lenne, ha pl. egy message boxba (vagy input boxba) össze lenne gyűjtve az összes file verzió (beleértve az eredeti file-t is), és pl. egy radio button-nel (vagy esetleg drop down-nal) lehetne kiválasztani a megfelelő file-t.
Előre is köszönöm a segítségeteket!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Talán már többször is előjött Excelben az értékes jegyekkel való számolás, értékes jegyre való kerekítés problémája. Rákerestem, de nem találtam rá igazi leírást itt a fórumban, úgyhogy írok egyet én. Legalább háromféle módszerrel találkoztam, amit szoktak rá használni. Abból a legelső egyértelműen rossz (azt végül inkább nem írom le, mert tutira azt találná meg mindenki ), a második majdnem jó (a 0-kat nem teszi be értékes jegynek, tehát pl. a 0,01 három értékesre is 0,01 marad, nem pedig 0,0100), a harmadik pedig teljesen jó - "csak" annak a végeredménye nem szám, hanem szöveg (eggyel megszorozva természetesen szám lesz, csak akkor a fentebb írt probléma szintén megmarad). A képletek (A2-ben van a kerekítendő szám, a SignificantDigits pedig az értékes jegyek száma):
=KEREKÍTÉS(A2;SignificantDigits-INT(LOG(ABS(A2)))-1)
=FIX(A2; SignificantDigits-INT(LOG10(ABS(A2)))-1;IGAZ)Az első képlet a második módszer, a második pedig a harmadik . Remélem érthető. Ez utóbbira írtam egy egyszerű függvényt is:
Function Sigdig(number As Range, SigDigits As Integer)
Sigdig = WorksheetFunction.Fixed(number, SigDigits - Int(WorksheetFunction.Log10(Abs(number))) - 1, True)
End FunctionEz pedig úgy működik, hogy:
=Sigdig(A2;3)
Egy problémám van vele. Azt hogy lehet megoldani, hogy számot és tartományt is meg lehessen adni a képletben? Mert vagy ez működik, vagy az. Meg hogy lehetne azt megcsinálni, hogy szám legyen a végeredmény (ez esetben a fenti megjelenítési hiba nem zavarna), ne pedig szöveg? Előre is köszönöm a javaslatokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bteebi #31761 üzenetére
Sziasztok!
Végül sikerült megoldanom . Megosztom, hátha valakinek jó lesz ötletet nyerni.
Sub szamkereso()
Dim azonosito As Long, elso As Long, pageno As Integer, file As Variant
azonosito = ActiveSheet.Range("A1")
file = Dir("D:\proba\" & "*.pdf")
Do While (file <> "")
If Mid(file, 5, 6) < azonosito And Mid(file, InStrRev(file, "szam") + 4, 6) > azonosito Then
elso = Mid(file, 5, 6)
pageno = 1 + Int((azonosito - elso) / 10)
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate ("D:\proba\" & file & "#page=" & pageno)
Set IE = Nothing
End If
file = Dir()
Loop
End SubEgy apróságot leszámítva tökéletesen működik - ez pedig az adott oldalszámra ugrás. Úgy tűnik, hogy 1.4-es és 1.5-ös verziójú pdf-ekkel működik, de az 1.6-tal már nem (nem ugrik arra az oldalra, amelyikre kellene, csak az első oldalt nyitja meg). Van arra ötletetek, hogy miért lehet ez, vagy hogy át lehet-e valahogy állítani? Igazából az a kérdés, hogy ez szkennelési beállítástól függ(het)-e, vagy pedig a pdf verziójától?
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bteebi #31760 üzenetére
Közben jobb esetben már közeledek a megoldáshoz, bár majd csak holnap fogom tudni tesztelni.
While (file <> "")
If Mid(file, 5, 6) < azonosito And Mid(file, InStrRev(file, "szam") + 4, 6) Then
elso = Mid(file, 5, 6)
pageno = 1 + Int((azonosito - elso) / 10)
End If
file = Dir
WendCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bteebi #31759 üzenetére
Kicsit megviccelt az oldal meg a laptopom, de végre eljutottam oda, hogy megírjam azt, amit eredetileg is szerettem volna. Szóval egy adott listaelemet szeretnék megtalálni egy adott mappában lévő pdf file-ok között. A listaelemre (általános formája: szam123456) az A1-es cellában keresek rá, majd azt szeretném, hogy a makró megkeresse azt a pdf file-t a mappában, amelyik tartalmazza ezt az elemet. Van egy fix elérési útvonal (a példában a D:\Minta\ mappa), amiben különböző hosszúságú szkennelt pdf-ek vannak. A pdf file-ok elnevezése nagyjából egységes. Az fix bennük, hogy tartalmaznak két számot, az első és az utolsó szkennelt elem értékét (pl. "szam123451-szam123680.pdf"). A fenti példánál maradva pl. a szam123456 nevű elem ebben a "szam123451-szam123680.pdf" nevű file-ban található meg.
Egyelőre az előző hsz-emben lévő kezdetleges makróm van. Ha abban tudnátok segíteni, hogy hogy lehetne megkeresni a file-t a mappában, akkor a többi részt már meg tudnám írni. Előre is köszönöm a segítségeteket, javaslataitokat! Remélem érthetően fogalmaztam .
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Halálra szívat a laptopom meg a szerkesztési idő, bocsánat .
Valószínűleg nem tudom majd a szerkesztési idő alatt befejezni a hsz-em szerkesztését, de legalább addig is valami félig-meddig értelmes dolog legyen itt:
Sub szamkereso()
Dim azonosito As Integer, pageno As Integer
azonosito = Mid(ActiveSheet.Range("A1"), 5, 6)
Const path = "D:\Minta\szam123451-szam123680.pdf"
pageno = 5
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate (path & "#page=" & pageno)
Set IE = Nothing
End Sub[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy fix mappában lévő pdf file-ok adott oldalát szeretném megnyitni Excellel. Van rá egy részben működő makróm:
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Stevan87 #31571 üzenetére
Sajnos ez így nem fog menni. Az Excel a dátumokat - ahogy azt már említették korábban - számként tárolja. Az általad bevitt információ viszont szöveg, hiába ugyanolyan látszólagosan a formátuma, mintha dátum lenne. Próbáld ki, hogy az általad begépelt "dátumot" (szöveget) irányított beillesztéssel egy másik cellába másolod értékként, illetve ugyanezt egy dátum formátumú cellával. Az első esetben az eredeti szöveget fogod visszakapni, a második esetben viszont egy számot (pl. 2016. május 19-e helyett 42509-et).
Azt viszont meg tudod tenni, hogy a hónapok neveit számokra cseréled (pl. december helyett 12), és úgy fog működni.Legrosszabb esetben hozz létre egy segédoszlopot, amibe az eredeti szöveg formátumú "dátumokat" bemásolod, majd lecseréled bennük a hónapokat számokra (12 lépés).
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
-
bteebi
veterán
Sziasztok!
Randomizálással kellene munkabeosztást készítenem. Egy héten két napra (keddre es csütörtökre) kellene 2-2 embert beosztani úgy, hogy legalább az év végéig mindenki ugyanannyiszor dolgozzon. Meg persze soha senki se legyen önmagával beosztva .
Írtam már hozzá egy egyszerűbb makrót:
Sub randomize()
Dim col As Integer, lastcol As Integer, rowind As Integer, firstindex As Integer, lastindex As Long
lastindex = Sheets("Beosztás").Cells(Sheets("Beosztás").Rows.Count, 1).End(xlUp).row
firstindex = Sheets("Beosztás").Cells(lastindex, 1).End(xlUp).row
lastcol = Sheets("Beosztás").UsedRange.Columns.Count
For col = 2 To lastcol
For rowind = 4 To 7
Cells(rowind, col) = Cells(Int((lastindex - firstindex + 1) * Rnd + firstindex), 1)
Next rowind
Next col
End SubEz egyelőre sajnos csak a munka egyszerű részét csinálja meg, vagyis teljesen véletlenszerűen osztja be az embereket. Így viszont persze nagyon nem egyenletes az elosztás, lásd a képen:
Próbáltam rákeresni más fórumokban is, hogy mit lehetne ezzel kezdeni, de egyelőre nem találtam rá megoldást. Tudnátok valahogy segíteni az elindulásban? Valami olyan elképzelésem van, hogy egy tömbbe kellene gyűjteni a már felhasznált neveket, aztán ha már minden név benne van a tárolóban, akkor újraírni azt. Az viszont egy nagyon jó kérdés, hogy ezt hogy lehetne megcsinálni...
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz pctomi90 #31450 üzenetére
Teljesen fix ez az elrendezés? Tehát az első oszlop a Terminal no., majd utána a Wire diameter meg a Crimping data oszlopok fixen váltogatják egymást? Ha igen, akkor makróval elég könnyen megoldható. Ha azzal is megfelel, akkor megcsinálom.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Van egy legördülő listám, aminek a forrása egy másik lapon van egy sorban. A probléma az, hogy ezek a listaelemek egyesített cellákban vannak (3 cella van egyesítve), mivel minden listaelemhez 3 oszlop tartozik. Ezeknek az oszlopoknak a megjelenítésére mindenképp szükség van, mert azokba kell adatokat megadni. Így viszont a legördülő listában (a másik lapon) csak minden 3. elem (sor) tartalmaz információt (a 3 egyesített cella miatt a legördülő lista első eleme a cella értéke, a következő 2 elem/sor üres, majd az azt következő elem egy másik érték, majd 2 sor üres, stb.). Ez így elég hülyén néz ki, viszont legördülő listát sajnos csak egybefüggő tartományban (sorban vagy oszlopban) lehet csinálni.
Két dolog jutott eszembe (rész)megoldásnak. A listaelemeknek csinálhatnék az utolsó oszlopban egy segédoszlopot (ahová egyszerűen felsorolnám ezeket az elemeket), de az úgy elég gagyi megoldás lenne. Egy másik megoldás lehetne még - bár az meg hülyén néz ki -, hogy nem egyesítem a cellákat, és mindhárom cellába (mindhárom oszlopba) beírom ugyanazt az értéket. Akkor viszont ugye háromszor jelenne meg a név a legördülő listában, ami talán még rosszabb.
Szerintetek meg lehet oldani a fenti elrendezés mellett - lehetőleg segédsor/oszlop nélkül - azt, hogy az elemek csak egyszer jelenjenek meg, és ne legyenek üres sorok? Remélem érthetően fogalmaztam - sajnos nem vagyok biztos benne . Mindenesetre előre is köszönöm a javaslataitokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Más fájlokba mutató hivatkozásokat szeretnék megszüntetni. Van például egy ='D:\Minta1\[Minta2.xls]Munka1'!A1 hivatozásom, ebből szeretnék =Munka1!A1-et csinálni. (Persze sok, és sokféle ilyen hivatkozás van, ez csak egy minta.) Van erre valamilyen ötletetek, egyszerű megoldásotok? Ha a hivatkozás végén nem lenne az aposztróf, akkor egy egyszerű cserével meg lehetne oldani, de így sajnos nem, vagy legalábbis (minimum) egy fokkal nehezebb. Előre is köszönöm a javaslataitokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz MaCS_70 #31187 üzenetére
Az Excel a dátumot mindig az 1900. január 1. óta eltelt napok számaként tárolja (1,5 pl. 1900.01.01. 12:00, 2,75 pedig 1900.01.02. 18:00), a cellaformátum az, ami ezt (jobb esetben) az ízlésünknek megfelelően jeleníti meg. Valamilyen beállításbeli problémád lehet csak. Próbáld meg azt, hogy Cellák formázása (Ctrl+1) → Szám → Egyéni → Formátumkód: éééé.hh.nn. Ha így se jeleníti meg rendesen, akkor nincs ötletem . Visszafelé (dátumból szám): vagy általános, vagy szám formátum.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Magamtól azt mondtam volna rá, hogy igen, de a Google szerint lehetséges .
Ebből a makróból próbálj építkezni. A my_url-t neked nyilván nem kell megadnod, simán az előző makróból kapott hl-re hivatkozz. Amúgy pont ezen az oldalon ajánlanak egy Selenium nevű programot, azt is érdemes lehet megnézned. Majd írj a fejleményekről.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Joltee #31110 üzenetére
Ha minden lapra ugyanazt az élőfejet/élőlábat szeretnéd, akkor az makróval könnyen (és nagyon gyorsan) megcsinálható:
Sub HeaderFooterEdit()
Dim i As Integer
For i = 1 To Worksheets.Count
With Sheets(i).PageSetup
.LeftHeader = "Bal oldali élőfej"
.CenterHeader = "Középső élőfej"
.RightHeader = "Jobb oldali élőfej"
.LeftFooter = "Bal oldali élőláb"
.CenterFooter = "Középső élőláb"
.RightFooter = "Jobb oldali élőláb"
End With
Next
End SubCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Valami ilyesmi.
Sub linkmasolas()
Dim hl As Hyperlink
sor = 1
For Each hl In ActiveSheet.Hyperlinks
Cells(sor, "D") = hl.Address
sor = sor + 1
Next hl
End SubEz a makró minden hiperhivatkozásnak a címét (tartalmát) a D1-es cellába, majd az alatta lévő cellákba másolja. A kigyűjtött linkeket pedig oda másolod, ahová akarod (akár txt-ként vagy csv-ként is elmentheted).
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Declare #31096 üzenetére
A Fájl → Beállítások → Speciális menüben megadhatsz tetszőleges tizedesjelet (és ezreselválasztót), és nem kell a regionális beállításokat átállítanod. Ezt leszámítva máshogy szerintem - számként - nem lehet megoldani. Egyedi formátumként legalábbis nekem nem ment.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz bteebi #31093 üzenetére
Ez ugyanaz, csak rövidebb. Látszik, hogy nem volt időm átnézni .
Sub szamoz()
sorsz = 1
For xx = 2 To 90
If Not Cells(xx, 1).EntireRow.Hidden Then
If Cells(xx, 1).MergeArea.Rows.Count = 1 Or Cells(xx, 1).MergeArea.Rows.Count > 1 And Cells(xx - 1, 1).MergeArea.Rows.Count = 1 Then
Cells(xx, 1).Value = sorsz
sorsz = sorsz + 1
End If
End If
Next xx
End SubCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz tgumis #31080 üzenetére
Ha jól értettelek, akkor valami ilyesmi jó lesz:
Sub szamoz()
sorsz = 1
For xx = 2 To 22
If Not Cells(xx, 1).EntireRow.Hidden Then
If Cells(xx, 1).MergeArea.Rows.Count = 1 Then
Cells(xx, 1).Value = sorsz
sorsz = sorsz + 1
ElseIf Cells(xx, 1).MergeArea.Rows.Count > 1 And Cells(xx - 1, 1).MergeArea.Rows.Count = 1 Then
Cells(xx, 1).Value = sorsz
sorsz = sorsz + 1
End If
End If
Next xx
End SubCancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Van egy makróm, aminek a segítségével egy adott xls file-ba (ami eredetileg a makrót tartalmazta) egy text file-ból (amit dialógusablakban kérek be) adatokat olvasok be. Ezt úgy oldottam meg, hogy az Excel file-ra így hivatkozok:
Set cel = ThisWorkbook.ActiveSheet
A Workbooks.OpenText-tel megnyitott text file-ra pedig így:
Set forras = ActiveWorkbook.Sheets(1)
Mivel elég sok Excel file-nál kellene használni ezt a makrót, és hogy ne kelljen mindig bemásolni a makrót az adott file-ba, ezért az egyéni makró munkafüzetben (personal.xlsb) szeretném használni. Ezzel viszont az a baj, hogy a Set cel = ThisWorkbook.ActiveSheet értelemszerűen nem fog működni, mivel akkor a ThisWorkbook az egyéni makró munkafüzet, nem pedig az a file, amibe szeretném az adatokat bemásolni. Van valamilyen ötletetek ennek a megkerülésére? Előre is köszönöm a javaslatokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz the radish #30873 üzenetére
Hát ez baromi érdekes. Idézőjelek nélkül el se indul, idézőjellel pedig nem azt csinálja, amit kellene... Excellel pedig biztos, hogy idézőjelek nélkül megy (ki is próbáltam), sőt változókkal is működik.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz the radish #30868 üzenetére
Idézőjelek nélkül szerintem működnie kellene.
From:=3, To:=3, Copies:=1
Valószínűleg korábban is csak annyi volt a baja. A Copies meg minden bizonnyal felesleges, mert az 1 lehet a default.
#30872: "Hol a söröm?"
A postán .[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy munkalap A oszlopában, A1-től kezdődően vannak értékek, ezeket kellene bemásolni 10×8-as (tehát 10 soros, 8 oszlopos) táblázatokba, amik ráadásul egyesített cellákat tartalmaznak, valahogy így:
Tehát az A1 értéke a C4-es cellába kerülne, az A10 a Q4-be, a C6-ba az A11, stb. Ha 80-nál több elem van az A oszlopban, akkor a következő elem már új 10×8-as táblába kerülne. Hogy lehetne ezt egyszerűen megcsinálni? Nagyon bonyolultan minden bizonnyal meg tudnám oldani , de nem az lenne a célom, hanem a logikus megoldás, úgyhogy várom a javaslataitokat!
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz mindanee #30546 üzenetére
Tudtommal ez a trükközés Excel 2007-től már nem működik. Vagy legalábbis nem ilyen egyszerű . A jelszóvédelmen felül amúgy el is rejtheted a védendő munkalapokat (very hidden legyen, ne csak simán rejtett!), és az azokra a lapokra hivatkozó cellákban akár a képletet is elrejtheted (Cellák formázása → Védelem → Zárolt, majd rá a Lapvédelem).
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz norby91 #30543 üzenetére
Nem a legszebb, de működik, csak végig kell másolni. (Talán menne szebben is, de már fáradt vagyok .)
=SZUM(K$2:(INDIREKT("K" & 20+(SOR(K2)-SOR(K$2))*5)))
Az alapelv: a kiinduló sor számát (jelen esetben 20) fixnek veszed, majd megpróbálsz valami olyan dolgot keresni hozzá, amivel tudod soronként indexálni. Ez jelen esetben az aktuális cella sorszáma . Mivel a sor száma mindig változik, ezért egyszerűen kivonod az aktuális cella sorszámából a kiindulási cella sorszámát (a kiindulási cella sorszáma fix, emiatt vegyes vagy abszolút hivatkozás kell!). A különbség az egymás alatti cellák esetén - nyilván - mindig 1, ezért ezt még felszorzod 5-tel, és mindenki vidám . A követhetőség/ellenőrzés kedvéért legfeljebb írd be egy segédoszlopba azt, hogy
="K" & 20+(SOR(K2)-SOR(K$2))*5, ami megadja a cella nevét, vagyis egy szöveget, amit az INDIREKT függvénnyel (cella)hivatkozássá alakítasz. Makróval szebben meg lehetne csinálni, de így egyszerűbb.Sort (SOR függvény) és oszlopot (OSZLOP függvény) is lehet ezzel a módszerrel indexálni.
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok!
Egy Excel file egy munkalapján létrehoztam egy csomó option buttont. Az lenne a céljuk, hogy egy adott buttonra kattintva elinduljon egy makró, ami az adott option button-höz rendelt mappában nyitna meg egy dialógusablakot. A makró megvan, és működik is, csak azt nem tudom megcsinálni, hogy az adott option button-höz rendelt útvonal legyen a dialógusablak default mappája.
Egy példa:
Ha mondjuk a Gomb1-et választom ki, akkor az ahhoz rendelt útvonal pl. "D:\minta" legyen, a Gomb2-höz rendelt pedig pl. "D:\sample".Valami ilyesmit csináltam, persze mindegyik option button-höz külön-külön:
Private Sub OptionButton1_Click()
Dim utvonal As String
If OptionButton1.Value = True Then
utvonal = "D:\minta"
Call proba
End If
End SubHogy tudnám elérni, hogy ezután az utvonal legyen a default elérési út a modulban lévő proba makróban? Előre is köszönöm a javaslatokat!
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
válasz Delila_1 #30461 üzenetére
Köszi a tippet, de sajnos a Chr(i), i=0-255 csak ASCII karakterekkel működik, amibe a ≤ és a ≥ nem tartozik bele. De azóta már találtam rá megoldást. A ChrW paranccsal lehet Unicode karaktereket is bevinni. Arra azonban figyelni kell, hogy a Unicode-ban alapból hexában vannak megadva a karakterkódok, a ChrW viszont defaultból decimális értékekkel dolgozik. De ez megkerülhető, ha a hexa kódot a ChrW(&H...) paranccsal visszük be, vagy egyszerűen átváltjuk a hexadecimális értéket decimálisra például a Windows számológépével .
Esetemben:
≤: U+2264 → ChrW(&H2264) vagy ChrW(8804)
≥: U+2265 → ChrW(&H2265) vagy ChrW(8805)(A hexadecimális 2264 és 2265 értéke decimálisban 8804 és 8805.)
[ Szerkesztve ]
Cancel all my meetings. Someone is wrong on the Internet.
-
bteebi
veterán
Sziasztok! Hogyan lehet makróval speciális (nem ASCII, pl. ≤ vagy ≥) karaktert beszúrni egy cellába?
Cancel all my meetings. Someone is wrong on the Internet.
Új hozzászólás Aktív témák
- Genshin Impact (PC, PS4, Android, iOS)
- Okosóra és okoskiegészítő topik
- Nintendo Switch
- Google Pixel topik
- Jön Trump, Zuckerberg és a Meta pedig 180 fokos fordulatot vett
- Kínai és egyéb olcsó órák topikja
- Építő/felújító topik
- Kormányok / autós szimulátorok topikja
- Ingyen kellene, de tegnapra
- One mobilszolgáltatások
- További aktív témák...
- ESET termékek hivatalos forgalmazója / NOD32 / Internet Security / Android / Server / Mail / stb.
- World of Warcraft Burning Crusade Collector's edition bontatlan
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Indiana Jones and the Great Circle - Digital Premium Edition - beváltás: 2025.1.30 - RTX 40XX
- AKCIÓ! Microsoft szoftverek, vírusírtó szoftverek, egyéb szoftverek széles választéka!