-
Mobilarena
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
-
Fferi50
Topikgazda
válasz
bteebi #52327 üzenetére
Szia!
2. Néha sokkal egyszerűbb felképletezni a tartományt, mint eredményt beleírni - pl. akár egész munkalaprészt (pl Range("A1:X25").Formula="=képlet") képletezhetsz egy menetben, viszont ha értéket/szöveget szeretnél benne egyből látni, akkor egyenként kell megadni a belekerülő értéket.
A képletes részt pedig egy "mozdulattal" értékké lehet alakítani:
Range("A1:X25").Value=Range("A1:X25").Value
és minden képlet helyett értékek lesznek.
A tartomány képletezés kvázi úgy viselkedik, mintha az első cellába beírt képletet húznád tovább le és/vagy oldalra. Ennek megfelelően kell a képlet tényezőket is megállapítani - azaz a $ jelek (ha kell) megfelelő helyre kerüljenek.
Üdv. -
Fferi50
Topikgazda
válasz
bteebi #52312 üzenetére
Szia!
1.Ha így másolsz - Range.Copy (Destination:=) Cél, direktben -, akkor nem változik a CutCopyMode értéke, nem kell vele foglalkozni.
2.Range("C1") = Range("A1") & " and " & Range("B1")
helyettRange("C1").Formula="=A1 & "" and "" & B1"
Ekkor változik a C1 cella értéke, mert képlet van benne. A dupla idézőjelre kell figyelni.
Üdv. -
Fferi50
Topikgazda
válasz
bteebi #52197 üzenetére
Szia!
Az Application.WorksheetFunction ugyanolyen hibát ad, mivel a munkalap függvények hiba esetén a VBA-ban üzenettel leállnak, másféle hibakezelés kell hozzá makróban, "el kell csípni" a hibát, erre való az On Error utasítás.
Ha csak egyszerűen az Application-t használjuk, akkor az eredményt hibaváltozóba teszi a VBA - mivel az nem szám, ezért megy a hamis ágra a makród és nem hibaértéket ad vissza.
Üdv. -
Fferi50
Topikgazda
válasz
bteebi #52194 üzenetére
Szia!
A WorksheetFunction helyett írd az Application objektum nevet a függvényedbe.
Az If sor végére felesleges az =TRUE, mivel az IsNumber függvény logikai értéket ad vissza, amit az If vizsgálni tud.If Application.IsNumber(Application.Find(Chr(160), Application.Substitute(rng, character, Chr(160), n))) Then
A VBA hibakezelése miatt kell ez a formula.
Üdv. -
-
Fferi50
Topikgazda
válasz
bteebi #50793 üzenetére
Szia!
"Szóval Public variable csak modulból működik?"
Nem csak általános modulból működik. Ha nem ott deklarálod, akkor a Modulnév.Változónév formában hivatkozhatsz rá: pl. Thisworkbook.origvalue minden másik modulból elérhető!
Egyébként amennyiben több modulodban is van publikus változó, akkor is célszerű ebben a bővített formában hivatkozni rájuk.
[link] Javaslom, nézd meg itt a változók deklarálásával kapcsolatos helpet.
Üdv. -
Fferi50
Topikgazda
válasz
bteebi #49447 üzenetére
Szia!
"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."
Miután esemény vezérlést szeretnél, az csak annak az objektumnak a moduljában szerepelhet, amelynek van olyan eseménye.
Munkalapnak nincs sem open sem close/beforeclose eseménye. Ilyen esemény csak a munkafüzetnél van.
A VBA nézetben ha kiválasztod a munkafüzet(Thisworkbook) illetve bármelyik munkalap kódlapját, a bal oldalon találsz egy legördülőt, amiben General illetve Workbook/Worksheet választható ki. Ha ez utóbbit választod ki akkor a jobb oldali lenyílóban a füzethez, laphoz tartozó eseményeket láthatod és választhatod ki. Ezekhez írhatsz vezérlő kódokat. General kiválasztásakor a jobb oldalon az adott modulban levő - nem eseményvezérelt - eljárások (Sub, Function) listája látható-
Üdv. -
Magnat
veterán
válasz
bteebi #48955 üzenetére
Nmit, arra, h az első cellát még nincs mivel hasonlítsa, így meg az első alkalommal az else ágra fut, átbillenti a Vizsgal-t true-ra és a második cellától kezdve vizsgál mindig az előzővel.
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, hiszen akkor a PreCell-nek még nincs is értéke, szóval vagy Null vagy vmi szemét van benne, szigorúbb nyelvek esetében sztem exceptiont dobna. (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) -
Magnat
veterán
válasz
bteebi #48927 üzenetére
Szia,
Set eredmenyek = ActiveSheet.Range("B2:B10,D2:D10,F2:F10")
Vizsgal = false
For Each cella In eredmenyek
If Vizsgal Then
If Abs(Cella - PreCell) < 1 Then
Application.Speech.Speak "Please check", SpeakAsync:=True
Else: Application.Speech.Speak "OK", SpeakAsync:=True
End If
Else
Vizsgal = true
End If
PreCell = Cella
Next -
bepken
veterán
válasz
bteebi #48934 üzenetére
tökéletes, köszönöm szépen!
abban még egy rövid magyarázattal tudnál segíteni kérlek, hogy az én kódom miért nem úgy viselkedett, ahogy szerettem volna? mármint ugyanúgy azt a feltételt adtam meg én is, hogy csak akkor illesszen be dátumot a B oszlopba, ha az A oszlop üres.
-
Fferi50
Topikgazda
válasz
bteebi #48570 üzenetére
Szia!
"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."
Akkor miért nem a Target cellát vizsgálod?
1. Először is kapcsold ki az eseménykezelést: Application.EnableEvents=False
Majd a makró végén kapcsold vissza: Application.EnableEvents=True
Ennek elmaradása esetén valahányszor a makró beír egy adatot valamely cellába, ismét lefut az eseménykezelő makró.
2. Mivel a Set Target=Columns("A") utasítással az egész oszlopot kijelölöd, annak első cellája az első sorban van. A következő utasítás ezért veszi az első sort.
Nem tudom miért kell neked a Target -et megváltoztatni?
Szerintem elég lenne megnézni, hogy az A oszlopban van-e? De mivel elmondásod szerint az A oszlopba olvasol be, ezért ez nagyon nagy eséllyel igaz.
Maga a Target objektum, amit az eseménykezelő megkap, az a cella, amelyben megváltozott az érték. Ezért azt a cellát kellene megnézned szerintem.
3. Hogyan is léptetné a sort, ha nincs benne ciklus. (De szerintem nem is kell léptetni.)
A folyamatot az zavarhatja, ha az új mérési eredmények hamarabb megjönnek, mint ahogyan az eseménykezelés lefut. Ezt ki kell próbálni.
Szerintem elég ezt megnézni:If Target.Column=1 Then
If Left(Target.Value,4)="Data" Then
Természetesen eseménykezelés ki és bekapcsolásával.
Illetve, ha mindig a 10. sorban van, akkor még azt a feltételt is beteheted:If Target.Row Mod 10 =0 Then '(azaz, ha a sor száma osztható tizzel akkor megyünk tovább.
Üdv. -
Delila_1
veterán
válasz
bteebi #41351 üzenetére
Nálam működik a programod.
FFeri arra az esetre gondolt, hogy eseményvezérelt makróba teszed a módosításokat. Átírtam.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
If Target.Column = 3 Then
Application.EnableEvents = False
Sheets("Stat").Cells(Target.Row, "D").ClearContents
If Target.Value = "OK" Or Target.Value = "N/A" Then
Sheets("Stat").Cells(Target.Row, "D").Validation.Delete
Else
With Sheets("Stat").Cells(Target.Row, "D").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="Hiba 1,Hiba 2,Hiba 3,Hiba 4"
End With
End If
Set rng = Sheets("Stat").Range("D" & Target.Row & ":E" & Target.Row)
With rng
.BorderAround LineStyle:=xlContinuous, Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
End With
Application.EnableEvents = True
End If
End Sub -
Fferi50
Topikgazda
válasz
bteebi #41351 üzenetére
Szia!
Szerintem ott a gond, hogy nem kapcsolod ki közben az eseménykezelést.
Az elejére Application.EnableEvents=False a kikapcsolás.
A végére Application.EnableEvents=True a visszakapcsolás.
Eseménykezelésnél erre mindig figyelni kell, hogy ne következzen be nem kívánt eredmény (az esemény ugyanis bekövetkezik, ha egy cellának változtatod az értékét akár makróból is).
(Mondjuk a hiba rendezése után a keretet sem ártana eltörölni... )Üdv.
-
Mutt
senior tag
válasz
bteebi #40573 üzenetére
Szia,
A ...K oszlopban lévő képlet látszólagosan figyelmen kívül hagyja az autótípust... hibára a megoldás, hogy a HELYETTE($F$2;",";""))=1 részben nagyobb egyenlő kell. A teljes javított képlet:
=SOR()*ELŐJEL(SZÖVEG.KERES(A2;$F$2))*HA(HOSSZ($F$2)-HOSSZ(HELYETTE($F$2;",";""))>=1;ELŐJEL(SZÖVEG.KERES(B2;$F$2));1)*HA(HOSSZ($F$2)-HOSSZ(HELYETTE($F$2;",";""))=2;ELŐJEL(SZÖVEG.KERES(C2;$F$2));1)
A névkezelőben használt a megadott képletet a dinamikus tartományhoz.
A makró megoldásnál érdemes lenne figyelni, hogy csak akkor fusson le ha az F2-ben történik változás,
továbbá előnyös lehet ha akkor is adna találatot, ha csak kis-/nagybetűkben lenne eltérés.Egy alternatív megoldás pedig lehet a Pivot Slicerek használata.
Előnye, hogy nagyon vizuális. Hátránya, hogy frissíteni kell a pivotot ha van változás az autók listáján.
üdv
-
Fferi50
Topikgazda
válasz
bteebi #40535 üzenetére
Szia!
Nem egészen értem, hogy miért nem userfriendly az autószűrős megoldás. A 3 oszlopon szépen végig választja amit szeretne látni.
Ha kiválasztja az A oszlopban az Audit, a másik két oszlopban már csak az Audikra vonatkozó értékek jelennek meg stb. A végén ott marad a kívánt lista a rendszám oszlopban.
Ennél szerintem nincs kényelmesebb.
Arról nem is beszélve, hogy a saját begépelésbe hiba is csúszhat, amibe megnyekkenhet a körülményesen beállított listafüggvények.Szerintem érdemes megfontolni. Még akkor, ha ennél komplexebb a probléma --- talán azzal együtt kellene felvetned, lehet többet tudnánk segíteni.
Üdv.
PS. Nem biztos, hogy mindig a bonyolultabb utat kell választani. -
Mutt
senior tag
válasz
bteebi #40532 üzenetére
Szia,
Segédoszlopokkal Excel 2010-el vagy frissebbel az alábbi lépéseken keresztül tudod a feladatot megcsinálni.
A K-M oszlopokban (szürke háttérrel) vannak a segédoszlopok, ezek mehetnek másik lapra/oszlopokba is.
Ha az F2-ben MINDIG vesszővel elválasztva adod meg a márka, típust és színt és sorrend is mindig ez, akkor a lenti képletek akkor is fognak eredményt adni, ha kevesebb kereső paramétert adsz meg (pl. "Audi, A4" esetén is felsorolja az odaillő rendszámokat).K2-ben a képlet ez:
=SOR()*ELŐJEL(SZÖVEG.KERES(A2;$F$2))*HA(HOSSZ($F$2)-HOSSZ(HELYETTE($F$2;",";""))=1;ELŐJEL(SZÖVEG.KERES(B2;$F$2));1)*HA(HOSSZ($F$2)-HOSSZ(HELYETTE($F$2;",";""))=2;ELŐJEL(SZÖVEG.KERES(C2;$F$2));1)
L2-ben ez:
=ÖSSZESÍT(15;6;K:K;SOR()-1)
M2-ben ez:
=HA(DARAB(L:L)=0;"Nincs találat";HA(SOR()-1<=DARAB(L:L);INDEX(D:D;L2);""))
Ezeket elegendően sok sorba húzd le (legalább annyiban ahány kocsid most is van).
Az első képlet megnézi, hogy az A oszlopban lévő márka az F2-es cellában megtalálható-e, ha igen akkor plusz 1-et visszaad. Ha vesszővel felsorolva van még típus és eseteg szín is, akkor a B és C oszlopokokban lévő szövegeket is megnézni. A plusz 1-el pedig megszorozza annak a sornak a számát, amely a keresési feltételekre ráillik, a többieknél találat hiányában érték hiba lesz az eredmény.
Az L-oszlopban növekvő sorrendbe tesszük a K-ban kapott számokat és az ezekhez tartozó rendszámokat az M-oszlopban ki is iratjuk.
A következő lépés hogy a névkezelőben hozz létre egy változót, ami az M-oszlopból fogja majd venni a listát amit a G2-ben a legördülő listában lehet majd látni. Mivel a találati halmaz dinamikusan változik a megadott keresési feltételek esetén, ezért az ELTOLÁS függvényt kell segítségül hívni. A képlet amit a névkezelőben meg kell adnod:
=ELTOLÁS(Munka1!$M$2;;;DARABTELI(Munka1!$M:$M;">""")-1)
Az utolsó lépés, hogy a G2-es cellában az adatérvényesítésnél a névkezelőben megadott névre hivatkozz.
üdv
-
Delila_1
veterán
válasz
bteebi #38760 üzenetére
NE legyen mindenre külön lap!
Minden adatot vigyél fel egy lapra, folyamatosan, majd alakítsd táblázattá (beszúrás, táblázat).A felvitelnél nem kell figyelned arra, hogy a dátumok, a projektek, vagy bármi más valamilyen rendszer szerint történjen.
A táblázatban állva Beszúrás, Kimutatás, Kimutatás. A megjelenő ablakban legyen az elrendezés
Ilyen lesz a kimutatásod
Minden mező (Dátum, Hét, Munkavállaló, Projekt, Tevékenység, és még a Munkaidő is) szűrhető.
Mikor felvittél egy csapat adatot, a kimutatáson állva jobb klikk, Frissítés. Ha megfogadtad, hogy eleve táblázattá alakítod a listádat, nem kell mást tenned.Szerk.: nálam a C2 képlete az adatoknál: =WEEKNUM(B2;2)
-
Fferi50
Topikgazda
válasz
bteebi #38045 üzenetére
Szia!
Excelből nyilván Word objektumként kezeled a Word dokumentumot, amiben cserélni szeretnél. Ebben az esetben az Excel VBA nézetben a Tools - References - menüpontban be kell jelölnöd a Microsoft Word libraryt. Ettől elérhetővé válnak a Word konstansok is.
Ha a Word objektumot WordDoc változónéven kezeled, akkor
Az első oldali fejlécWordDoc.StoryRanges(wdFirstPageHeaderStory)
az általános fejléc
WordDoc.StoryRanges(wdPrimaryHeaderStory)
hivatkozással érhető el.
A csere pedig:WordDoc.StoryRanges(wdPrimaryHeaderStory).Find.Execute Findtext:="Város1", ReplaceWith:="Nagykanizsa"
Természetesen az egyes szekciókban, amennyiben eltérőek a fejlécek, külön is cserélheted azokat, itt viszont tudnod kell, hogy melyik Header darabban van a keresett szöveg (nekem úgy tűnt, a normál header az 1 sorszámú, az első oldali a 2. sorszámú):
WordDoc.Sections(2).Headers(1).Range.Find.Execute Findtext:="Város1"), ReplaceWith:="Nagykanizsa"
Ugyanez vonatkozik a láblécekre is, csak a Header helyett Footer a neve.
Üdv.
-
Delila_1
veterán
válasz
bteebi #38043 üzenetére
Figyelmetlenül olvastam.
A fejléc szövegeit így adhatod meg makróban:
ActiveSheet.PageSetup.LeftHeader = "FejlécBal"
ActiveSheet.PageSetup.CenterHeader = "FejlécKözép"
ActiveSheet.PageSetup.RightHeader = "FejlécJobb"
ActiveSheet.PageSetup.LeftFooter = "LáblécBal"
ActiveSheet.PageSetup.CenterFooter = "LáblécKözép"
ActiveSheet.PageSetup.RightFooter = "LáblécJobb"A fix szövegek helyett hivatkozhatsz cellák tartalmára is, és az aktív lap helyett megadhatod más lap nevét, vagy sorszámát.
-
Fferi50
Topikgazda
válasz
bteebi #36228 üzenetére
Szia!
Itt valami árulás esete forog fenn....
Minden próbát írtál, kivéve, hogy a chars nevű változó értékét ki tudod-e íratni. A kiskutyus valószínűleg ott van elásva.
Nálam 2016-os magyar Excelben megy rendesen. (Bár a chars változóként való használatával nem feltétlenül értek egyet, mivel VBA szintakszisban előfordulhat itt-ott esetleg.)Üdv.
-
vandeminek
tag
válasz
bteebi #34899 üzenetére
Kicsit kiszanáltam pár adatot, itt elérhető a megosztás.
A tranzakciók fülbe dobálom a költségeket, a példa fülön van egy fix szélsségű tábla (igaz ez nem kimutatásos, hanem képletekkel számolós). Nem feltétlen kell külön lennie a bevétel/kiadás résznek, de egy ilyen lenne a célom. A kimutatásokban mindig meggyűlik a bajom, most se tudtam a megfelelőre formázni. Felső sorban évek, azon belül a hónapok kibonthatóak. Remélem így érthetőbb a problémám.DeFranco: Köszi a tippet, lehet ez lesz a vége. Amúgy ismerős volt a neved, ezért keresgettem egy kicsit a jegyzeteim között, ott találtam ennek a hozzászólásodnak a linkjét.
Ebben írtál a nagyobb kiadások előre tervezett fedezeteiről, ilyet hogy lenne érdemes megoldani? Az ömlesztett részbe egy külön kategóriába rakosgatni költségeket? Csak így hogy tudom megoldani hogy amikor ténylegesen megvalósul egy ilyen nagyobb költés (pl. nyári utazás, kocsi vásárlás), akkor hozzá legyenek kapcsolva annak a fedezetét jelentő sorok? Vagy nagyon rossz úton járok ezzel? -
csferke
senior tag
válasz
bteebi #33668 üzenetére
A pdf az egy érdekes probléma.
Köszi.Picit nyakatekerten, de megoldottam másként.
Az előszámla pdf-et, amit csak e-mailban küldök azt pdf-be nyomtatom.
A számlát, amit viszont ki kell nyomtatnom ott a nyomtatóhoz készítettem egy vízjelet. Itt csak az a szépséghiba, hogy minden nyomtatáskor plusz 2-3 kattintásra kel. Ezt még elviselem amíg nem találok jobb megoldást. -
csferke
senior tag
válasz
bteebi #33656 üzenetére
Az élőfejbe sortöréssel tedd be a képet.
Ezzel próbálkoztam már én is.
Az Élőfej bal oldalán már van egy cégnév-logó amely nyomtatáskor jórészt lefedi a lap középső részét is. Az Élőfej Középbe is betettem egy jpg-t, sortöréssel elmozgattam, hogy a lap közepén legyen.
Ekkor nyomtatásnál az Élőfej bal oldali képének bal szélét és a nyomtatandó Munkalap első sorait is kinyomtatja még egyszer, csak halványabban, kb. a nyomtatóhenger egy fordulatával lejeb-re. -
Fferi50
Topikgazda
válasz
bteebi #33655 üzenetére
Szia!
" 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."
Közös használat esetén csak teljes sorokat vagy oszlopokat lehet törölni, cella blokkokat nem, ezért nem működik abban az esetben a makród.Range(Sheets("Adatok").Cells(Target.Row, 2), Sheets("Adatok").Cells(Target.Row, 6)).Delete Shift:=xlUp
sor helyett:
Sheets("Adatok").Cells(Target.Row, 2).EntireRow.DeleteÜdv.
-
Delila_1
veterán
válasz
bteebi #33655 üzenetére
Nálam működik így:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim valasz As String, firstemptyrow As Long
If Target.Column = 6 And Target = "Archiválható" Then
Application.EnableEvents = False
rwind = Target.Row
valasz = MsgBox("Szeretnéd archiválni?", vbYesNo, "Archiválás")
If valasz = vbYes Then
firstemptyrow = Sheets("Archivált").Cells(Rows.Count, 2).End(xlUp).Row + 1
Range(Cells(rwind, 2), Cells(rwind, 6)).Cut Destination:=Sheets("Archivált").Cells(firstemptyrow, 2)
Range(Cells(rwind, 1), Cells(rwind, 6)).Delete Shift:=xlUp
Else: MsgBox "Nem lett archiválva!", vbOKOnly, "Archiválás"
End If
Sheets("Adatok").Cells(rwind, 2).Select
Application.EnableEvents = True
End If
End Sub -
excelproblem
újonc
válasz
bteebi #32409 üzenetére
Köszi szépen, megnézem majd ezt az Origint.
Szóval a legjobban illeszkedő másodrendű exponenciális függvénynél a második exponenciális értéke lehet a keresett hely. Megpróbálom, bár el fog tartani egy ideig, amíg elsajátítom a program használatát. Kösz az ötletet, hátha segíteni fog. -
excelproblem
újonc
válasz
bteebi #32406 üzenetére
Az inflexiós pontot sokkal egyszerűbb megtalálni, de nem azt keresem. Bár ha onnan indulok, valóban homogénebb az adatsor. Próbáltam simítani, de nem segített közelebb a megoldáshoz. A logaritmikus ordináta se mutat semmit, csak a görbe "hasa" lesz kisebb, de az ívben ugyanúgy nem látszik tendencia-változás. Kösz amúgy, kipróbálom az Origint, de nem tudom, milyen transzformációval tudna segíteni a keresett pont megtalálásában. Mondom, se a loess-féle lokális regresszió nem segített, se a differencia-képzés, se a logaritmálás, se a szukcesszíven növelt szakaszok korreláció-analízise.
-
Delila_1
veterán
válasz
bteebi #32191 üzenetére
Kihagytam a másik füzet megnyitását, csak a saját minta füzetemben kerestettem. Majd beírod.
Sub Ugras()
Dim srch As String, ws As Worksheet, lel
srch = "KeresettSzoveg"
For Each ws In Worksheets
On Error Resume Next
lel = ws.Cells.Find(What:=srch, LookIn:=xlValues, LookAt:=xlPart).Address
If lel Then
Application.Goto reference:=Sheets(ws.Name).Range(lel)
Exit Sub
End If
Next ws
End Sub -
Delila_1
veterán
válasz
bteebi #32169 üzenetére
Másik módszer, ha a C5-be akarsz érvényesítést bevinni a fájlnevekhez.
Az M oszlopba írtam be pár adatot, az M1-ben címmel. A tartományt táblázattá alakítottam, M2-től lefelé elneveztem a tartományt. A C5 forrásához ezt a nevet vittem be.
Sub ListaFeltoltes_1()
Dim FN As String, sor As Long
Range("M2:M" & Range("M" & Rows.Count).End(xlDown).Row).ClearContents
FN = Dir("D:\Proba\lista_" & datum & "*.pdf")
sor = 2
Do While FN <> ""
Range("M" & sor) = FN
sor = sor + 1
FN = Dir()
Loop
End SubFuttatás után a kiválasztott fájlok nevei lesznek a C5 érvényesítésében.
Azt is megteheted, hogy a fájlnevek betöltése után emelkedő sorrendbe rendezed az M oszlopot, majd a C5-ben az M oszlop alsó értékét jeleníted meg az érvényesítés helyett.
=INDEX(M:M;HOL.VAN("zzzz";M:M;1);1)
-
Delila_1
veterán
válasz
bteebi #32169 üzenetére
Létrehozol egy userformot, ami egy listboxot tartalmaz, meg egy gombot.
Modulba:
Sub ListaFeltoltes()
Dim FN As String
FN = Dir("D:\Proba\lista_" & datum & "*.pdf")
Do While FN <> ""
UserForm1.ListBox1.AddItem FN
FN = Dir()
Loop
UserForm1.Show
End SubEz a makró feltölti a feltételeknek megfelelő fájlok nevével a listboxot, és indítja a formot.
A gomb click eseményébe írhatod be, hogy mi legyen a listboxban kiválasztott 1 vagy több fájllal. Ha többet is ki akarsz választani, akkor a listbox MultiSelect tulajdonságát fmMultiSelectMulti-ra kell állítanod, az alapértelmezett fmMultiSelectSingle helyett.
-
Fferi50
Topikgazda
válasz
bteebi #32157 üzenetére
Szia!
Szerintem a dir() paranccsal végig tudsz menni az összes fájlon.
file=Dir("D:\Proba\lista_" & datum & "*.pdf"
do while file<>""
lista=lista & "," & file
file=dir()
loop
A listát használhatod egy cella érvényesítéséhez, amiből kiválasztható amelyiket meg kell nyitni, vagy csinálhatsz egy drop-down-t a munkalapon, aminek a forrása a lista.Ezen kívül lehet még olyan, hogy a FileDateTime(file) függvénnyel lekérdezed az adott fájl dátumát és a legfrissebbet kiválasztod megnyitásra.
Üdv.
-
Fferi50
Topikgazda
válasz
bteebi #31845 üzenetére
Szia!
A függvényed első paramétere ne Range legyen, hanem Variant. Ebben az esetben tudsz tartományt és számot is beadni paraméternek, mindkettőt elfogadja.
A vezető ill. követő 0 számjegyeket az Excel cellaformázás egyéni számformátumban tudod beállítani, amit a Range.NumberFormat tulajdonsággal lehet makróban állítani, pl.Range("A2").NumberFormat="000000.000000"
a tizedesvessző előtt és után is 6-6 számjegyet jelenít meg, az üres helyiértékekre 0 kerül.Mivel a FIX függvény alapból szöveget ad vissza, ezért szám csak akkor lesz belőle, ha a VAL függvénnyel átalakítod számmá.
Function Sigdig(number As Variant, SigDigits As Integer) As Double
Sigdig = Val(WorksheetFunction.Fixed(number, SigDigits - Int(WorksheetFunction.Log10(Abs(number))) - 1, True))
End FunctionÜdv.
-
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?
-
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
Wend -
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
.
-
Delila_1
veterán
válasz
bteebi #31572 üzenetére
A dolg változóba beteszel egy véletlen számot – dolg = Round(Rnd() * (felso - also) + also, 0).
Megnézed, hogy a napok() tömb dolgadik eleme egyenlő-e "X"-el, vagyis használtad-e már ezt a dolg értéket? Ha igen, akkor visszazavarod a futást a véletlen szám generáláshoz. Ha üres ez az elem, akkor egyrészt a beírod a dolgadik nevet a megfelelő helyre – Cells(sor, oszlop) = Cells(dolg, 11) –, másrészt a tömbben foglalttá teszed egy "X"-szel – napok(dolg) = "X" .A következő ciklussal ellenőrzöd, hogy a tömbben kihasználtál-e minden értéket. A már foglalt tömbelemek értéke "X". Ezt számolod a ciklusban, a db változó segítségével. Ha a db értéke megegyezik a dolgozók számával (db=17), akkor kiüríted a tömb elemeit a következő kis ciklussal, és folytatódik a cellák feltöltése a nevekkel.
Felvetődhet a kérdés, miért éppen napok a tömb neve? A válasz: csak.
-
Delila_1
veterán
-
Delila_1
veterán
válasz
bteebi #31560 üzenetére
Kicsit másképp rendeztem az adatokat. Az A oszlopban vannak a hetek 21–52-ig. A heti 2 dátum a B és C oszlopban látható. A neveket a K oszlopba tettem.
A makró a heti 2 nevet a D és E oszlopba írja be. Két ellenőrző oszlopot tettem be az F, ill. az L oszlopba, a képen látszik ezeknek a képlete.A makró
Sub Beosztas()
Const also = 1: Const felso = 17
Dim napok(1 To 17), db As Long, tele As Long
Dim sor As Integer, oszlop As Integer, dolg As Integer
For sor = 2 To 33
For oszlop = 4 To 5 'D:E
Veletlen:
Randomize
dolg = Round(Rnd() * (felso - also) + also, 0)
If napok(dolg) = "X" Then GoTo Veletlen
napok(dolg) = "X"
Cells(sor, oszlop) = Cells(dolg, 11) 'K oszlop, nevek
DoEvents
db = 0
For tele = 1 To 17
If napok(tele) = "X" Then
db = db + 1
End If
Next
If db = 17 Then
For tele = 1 To 17
napok(tele) = ""
Next
db = 0
End If
Next
Next
End Sub -
Delila_1
veterán
válasz
bteebi #31313 üzenetére
Az xls kiterjesztésből gondolom, hogy 2007-nél alacsonyabb verziót használsz.
Mikor behívtad a fájlt, a Szerkesztés menüben a Csatolásokat meg tudod nyitni. Kiválasztod a forrásnál az egyik fájlt, amire hivatkozol, majd megnyomod a Váltás gombot, és kitallózod a jelenlegi fájlodat. Így jársz el a többi, behivatkozott fájl esetén is.
-
válasz
bteebi #31199 üzenetére
Ezekkel a dátumformázási beállításokkal nagyjából tisztában vagyok, és meg is tudok jeleníteni dátumokat, ami hiányzik, az a rövid dátum beírása.
Win 8.1 alatt még működött, Win 10 alatt a többi általam használt táblázatkezelőben működik -- Win10 alatt Excelben nem működik.És legjobb tudomásom szerint ehhez még csak beállítás sem kell, ez alapértelmezett szolgáltatás ősidők óta.
Úgyhogy valami azt súgja, hogy a MS próbálja ösztönözni a felhasználókat a váltásra...
Köszönettel: MaCS
-
Delila_1
veterán
válasz
bteebi #31156 üzenetére
Feltettem ide a fájlt.
Az eredeti lapodat átneveztem, az új neve Eredeti. Készítettem róla egy másolatot, a Sheet1-et, ezen dolgoztam.
Tettem a lapra egy feltételes formázást, majd futtattam a makrót. A makró végén az F oszlopba írtam egy ellenőrző képletet. Ha itt minden sorban IGAZ érték van, akkor rendben van a dolog.
-
spe88
senior tag
válasz
bteebi #31114 üzenetére
a te makród az működött, viszont a linkelt oldalira azt írja az Excel, hogy nincs licencem!
A Seleniumot nézegettem, de annyira távol vagyok ezektől, hogy lassan jobban járok, ha egyenként lementem őket. Még ha értenék hozzá csak-csak, de így nagyon sok idő mire rájövök bármire is. -
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 Sub -
tgumis
tag
-
m.zmrzlina
senior tag
válasz
bteebi #31076 üzenetére
Nálam is sok olyan makró működik ami hasonló feladatot lát el. Én úgy oldottam meg ezt a problémát, hogy a makrós munkafüzetbe olvasom be a textfájlt vagy az .xls-t, megcsinálom a fájlon a szükséges dolgokat és aztán elmentem a kívánt formátumba.
Így nem kell pakolgatni a makrót meg nem kell a minden .xls forrásfájlból xlsm-et csinálni. Plusz a makrós munkafüzetbe kiválóan lehet változókat mentegetni, meg a feldolgozáshoz szükséges listákat tárolni.
-
the radish
senior tag
-
Fferi50
Topikgazda
válasz
bteebi #30495 üzenetére
Szia!
Az utvonal nevű változódat Public ként kell definiálnod a modul elején.
Public utvonal As String
Ezután az OptionButtonokhoz tartozó eljárásokban nem szabad Dim -mel újradefiniálni az útvonalat, azt a sort felejtsd el!
Az utvonal értéke mindig az lesz, amit a legutolsó OptionButtonos eljárás megadott neki.Javaslom a VBA helpben az Understanding the Lifetime of Variables témakört nézd át hozzá még, illetve a Public utasításhoz fűzött példákat.
Üdv.
-
válasz
bteebi #29816 üzenetére
Ránézésre rendesen fog működni, azt teszi, amit kell.
(csak nyilván nem szabad eseményhez rendelni, mert onnantól, amíg a makró fut, nem kell adatot bevinni...)MegaNorby
felveszel egy segédoszlopot, pl ha A1-ben vannak a telószámok, akkor B1-be ezt a képletet írd majd másold végig:
="06" & A1Delila_1
Sajnos nem sok időm van, ami meg igen, annak nagy részét egy másik topikkal kapcsolatos teendőim felemésztik. Hébe-hóba benézek ide is, de makróra (komolyabbra) nem feltétlenül van/lesz időm.
(Mondjuk ahogy látom, vannak jó koponyák a topikban, szóval nem aggódom, hogy az érdeklődők ne kapnának választ, akár egy "fejtörősebb" feladványra is...) -
bsh
addikt
válasz
bteebi #29743 üzenetére
sehol nem írta, hogy "időnként működik". ha névütközések vannak, akkor ez sosem fog működni, mivel le sem fordul úgy a program. ha nincs ütközés, akkor lefordítja és akkor mindig működni is fog.
ebből következően ha más fájlban működik ugyanez a kód, akkor ott abban a fájlban a modul neve nem "valasz". -
poffsoft
veterán
válasz
bteebi #29730 üzenetére
Option Explicit
Sub kivalaszt()
Dim ar As String, lastrow As Double, lr As Double, sor As Double
lastrow = Sheets("forras").UsedRange.Rows.Count
lr = Sheets("adat").UsedRange.Rows.Count
On Error Resume Next
For sor = 2 To lr
ar = Application.WorksheetFunction.VLookup(Sheets("adat").Cells(sor, 1), Sheets("forras").Range("A1:B" & lastrow), 2, False)
If Err.Number <> 0 Then ar = "'#HIÁNYZIK"
Sheets("adat").Cells(sor, 2) = ar
Next
End Subvalójában nem találja a keresett adatot a vlookup...
Új hozzászólás Aktív témák
Hirdetés
- Melyik tápegységet vegyem?
- Óra topik
- Házimozi belépő szinten
- Kevesebb dolgozó kell az Amazonnak, AI veszi át a rutinfeladatokat
- Milyen processzort vegyek?
- ASZTALI GÉP / ALKATRÉSZ beárazás
- Interactive Brokers társalgó
- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- A fociról könnyedén, egy baráti társaságban
- Gitáros topic
- További aktív témák...
- AKCIÓ! ASROCK H310CM i5 9600K 32GB DDR4 500GB SSD RTX 3050 8GB DeepCool Tesseract SW 500W
- DOKKOLÓ BAZÁR! Lenovo, HP, DELL és egyéb más dokkolók (TELJES SZETTEK)
- BESZÁMÍTÁS! ASUS ROG Zephyrus GA403UV Gamer notebook - R9 8945HS 16GB RAM 1TB SSD RTX 4060 8GB WIN11
- Telefon felvásárlás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- Xiaomi Redmi A3 64GB Kártyafüggetlen, 1Év Garanciával
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged