- Yettel topik
- Milyen okostelefont vegyek?
- Új Trónok Harca telefon érkezik
- Magisk
- Samsung Galaxy Watch7 - kötelező kör
- Android alkalmazások - szoftver kibeszélő topik
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Fotók, videók mobillal
- Okosóra és okoskiegészítő topik
- Motorola Edge 50 Neo - az egyensúly gyengesége
Hirdetés
-
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
föccer #52488 üzenetére
Szia!
Egy lehetőség azEltolás (Offset)
függvény használata. Azt kell figyelembe venni, hogy az elnevezett tartomány első oszlopa a függvényben a 0. oszlop, így a második oszlop:=Eltolás(Név;0;1;;1)
A paraméterek:
1. paraméter: Ahonnan az eltolást számítjuk - itt az egész nevesített tartomány
2. paraméter: A sorok száma, amennyivel el kell tolni a tartományt - mivel maradunk a tartománynál, itt ez az érték 0
3. paraméter: Az oszlopok száma, amennyivel el kell tolni a tartományt - mivel a második oszlop az elsőtől 1 távolságra van ezért az érték értelemszerűen 1 (az első oszlop esetén 0)
Ez a 3 paraméter kötelező. A következő kettő opcionális:
4. paraméter: Az eltolás eredményeként létrejövő tartomány sorainak a száma. Ha nem adunk meg értéket - azaz kihagyjuk - akkor az eredeti tartomány sorainak száma marad. Ezért hagyjuk ki, mert nekünk minden sor szükséges.
5. paraméter: Az eltolás eredményeként létrejövő tartomány oszlopainak száma. Mivel egy oszlopot szeretnénk eredményként kapni, ez a paraméter 1
Így kaphatod meg a többi oszlopot is a megfelelő paramétereket használva. Így nem kell tudnod a nevesített tartomány címét.
Másik lehetőség: A tartományt nevesítés helyett Táblázattá alakítod (Beszúrás - táblázat )
Ez alapján a táblázat egyszerűsített hivatkozásait használhatod.
[link] Itt találod hozzá a súgót.
Üdv. -
-
Delila_1
veterán
válasz
föccer #52428 üzenetére
Az A oszlopban vannak értékek, a B oszlopot formáztam, 2019-es verzió.
Talán túl friss az Exceled.Sub Makró1()
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$A1<20"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 49407
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
-
válasz
föccer #52348 üzenetére
Köszi, de ez is csak az oszlopnak a számát adja meg, viszont nekem a betű értéke kell
de megoldottam máshogy:
=CÍM(FKERES(I1;L:M;2;IGAZ);HOL.VAN(H1;'Ablak'!1:1);2)
-> BM$186
innen meg:=BAL(K4;SZÖVEG.KERES("$";K4)-1)
-> BMAmivel most sikerült 2 órát kidobni az az hogy a gépen lévő excel és a google drive -os excel más eredményre jut ezzel a paranccsal:
=HOL.VAN(H1;'Ablak'!1:1)
gépes excel: 65
google drive excel: 11 -
Fferi50
Topikgazda
válasz
föccer #52291 üzenetére
Szia!
Az egyes tartományokhoz rendelhetsz felhasználókat, akik jelszóval / vagy anélkül tudják módosítani a tartalmat - lapvédelem persze itt is kell az érvényesüléséhez (Tartományszerkesztés engedélyezése menüpont).
Makróból úgy tudod a lapvédelmet "megkerülni", azaz feloldás nélkül módosítani, ha a védelem bekapcsolásakor a UserInterfaceOnly paramétert True értékkel adod meg:Sheets("akarmi").Protect Password:="PW", UserInterfaceOnly:=True
Amire figyelned kell: amint a fájlt bezárod, ez a paraméter elveszti a hatását, ismételt megnyitáskor már nem érvényesül. Így minden megnyitáskor ki kell adni a lapvédelmi parancsot a fenti módon.
A zárolt tartalmakat makróból tudod módosítani, de a felhasználók nem.
Üdv. -
föccer
nagyúr
válasz
föccer #52285 üzenetére
Hm, asszem gordiuszi csomóként a hibakezelésben visszaíratom az elérési utat a helyére és a hibakezelésbe beraktam +-ba a napi mentés is. Így mindenképpen jó lesz.
Vagy a hiba nélküli ágon fut végig, vagy a hibakezelés ágán, miután a hibakezelés beerőszakolt valami elérési utat a B7 cellába.
Köszönöm, hogy végig gondolhattam így félhangosan
-
föccer
nagyúr
válasz
föccer #52285 üzenetére
Private Sub Workbook_Open()
Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim i As Integer
Dim Fileok_szama As Integer
Dim Fnev As String
Dim Kell_e_menteni As Boolean
Dim SFnev As String
i = 0
Filok_szama = 0
Fnev = ""
Kell_e_menteni = True
SFnev = ""
Sheets("Save_log").Range("T:U").ClearContents
Set oFSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
If Sheets("Save_log").Range("B7").Value <> "" Then
Set oFolder = oFSO.GetFolder(Sheets("Save_log").Range("B7").Value)
Else
Set oFolder = oFSO.GetFolder(Sheets("Save_log").Range("B8").Value)
End If
If Err = 0 Then
For Each oFile In oFolder.Files
If oFile.Name = Sheets("Save_log").Range("B5").Value Then
Kell_e_menteni = False
End If
Sheets("Save_log").Cells(i + 1, 20) = oFile.Name
Sheets("Save_log").Cells(i + 1, 21).Formula = "=IFERROR(MATCH(T" & i + 1 & ",M:M,0),0)"
i = i + 1
Next oFile
Filok_szama = i
For i = 1 To Filok_szama
If Sheets("Save_log").Cells(i, 21).Value = 0 Then
Fnev = oFolder & "\" & Sheets("Save_log").Cells(i, 20).Value
Kill Fnev
End If
Next
If Kell_e_menteni = True Then
SFnev = Sheets("Save_log").Range("B7").Value & Sheets("Save_log").Range("B5").Value
ActiveWorkbook.SaveAs Filename:=SFnev
End If
Else
If Sheets("Save_log").Range("B7").Value <> "" Then
MkDir Sheets("Save_log").Range("B7").Value
Else
MsgBox "Nem találom a biztonsági mentés helyét. Kérlek add meg a biztonsági mentés helyét."
Call XBUP_mentesi_hely_Valasztas
MkDir Sheets("Save_log").Range("B7").Value
End If
End If
On Error GoTo 0
End Sub
-
Fferi50
Topikgazda
válasz
föccer #52261 üzenetére
Szia!
"kódjába beraktam így, de futtatta."
Most akkor futtatta vagy nem?
Egyébként ha a Listbox jobb egérgomb View Code-ra kattintasz, majd a jobb oldali lenyílóból kiválasztod a DblClick eseményt, ezt kapod:Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub
Itt találhatsz rá egy kis helpet.
Itt pedig némi példát.Üdv.
-
Fferi50
Topikgazda
-
Fferi50
Topikgazda
válasz
föccer #52074 üzenetére
Szia!
A hálózati elérésnél használja a "/" karaktereket, helyinél a "\'" járja.
Az onedrive egyébként szivat, igen, mert ráadásul még helyben is menti.
Szerintem a Chdir(...) jó lehet.milyen dialoggal tudok csak egy könyvtár útvonalat beszedni?
Így :Sub konyvtarvalaszt()
Dim konyvtar As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show Then
konyvtar = .SelectedItems(1)
MsgBox konyvtar
Else
MsgBox "Nem választottál"
End If
End With
End Sub
Utána érdemes megnézni az aktív könytárat - nálam mindig az eggyel feljebbi lett az aktív könyvtár.
Üdv. -
Delila_1
veterán
válasz
föccer #52074 üzenetére
Egy régebbi makró:
Sub Mappa_Valasztas()
Dim FD, utvonal As String
MsgBox "Válasszunk magunknak útvonalat"
Set FD = Application.FileDialog(4) 'mappa választás
With FD
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
MsgBox "Nem választottál útvonalat, befejezzük.", vbInformation, "Értesítés" Exit Sub
Else
utvonal = .SelectedItems(1)
End If
End With
MsgBox "A kiválasztott mappa: " & utvonal utvonal = utvonal & "\" 'jöhet a mentés, vagy megnyitás
End Sub
Nem jó amit Fferi, vagy én írtunk?
-
Fferi50
Topikgazda
válasz
föccer #52071 üzenetére
Szia!
Lehetséges, hogy másik könyvtárból indítottad a fájlt, nem abból ahol egyébként van. Így nem az adott munkafüzet könyvtára az "aktív" könyvtár. (pl. a fájlkezelőből lett indítva a munkafüzet...)
A tényleges könyvtárat a Curdir() függvény adja vissza.
Delila segített.
Vagy Chdir(ActiveWorkbook.Path) és akkor nem kell az utvonal nevű változó
Üdv. -
föccer
nagyúr
válasz
föccer #52070 üzenetére
No, ehhez tartozó érdekesség.
Mivel nem adok be a fájl nevénél elérési utat, így mindig a fájl mellé mentette a pdf-eket. Sokszor megcsináltam már, mindig hiba nélkül ment.
2 napja viszont nem rakja oda a fájlokat. INFÓ függvénnyel lekérdeztem, hogy mégis honnan gondolja, hogy meg lett nyitva a fájl és egészen más könyvtárt adott vissza és ott meg is találtam a lementett pdf-eket.
konkrétan 3 könyvtárszinttel fentebb, mint ahol ténylegesen az xlsm megnyitásra került. :-/
Ez hogy lehet? Illetve hogyan tudnám ezt kiküszöbölni? A cél, hogy mindig a fájl megnyitási könyvtárába legyen lementve a pdf, a megadott néven.
A fájl neve egy több darabból történő összefűzés eredménye és csak a tényleges fájl nevet tartalmazó string.
-
adDis
csendes tag
válasz
föccer #52055 üzenetére
Köszi a tippet, de sajnos így sem jó nekem.
Úgy képzeld el, hogy van A, B, C, D táblázat mondjuk egy munkalapon. B táblázat az A adataiból dolgozik, D a C-ből. Mivel sokat kell már görgetni vízszintesen, ha valamit meg akarok nézni (és szélesíteni, bővíteni is akarom még mindegyiket), a fejembe vettem, hogy megnézem, milyen lenne úgy, ha A, B, C és D táblázat is eleve külön-külön munkalapokon lenne. Most elsőként azt szeretném tehát kipróbálni, hogy a B-t hogy tudnám átrakni úgy egy másik munkalapra, hogy attól még az eredeti munkalapon levő A-ra mutassanak a hivatkozásai (aztán ha ez sikerül, ugyanezt kell eljátszanom majd a C-vel, D-vel). Sima control c/v-vel ugye most HIV! hibajelzéseket kapok a képletekben. Aztán az is lehet, hogy csak az az egy "gyors megoldás létezik", hogy a HIV! hibajelzéseket valahogy átírogatom a CSERE funkcióval - hogy mégse egyenként kelljen átírogatnom a hasonló képleteket használó oszlopokban - nem tudom...
-
-
szergejj
csendes tag
válasz
föccer #51892 üzenetére
Nem tudom mi okozta ezt. De meguntam és nyitottam egy új excel táblát, majd minden lapot atmasoltam abba. Ezt követően a form-okat és a kódokat. Utána kiszedtem belőle a külső hivatkozásokat. És most működik
bárhova tudom menteni és bárhol működik.
Úgyhogy végre újra nekiallhatok kódolni -
KubanitoS
veterán
válasz
föccer #51870 üzenetére
Igazából ilyesmi, mint amit te csináltál, csak nálam egy db oszlop van.
A te példádból:
- van a "B" oszlop, ahová beírod az 50-et
- utána a kettő és öt közötti értékeket kell kivonni az ötvenből, de úgy, hogy ne mindig az alapszámból indulon ki, hanem a levont értékből...Egyszerűbb ha leírom: készletfogyásról van szó...
Van 50 liter anyag és annyival csökkenjen ez az érték, amennyi szám alá van írva.
Viszont ami fontos: az értékek nem feltétlenül egymás alatt vannak, lehetnek kimaradt sorok is, ahol nincs semmi.
Delila_1: köszi neked is, de sajnos előre nem tudom melyik lesz az utolsó sor
-
szergejj
csendes tag
válasz
föccer #51850 üzenetére
Nem is makroval mentek, a hálózati elérés stabil. Ha egy másik makrós fájlt mentek abba a könyvtárba minden jól működik. Gondoltam már arra is, hogy van egy mappa ellenőrzés benne és okozhatja e a hibát. De a másik makrós táblámban ugyanúgy benne vans az ellenőrzés és azt tudom oda menteni.
BagyiAti: biztos hogy nem jogosultság probléma. Én hoztam a könyvtárat létre, a benne lévő fájlokat én másoltam oda, Excel táblat létre tudok hozni ebbe a mappába.
-
andreas49
senior tag
válasz
föccer #51733 üzenetére
Sajna mégsem jó ez a képlet. Ha azon évről van szó, akkor továbbra is #SZÁM hiba, ha nem azonos, akkor csak a napok különbségét adja és nem veszi figyelembe, hogy más év szerepel az adatsoron. Valamit rosszul vettek át az angol fordítás során.
A sima kivonás a legegyszerűbb!
-
válasz
föccer #51712 üzenetére
Akkor a megoldás, amit adtam, pont azt csinálja, amit szeretnél...
(csak nyilván Én nem neveztem el a tartományokat)UI: Gondolom nem láttad a végleges hsz-t, mert közben szerkesztettem a hsz-t, mert olybá tűnik, a beépített képmetsző megmarhult W11 alatt, aztán furcsa méretű/eltolású stb. képet mentett...
-
-
karlkani
aktív tag
válasz
föccer #51682 üzenetére
Köszönöm szépen!
=HA(INDEX(A8:B1000;HOL.VAN(ÖSSZEFŰZ("*";D8;"*");B8:B1000;0);1)=0;"";INDEX(A8:B1000;HOL.VAN(ÖSSZEFŰZ("*";D8;"*");B8:B1000;0);1))
Ezt sikerült összehozni. Tartományként A
-t az INDEX-hez illetve B
-t a HOL.VAN-hoz nem tudok használni, az első 7 sort ki kell hagynom a keresésből (ott is lehet találat). Ha A cella üres, eredménynek 0-t ad, ezért használtam a HA függvényt is.
#51683 lappy
Azt nem írtam, le vagyok ragadva még a 2013-as verziónál, nincs ilyen függvény...
Azért köszönöm! -
föccer
nagyúr
válasz
föccer #51621 üzenetére
Jah, még annyit elfelejtettem írni, hogy csak úgy működik helyesen, ha minden adat és a kilistázás is az első sortól indul, mert a függvény a sorazonosítókat használja fel arra, hogy kiszámolja, hogy éppen hányadik embernél jár és melyik szakaszát kell kiszedni a feladatlistának.
-
oke
senior tag
válasz
föccer #51610 üzenetére
Köszi, elsőre ezek nekem elég "megfoghatalanok" hírtelen, értelmeznem kell még
.
Végül némileg manuálisan és FKERES-el oldottam meg, az első javaslatod segítségével.
Beraktan egy segédoszlopot a fő táblába, ahol 1-től kezdődően sorszámoztam a sorokat az utolsóig. Egy másik fülön pedig hozzárendeltem a nevekhez egy-egy egész számot az alapján amennyi az össz sor és hogy hány embernek akarom kiosztani. Így kijött az, hogy 20 sor jut egy embernek, így 20-asával rendeltem hozzá neveket:1 - Géza
21 - Attila
41 - István
...Majd a fő táblába beraktam még egy oszlopot és FKERES-sel a számok alapján hozzárendeltem a neveket, a függvényben a nem pontos egyezést beállítva.
Nem tudom mennyire érthető, amit írtam...
-
Mutt
senior tag
válasz
föccer #51276 üzenetére
Szia,
Ha van időd, akkor nézz rá a Power BI-ra. A mondottak alapján jobb megoldás lehet, beépített time-inteligence funkciója segít az eltérő időintervallumok kezelésében, Power Query része makrót tud helyettesíteni és a DAX megoldja a számításokat viszonylag kis fájl méretben. Nálam 3 év adata kb. 1,5 millió sor és 30 oszlop 98 MB.
Hátrányt is mondok: DAX szivat ahol tud, Microsoft minden hónapban újabb változattal jön, amiben minden máshol van mint korábban, Power Queryben a legkisebb módosítás is újraszámolást eredményez ami miatt percekig nézem a homokórázó kurzort.
üdv
-
Fferi50
Topikgazda
válasz
föccer #51276 üzenetére
Szia!
"De mivel tudom biztosítani, hogy 1 for-on belül a 4 sub úgy fut le, hogy szépen, megvárja az egyik a másik futását, és minden rendben kiszámolódik és lementődik."
Egyrészt - ugye egymás után indítod a subokat, tehát a következő csak az előző után futhat. Persze értem, a számolás végrehajtását is ellenőrizni kell, erre a következő utasítás sorozat lehet jó:
Do While Application.CalculationState=xlCalculating : Loop
Ez addig "áll", amíg a számolás be nem fejeződik . A ciklus belsejébe tehetsz egy várakozási üres ciklust is - pl. For x=1 to 5000 : Next - , hogy ne azonnal ismétlődjön a számolási állapotra a rákérdezés.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #51277 üzenetére
Szia!
Ha a terület egyforma, akkor az lehet a gond, hogy annak a munkalapnak kell aktívnak lenni, amelyikbe az értéket be szeretnéd illeszteni.
Egyébként használható a With utasítás is:Dim Akt_datum_oszlop As Integer
With Workbooks("Tech_elemzo_recet_mintavetel_v4_3.xlsm")
Akt_datum_oszlop = .Sheets("KEZELŐ").Range("H19").Value
MsgBox (Akt_datum_oszlop)
.Sheets("MBO_haladás").Activate
Range(Cells(4, Akt_datum_oszlop), Cells(37, Akt_datum_oszlop)).Value = .Sheets("KEZELŐ").Range(Cells(2, 20), Cells(35, 20)).Value ' MBO KPI
End With
MsgBox ("KÉSZ")
'Ha szükséges, akkor vissza aktíválhatod a.Sheets("KEZELŐ").Activate sorral az End With előtt a kezelő munkalapot. De magához az értékek kiolvasásához nem kell aktívnak lennie.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #51274 üzenetére
Szia!
Ha nem adod meg a munkafüzetet, akkor az éppen aktuális munkafüzetben fogja keresni a KEZELŐ nevű munkalapot, ha nem talál ilyet, akkor hibaüzenettel megáll.
Ilyen esetekben célszerű a munkafüzetet tartalmazó hivatkozást is megadni, tehát Workbooks("valami").Sheets("Kezelő").Range("H19").Value
Az előző kérdésedre egy kérdés: Melyik munkafüzetben van a második munkafüzetet feldolgozó makró? Szerintem annak is az első munkafüzetben kell lennie és akkor kell egy átpakoló makró - utána feldolgozó makró - utána kövekező lépés, kb. így:
For ciklus indul
átpakoló makró
feldolgozó makró
next
Ne felejtsd el, ha új munkafüzetet nyitsz, akkor az lesz az aktív munkafüzet, ha új munkalapot adsz hozzá, az lesz az aktív munkalap.
Üdv. -
föccer
nagyúr
válasz
föccer #51273 üzenetére
Illetve még annyi a kérdés.
Ha munkafüzet1-ben call-al meghívok egy sub-ot, ami a munkafüzet 2-ben fut és a futó sub-ban csak annyi van, hogy Akt_datum_oszlop = sheets("KEZELŐ").Range("H19").Value, akkor a munkafüzet1-ben keresi az értéket (ahol az első sub indult) vagy a munkafüzet 2-ben (ahová a call mutat)?
Köszi!
üdv, FG
-
13128814
tag
válasz
föccer #51237 üzenetére
Először is köszönöm a válaszodat!
Hazudnék ha azt mondanám hogy teljesen értelek.Ha jól értem, akkor jobb lenne megnyitni azt a fájlt amire eddig próbáltam "hegeszteni" az FKERES függvényt?
Viszont akkor lehetne úgyis, hogy mondjuk azt mondom (szintaktikát engedjük el):
aktualisDatum = today()
elozoDatum = aktualisDatum - 1
És akkor a for ciklusban nem is csinálok listát, hanem végig léptem visszafelé az
elozoDatum
változót, addig a pontig amíg nem talál egyezést és nem nyitja meg valamelyiket.(Sima if ággal ezt le lehet kezelni, nem?)
És mivel megtudta nyitni valamelyik
elozoDatum
-nál akkor mi megtudjuk határozni mi a fájl neve. És akkor mondjuk megtehetjük hogy:Dim megnyitottWb
set = elozoDatum &
excelMaradekNev
És innentől kezdve tudunk könnyen hivatkozni erre a füzetre vagy a másikra.Vagy nagyon félreértettelek?
-
Fferi50
Topikgazda
válasz
föccer #51121 üzenetére
Szia!
Szerintem ez alapján FKERES (XKERES) függvénnyel is megoldható a feladat.
A hasonlítani kívánt két hónap azonosítóit egy munkalap oszlopba áttenni - ezután Adatok - Ismétlődések eltávolítása - majd a két havi FKERES függvény eredményének összehasonlítása kerül az eredmény oszlopba.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #51119 üzenetére
Szia!
Azt még mindig nem értem, miért kell egyedi sorazonosító és honnan tudod azokat?
Mielőtt nagyon belemélyednél, van egy olyan menüpont az Adatok csoportban, hogy összesítés -> ez arra szolgál, hogy külön-külön munkalapon levő azonos struktúrájú adatokat egy munkalapra hozzon össze. Talán érdemes lenne végiggondolni ezt is.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #51117 üzenetére
Szia!
Tehát fejlécek (oszlop azonosítók) és oldallécek (sor azonosítók) vannak az első sorban ill. első oszlopban? Jól értem?
" kimutatást készítsek, hogy hónapról-hónapra mennyi sorban volt változás az előző hónaphoz képest"
Hány hónapot kell összehasonlítani egy kimutatásban?
Lekérdezések sorozata szerintem lehetővé teszi a megoldást. PowerPivot szerintem jó lehet.
Talán több lehetne a segítség, ha szűkített és nem valódi adatokkal egy mintát feltennél valahova. Miből mit szeretnél létrehozni.
Üdv. -
-
Fferi50
Topikgazda
válasz
föccer #51081 üzenetére
Szia!
Talán érdemes megfontolni a következő gondolatot:Dim nyomtatni
Const sheetek = "Kezelő,TOP LISTÁK,TOPELEMZES,VCBE,EE_1,EE_2,EE_3,EE_4,EE_5,EE_6,EE_7,EE_8,EE_9,EE_10,EE_11,EE_12,EE_13,EE_14,EE_15,EE_16,EE_17,EE_18,EE_19,EE_20"
EE_szama = Sheets("KEZELŐ").Range("D23").Value
nyomtatni = Split(Left(sheetek, InStr(sheetek, "EE_" & EE_szama) + IIf(EE_szama < 10, 3, 4)), ",")
Sheets(nyomtatni).Select
Mivel egyben definiáltuk az összes nyomtatási szükségletet, az EE_szám alapján mindig le tudjuk vágni a megfelelő darabot belőle. A Split függvény pedig tömböt csinál a levágásból.
Üdv. -
föccer
nagyúr
válasz
föccer #51073 üzenetére
A select case az szépen működik. Nem túl elegáns, de hibátlan. Szépsége a dolognak, hogy ahogy pörgetem a for-t, az EE_szama ugye lehet több vagy kevesebb, ugyan akkor az új kijelölési array felülírja az előző ciklusban használt kijelölést. Tehát nem hozzáadja az előző kijelölésekhez, hanem új kijelölést állít be, így nem kell azzal foglalkozni, hogy a korábbi kijelölést megszüntessem.
Nyomtatással viszont félsikert értem el. Kipróbáltam ez aze ExportAsFixedFormat-ot. Szépen le is generálja nekem a pdf-et és fel is rakja oda ahová kell, de hiába van beparaméterezve hogy vegye figyelembe az oldaltöréseket, nem úgy jön le a doksi, ahogy az a MS pdf printerével megszoktam és beállítottam.
-
Delila_1
veterán
válasz
föccer #51071 üzenetére
Jó ötlet.
Esetleg a kötelező 3 lap nyomtatása után egy for-next ciklust indíthatnál.Db = Sheets("Kezelő").Range("D23")
For lap = 5 To 24
If Mid(Sheets(lap).Name, 4, 2) * 1 <= Db Then
'nyomtatás
Else
'exit for
End If
Next
Biztosan van ennél egyszerűbb VBA-s megoldás az együttes lapok kijelölésére.
-
Delila_1
veterán
válasz
föccer #51068 üzenetére
Kicsit tovább vittem az előzőt, de megállt a tudományom. Addig jutottam, hogy összeáll az együttesen kijelölendő lapok listája. Hátha valaki tovább jut, esetleg egészen más úton.
Sub arr()
Dim lapszam As Integer, lap As Integer, lapok As String, tomb(29)
For lap = 2 To 4
tomb(lap - 2) = Sheets(lap).Name
Next
lapszam = Sheets("Kezelő").Range("D23")
For lap = 5 To lapszam + 4
If Mid(Sheets(lap).Name, 4, 2) * 1 <= lapszam Then
tomb(lap - 2) = Sheets(lap).Name
End If
Next
For lap = 0 To 29
If tomb(lap) = "" Then Exit For
lapok = lapok & """" & tomb(lap) & """"
lapok = lapok & ","
Next
lapok = Left(lapok, Len(lapok) - 1)
lapok = """" & lapok
lapok = Right(lapok, Len(lapok) - 1)
Debug.Print lapok
End Sub
-
Delila_1
veterán
válasz
föccer #51068 üzenetére
Eddig jutottam el:Sub arr()
Dim lapszam As Integer, lap As Integer
Dim tomb(29)
For lap = 2 To 4
tomb(lap - 2) = Sheets(lap).Name
Next
lapszam = Sheets("Kezelő").Range("D23")
For lap = 5 To lapszam + 4
If Mid(Sheets(lap).Name, 4, 2) * 1 <= lapszam Then
tomb(lap - 2) = Sheets(lap).Name
End If
Next
End Sub
Innen valahogy be kell olvasnod az array-ba a tomb neveit, de most el kell rohannom, késésben vagyok.
-
Fferi50
Topikgazda
válasz
föccer #51018 üzenetére
Szia!
A fileokat begyűjtő ciklus elé:On Error Resume Next
A Workbooks.Open utasítás után:
If Err=0 Then
' Ide jönnek a sikeres megnyitás utáni műveletek
a fájlbegyűjtő ciklus Next utasítása elé (ami most az utolsó sor)
Else
' Ide jön a hibakezelő 2 sorod +
Err=0
End If
A folyamat (makró) legvégén pedig On Error Goto 0 - a hibakezelés visszaadása a VBA-nak.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #51010 üzenetére
Szia!
Esetleg kipróbálhatnád a következőt:
A másolandó sorok mellé teszel egy jelet (pl. x) az utolsó oszlop után.
Ezután autoszűrő a teljes tartományra - x -re.
Ezután másolás:Pl. Range($A$1:$X200).SpecialCells(xlCelltypeVisible).Copy Destination:=A célterület első cellája.
Ha esetleg így túl lassúnak találod, akkor lehet a látható tartományt területenként is másolni:Dim terulet As Range
For Each terulet In Range($A$1:$X200).SpecialCells(xlCelltypeVisible).Areas
terulet.Copy Destination:=a következő üres sor
következő üres sor meghatározása
Next
Ezután kitörlöd az x-eket és kész, vagy bezárod mentés nélkül a forrás fájlt.
Üdv. -
föccer
nagyúr
válasz
föccer #51009 üzenetére
Din tömb kérdését megoldottam. Ahol a forrás fájlban kigyűjtöm a szükséges sorokat, megfordítottam a sorrendet és vissza felé olvasom be az adatokat és előlről töltöm fel. Így a sorrend marad, de nem okoz gondot, hogy a forrás sorok végéről mindig eltünk 1-1 sor azonosító, mert mindig "előtte haladok" 1 sorral. Nem túl elegáns megoldás, de hibátlan
üdv, föcc
-
Fferi50
Topikgazda
válasz
föccer #51007 üzenetére
Szia!
Csak egy gondolat:
Amikor egy új fájlt nyitsz meg, akkor az lesz az aktuális munkafüzet. Mivel azt írod, hogy egymás után több fájlt is nyitsz, nagy eséllyel nem a cél fájlod az aktív workbook amikor ehhez a sorhoz ér a makró.
Nézd meg, hogy a hibaüzenet esetében melyik munkafüzet aktív.
Mivel a Gyujtott_mintavetelek munkalap előtt nem írsz munkafüzet nevet, így azt az aktuális munkafüzetben keresi - de mivel az aktív munkafüzet az éppen megnyitott forrás fájl, persze nem találja.
Megoldás: a forrás fájl megnyitása után aktíváld ismét a cél fájlt - vagy a munkalapnál használj teljes nevet.
Célszerűnek találnám, ha változóba tennéd a cél munkafüzetet és akkor egyszerűbb lenne a hivatkozás rá:
Mielőtt megnyitnád az első forrás fájlt:dim celwsh as Worksheet
set celwsh=Sheets("Gyujtott_mintavetelek")
'A mutatott sor pedig:
celwsh.Range(celwsh.Cells(Gyujtott_minta_darab + 2, 1), celwsh.Cells(Gyujtott_minta_darab + 2, 20)).Value
Ebben az esetben nem szükséges aktívvá tenni a cél munkafüzetet, mivel a változó tartalmazza a szükséges információkat.
Egyébként egy területet egyben is átmásolhatsz, nem kell soronként menni.
A forrás munkafüzetet is egyszerűbben tudod kezelni, ha változóba teszed a fájl megnyitása után. Egyszerűbb a kód írás is.
Üdv. -
Mutt
senior tag
válasz
föccer #50989 üzenetére
Szia,
EGYEDI helyett régebben tömb-függvényt kellett használni. Illetve egy rejtett fülön egy Kimutatás is használható rá.
SORBA.RENDEZ helyett DARABTELI vagy ÖSSZESÍT/SZORZATÖSSZEG.
SZŰRŐ a legnehezebb de SZUMHA/ÖSSZESÍT/SZORZATÖSSZEG és INDEX. Vagy egy Kimutatás és Szeletelő (Slicer)
Mivel az újabb függvényeket a régi Excel nem tudja értelmezni, ezért mentéssel nem lehet a problémát megoldani. A képleteket kell átdolgozni, hogy a régi rendszer megértese a kérést.
Mellesleg Power Query Excel 2010-hez telepíthető és már a korai változatok is tudták az általad említett dolgokat. Persze továbbra is nem real-time mint egy függvény.
üdv
-
Fferi50
Topikgazda
válasz
föccer #50967 üzenetére
Szia!
Akkor próbáld ki még a következőt:Dim a() 'persze ezt csak egyszer kell és a cikluson kívül
a = Sheets("Minta_NY").Range(Sheets("Minta_NY").Cells(5, 1), Sheets("Minta_NY").Cells(Mintak_szama + 4, 34)).Value
Sheets("MINTA_OSSZES").Range(Sheets("MINTA_OSSZES").Cells(Sheets("Mintavetelek_segedszamitas").Range("G2").Value + 1, 1), Sheets("MINTA_OSSZES").Cells(Mintak_szama + 4, 34)).Value = a
Vagyis a tartományt egy tömbbe olvassuk be és a tömböt írjuk ki.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #50963 üzenetére
Szia!
A két for ciklus helyett kipróbálhatnád ezt:
Sheets("MINTA_OSSZES").Range(Sheets("MINTA_OSSZES").Cells(Sheets("Mintavetelek_segedszamitas").Range("G2").Value + 1, 1), Sheets("MINTA_OSSZES").Cells(Mintak_szama + 4, 34)).Value = Sheets("Minta_NY").Range(Sheets("Minta_NY").Cells(5, 1), Sheets("Minta_NY").Cells(Mintak_szama + 4, 34)).Value
Persze a tartomány címeket azért ellenőrizd le légy szíves.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #50963 üzenetére
Szia!
Nem írtad, hogy az Application.ScreenUpdating milyen állapotban van. Ez szabályozza ugyanis a cellák módosításának kiírását a képernyőre. Figyelembe véve a számítások mennyiségét, a képernyő frissítés biztosan elég sok időt vesz igénybe.
Továbbá nem egészen értem miért kell - ráadásul kettő - ciklus az adatok átmásolásához, hiszen ismered a tartomány címét. (Sorok száma=minták száma, oszlopok száma 34). Tehát egyben is átmásolható szerintem.
Üdv. -
Fferi50
Topikgazda
válasz
föccer #50961 üzenetére
Szia!
Csak ötletek:
Az automatikus számolás kikapcsolása:
Application.Calculation=xlCalculationManual
Visszakapcsolás a végén:
Application.Calculation=xlCalculationAutomatic
Képernyő frissítés kikapcsolása:
Application.ScreenUpdating=False
Visszakapcsolás:
Application.ScreenUpdating=True
A StatusBar frissítéshez be kell tenni egy DoEvents utasítást, mielőtt módosítod a szövegét.
Esetleg szűrő bekapcsolással elrejteni azokat a sorokat, amelyeket nem kell másolni, majd a látható cellákat másolni.
A leggyorsabb egyébként szerintem a tartomány begyűjtése egy tömbbe, majd a tömb kiírása a célterületre. (Pl. Dim a() As Variant: a=Range("A1 : C4").Value : kapsz egy 3x4-es tömböt, ezek értékeit írhatod be a célcellába - tehát egyenként vizsgálható, hogy ki kell-e írni vagy sem.) Mivel a tömb a memóriában van, a vizsgálat is nagyon gyors. A legtöbb időt a kiírás igényli, de ez sem kibírhatatlan.
Esetleg megmutatnád a másoló makródat, hátha abból is lehet ötletet kapni.
Üdv.
Új hozzászólás Aktív témák
Hirdetés
- Yettel topik
- Újabb videón a Mafia: The Old Country
- Milyen belső merevlemezt vegyek?
- Asztalos klub
- Milyen okostelefont vegyek?
- Milyen egeret válasszak?
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Vicces képek
- Debrecen és környéke adok-veszek-beszélgetek
- További aktív témák...
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- iPhone 15 128GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3069, 93% Akkumulátor
- GYÖNYÖRŰ iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3136, 95% Akkumulátor
- Bomba ár! Dell Latitude E5530 - i5-3GEN I 4GB I 250GB I HDMI I 15,6" HD I Cam I W10 I Gari!
- REFURBISHED - HP USB-C Universal Dock G1 docking station (DisplayLink)
- Bomba ár! HP EliteBook Folio 1040 G1 - i5-G4 I 8GB I 256GB SSD I 14" HD+ I Cam I W10 I Garancia!
Állásajánlatok
Cég: FOTC
Város: Budapest