2417
megoldást keresek erre a problémára
  • Storey
    #2174
    Sziasztok!

    Excel makróval való mentési problémám lenne!
    Szeretném új, .XLS formátumban elmenteni egy Excel munkafüzet egy konkrét lapját, abba a mappába, ahonann az alap munkafüzet megnyitásra került, úgy hogy a lapon szereplő értékek értékbeillesztéssel kerüljenek át az új lapra.
    Szerény tudásom alapján az alábbi makrót alkottam, de sajnos nem működik. Generálja az új lapot, de aztán hibával leáll!

    Sub exportxls()

    Set WST = Sheets("A lap neve")

    WST.Select
    WST.Copy
    WST.SaveAs ActiveWorkbook.Path & "/NET_" & Format(WST.Range, "0000") & ".xls"

    WST.Select
    WST.Name = "Az új név"
    Range("A1:J112").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Range("A1").Select
    ActiveWorkbook.Save
    ActiveWorkbook.Close
    Workbooks(neve).Activate
    End Sub

    Előre is köszi a segítséget!
  • Delila1
    #2173
    Szívesen.
  • lalakov
    #2172
    Köszönöm.
  • Delila1
    #2171
    Kiteheted az ikonját a Gyorselérési eszköztárra.

    Gyorselérési jobb szélén a legördülőből kiválasztod a További parancsokat. A Választható parancsoknál a Minden parancsot hívd be. A megjelenő listában keresd meg a Feltételes formázást, és a Felvétel gombbal másold át a jobb oldali listába. Ott a fe-le gombokkal meghatározhatod a helyét a többi ikon között.

    Így mindig kéznél lesz, bármelyik menü látszik éppen a menüszalagon.
  • lalakov
    #2170
    Van esetleg valami gyorsgomb kombináció a feltételes formázás szabálykezelő behívására?
  • GImre70
    #2169
    Sziasztok.
    Lenne egy kérésem. A feltételes formázásnál pontosan mit jelent a "Leállítás, ha igaz" opció. És ezt mikor kell bejelölni, mert működik mindenkét esetben ha jelölve van, vagy nincs. SetFirstPriority és ez az tulajdonság?
    Előre is köszönöm.
  • GImre70
    #2168
    Köszönöm. Időközben sikerült a beszerzés.
  • donci5
    #2167
    Egyáltalán nem haragszom. Ha az eredetin azt érted, hogy vásároltam-e, nos nem, de aktiválva van, és kifogástalanul működik.Már nem tudom honnan, de némi turkálással nem gond beszerezni.
  • GImre70
    #2166
    Szia Ne haragudj, hogy zavarlak, de azt szeretném kérdezni, hogy az OFFICE 2016 eredeti változat, vagy nem és honnan?
    [email protected]. Előre is köszönöm. Imre
  • GImre70
    #2165
    Sziasztok.
    Előszöris Boldog Új Évet 2016-ra.
    Hogy kell összeállítani a SUMIF() -függvényt? Erre gondoltam "=SUMIF(R[-" & változo & C:R[-1]C, "feltétel")" Nekem ez valahogy nem áll össze. Előre is köszönöm. Imre
  • donci5
    #2164
    Szevasztok
    Office 2016-t használok, és régebbi táblázatoknál IV az utolsó oszlop, amit használni, formázni tudok. A megnyitott új táblázatoknál nincs ilyen probléma. Van-e erre valami megoldás?
    A válaszokat köszönöm
    dönci5
  • Delila1
    #2163
    Ahhoz, hogy egy lapra lépéskor helyesen: Ahhoz, hogy MINDEN lapra lépéskor...
  • Delila1
    #2162
    Ahhoz, hogy egy lapra lépéskor elvégződjön valamilyen művelet, a ThisWorkbook laphoz kell rendelned egy eseményvezérelt makrót, a Workbook_SheetActivate-t.

    Például ha a lapra lépéskor a B oszlop értékéből ki akarod vonni az A oszlop értékét a második sortól kezdve, akkor a makró

    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim usor As Long

    usor = Range("A" & Rows.Count).End(xlUp).Row
    Range("C2:C" & usor) = "=B2-A2"
    End Sub

    Mint látod, a lapra lépéskor meghatározzuk az aktuális lap A oszlopának utolsó kitöltött celláját (usor), és a képletet a második sortól az utolsóig íratjuk be.

    A füzetben lévő nagyon sok képlet lassíthatja a feldolgozást, ezért a képlet beírása után a helyükre beilleszthetjük az értéküket.

    Range("C2:C" & usor).Copy
    Range("C2").PasteSpecial xlPasteValues
    Application.CutCopyMode = False 'másolási mód megszüntetése
    Range("A1").Select 'az A1 cellára lépünk. Nem fontos, de megszűnik a C2:C(usor) kijelölése.

  • GImre70
    #2161
    Köszönöm ki fogom ezt próbálni. Viszont a korábbi makróval kapcsolatban nem jutok dűlőre. Annyit már elértem, hogy a két cella tartalmát szöveg típusú változóba teszem. Akkor nem nagyon kapok típus hibát. Viszont ha a munkafüzet sheetchange eseménynél okoz problémát de a munkalap change nincs probléma de akkor állandóan másolni kell az eseményt ha új táblázatot csinálok
  • Delila1
    #2160
    A Columns.Count a lapon (füzetben) lévő oszlopok száma, a Rows.Count pedig a soroké. 2007-es verziótól kezdve ezek az értékek 1024-szeresükre nőttek az előző verziókhoz képest.



    1 oszlop=cells(1,"F").end(xltoleft).column
    2 oszlop=cells(4,"A").end(xltoright).column
    3 oszlop=cells(1,columns.count).end(xltoleft).column
    4 oszlop=cells(4,"D").end(xltoright).column
    5 sor=cells(4,"D").end(xldown).row
    6 sor=cells(9,"D").end(xldown).row
    7 sor=cells(1,"H").end(xldown).row
    8 sor=cells(rows.count,"H").end(xlup).row


    Állíts össze a kép szerinti kis táblákat – akár többet –, valamelyikben állva nyomj Ctrl+nyilat (fel, le, jobbra, balra). A hatásukból azonnal megérted a választ.

    Az If-es kérdésedhez: a 2. a jó. Akkor hajtódik végre az If és End If közötti utasítás, ha az E14 cellába vittél be adatot a billentyűzetről. 1 cella helyett tartományt is megadhatsz.
    if Not Intersect(Target, Range("E14:H20")) Is Nothing then
  • GImre70
    #2159
    Sziasztok.
    Azt szeretném kérdezni, hogy ez az utasítás mit csinál?
    if Intersect(Target, Range("G2:G103")) then és ez? if Not Intersect(Target, Range("E14")) Is Nothing then

    És még egy utolsó kérdés ha nem gond van ez : range(cellaId).end(irány) honnan lehet tudni, mikor melyik irányt (xlDown, xlUp,xlLeft, xlRight) kell használni?
    Előre is köszönöm. Imre
  • moncsa001
    #2158
    Sziasztok!

    Legyetek szívesek segítsetek, kiapadt a tudományom. Az alábbi a téma. Adott egy táblázat dolgozók adataival. A oszlop munkába állás időpontja, B oszlop Felmondás időpontja. A kérdés, hogy hányan dolgoztak 2013.01.01 és 2013.12.31-ke között. Illetve 2013.01.01-én és 2013.12.31én. Irányított szűrővel próbálkoztam, de nem tudom egyszerre úgy, hogy mindegyik feltételnek megfeleljen. Hogyan tudnám ezt legegyszerűbben megoldani? Köszönöm előre is.
  • tigerbácsi
    #2157
    köszönöm. :-(
  • GImre70
    #2156
    Szia Delila. Hát én feladom a makró készítést. Bármit csinálok a makróm nem nagyon akar működni. Például beírtam az application.enableevents = false értéket a végére pedig az ellenkezőjét és akkor már a WorkBook_NewSheet() esemény az egyik fejléc helyett egy nullát (0) írt a cellába. a Legfontosabbat még nem is mondtam, hogy bármire deklarálom nem hajlandó kiszámolni az értéket.
  • Delila1
    #2155
    Nem lehet.
    A területét állíthatod a Height és a Width tulajdonságoknál, de ez csak a Caption-be beírható cím hosszúságát változtatja.
  • tigerbácsi
    #2154
    Halihó!

    Újra itt! :-)

    a kérdésem az volna, hogy a CheckBox jelölőnégyzetének méretét meg lehet változtatni? mondjuk duplájára?

    Köszi előre is! :-)
  • GImre70
    #2153
    Köszönöm. megpróbálom így deklarálni.
  • Delila1
    #2152
    kezd = 6:00 (date tip.)
    vegez = 17:00 (date tip.)
    ledolgozott idő = Format(vegez - kezd, "hh:mm")
  • GImre70
    #2151
    Én ilyen pontosan nem szoktam beírni. Én csak annyit írok be, hogy például kezd= 6:00 vegez=17:00 és a percek = Minute(vegez) és innen számolom ki a ledolgozott időt ilyenkor adja a 13 hiba kódot.
    Az napi időpontnál nem is működnek?
  • Delila1
    #2150
    Változó típusok:
    Date (dátum és idő), mérete 8 byte, lebegőpontos, aminek az egész része a dátum, a tört része az idő.
    Byte (bináris), mérete 1 byte, 0-255 közötti egész szám.

    Dim kezd As Date, vegez As Date

    kezd = Cells(2, 1)
    vegez = Cells(2, 2)
    Cells(2, 5) = Format(vegez - kezd, "hh:mm")

    Ez akkor is működik, ha a kezd egyik napi-, a vegez másik napi időpont.
    kezd=2015.11.18 22:00:00
    vegez=2015.11.19 6:00:00

    Utoljára szerkesztette: Delila1, 2015.11.19. 09:35:30
  • GImre70
    #2149
    Bocsánat. De előtte kipróbáltam és továbbra is type mishmatch üzenetet ad. Most azt nem tudom, hogy egy cella milyen tipusú ha csak azt írod be hogy: 17:00 mert ha számként formázom, akkor double a tipusa, de ha idő formátumot adok akkor date tipusú. Most melyik jobb? Mert akkor a 2142-s kérdésemre konvertálnom kell a változókat.
    Dim kezdes as Double
    Dim vege as Double
    Dim perce as Byte, mivel a perc egész szám és kisebb 256-nál. Minute(vege)=1 -59 közötti érték.
    De ha
    Dim kezdes, vege as date
    Dim perce as Byte is jó?

  • Delila1
    #2148
    Mindegyiket makrókban alkalmazzuk.
    Az EnableEvents (esemény engedélyezése) letiltását jellemzően az eseményvezérelt makrókban alkalmazzuk. Pl. a Change eseményben megadod, hogy egy cellába kerüljön egy új adat. Ezt a beírást észreveszi a makró, és újból lefut. Érdemes a makró elején letiltani, majd a végén True-ra állítani.
    Könnyen ellenőrizheted a dupla futást, ha a makró elejére beteszel egy stopot, és lépésenként futtatod.

    A ScreenUpdating a képernyőfrissítés. Mikor egy hosszú listán végzel műveletet, a tiltása nélkül a képernyő minden művelet után frissül, ami megnöveli a futási időt. Ezt is vissza kell állítani a makró végén.

    Nem reagáltál a 2146-os válaszomra.
  • GImre70
    #2147
    Sziasztok. Azt szeretném kérdezni, hogy mit állítunk be az EnableEvents, és a ScreenUpdating tulajdonságokkal? És mikor, hol kell őket használni. Nagyon köszönöm.
  • Delila1
    #2146
    A SelectChange akkor indul, mikor egy cellára rákattintasz, a Change pedig akkor, mikor a billentyűzetről megváltoztatod egy cella értékét.
    Érdemes kivenni a Select-et a címsorból. Ha a makrót minden lapon akarod alkalmazni, akkor a ThisWorkbook laphoz rendeld.

    A makró elején a helyedben meghatároznám, melyik oszlopba íráskor végezze el a feladatot. Ha jól látom, a D oszlopba írod be az utolsó adatot. A Dim utasítások után betennék egy feltételt:
    If Target.column=4 Then
    'utasítások
    End If

    Cella módosításakor indul a makró. Azonnal megnézi a bevitel helyét, és ha ez nem a 4. oszlop, az End If utasításra ugrik, nem számolgat.
  • GImre70
    #2145
    Ez a hiba mindig a Workbook_SheetChange() eljárásnál jelentkezik. Ha a Worksheet_Change() használom akkor nincs semmilyen hiba jelzés. Csak itt mindig másolni kell az aktuális munkalap-hoz.
  • Delila1
    #2144
    A sárga soron az egérmutatóval állj a Target.Row fölé. Nem kell kijelölni. Megjelenik az aktuális sor száma.
    Lépj át a füzetedbe, és nézd meg, hogy abban a sorban a C oszlop értéke dátum (idő) típusú-e. Valószínű, hogy nem, vagy esetleg üres a kérdéses cella.
  • GImre70
    #2143
    Legtöbbször ezek változok okoznak hibát.
    kezdese = Cells(Target.Row, 3)
    veges = Cells(Target.Row, 4)
    perce = Minute(vege)

    A "kezdese" és a "veges" változok dátum tipusúak. De a"perce " változót nem tudom, hogy mire dimenzionáljam.
  • GImre70
    #2142
    Legtöbbször ezek a változok.
  • Atika :o)
    #2141
    koszi
  • Delila1
    #2140
    "A Rows.Count adja a lapok max. darabszámát" kimaradt egy lényeges szó, helyesen "A Rows.Count adja a lapok max. sorának darabszámát"
    Utoljára szerkesztette: Delila1, 2015.11.06. 07:51:15
  • Delila1
    #2139
    Kicsúsztam az időből.

    usor = Range("E" & Rows.Count).End(xlUp).Row
    A Rows.Count adja a lapok max. darabszámát, ami a régebbi verziókban 65.536 volt, az újabbakban 1.048.576.
    Állj az E oszlop legalsó sorára, majd nyomj Ctrl+fel nyilat. Az E oszlop alsó, valamilyen adatot tartalmazó cellája lesz aktív. Ezt a műveletet tartalmazza a Range("E" & Rows.Count).End(xlUp) utasítás. A végén a .Row az aktívvá lett cella sorának a számát adja vissza, ezt tesszük az usor változóba.

    Az első üres sor az oszlopban
    üres=Range("E" & Rows.Count).End(xlUp).Row+1
  • Delila1
    #2138
    Jó a Private Sub Workbook_SheetChange esemény, amit a ThisWorkbook laphoz kell rendelned. Akkor minden munkalapodon fog működni.
    Melyik változónál akad ki típus eltérés hibával?
  • GImre70
    #2137
    Szia. Beírtam ezeket az utasításokat de valahogy nekem továbbra sem akar tökéletesen működni. Nem az a probléma, hogy én a Workbook_Sheetchange() esemlnyt használom a WorkSheets_change() esemény helyett? csak ezzel az a probléma, hogy minden egyes új munka lapnál Ctrl +c , Ctrl+v utasítást kell használni. Így viszont nem kéne mindig másolni, beilleszteni. Sőt van olyan is hogy nem számolja ki a ledolgozott időt. És el tudod mondni hogy ez az utasítás mit csinál pontosan? Range("E" & Rows.Count).End(xlUp).Row Nagyon köszönöm.
  • Delila1
    #2136
    Feltételes formázást alkalmazz. Mivel ez csak 1 lapon belül működik, az első lapon vegyél fel egy segédoszlopot, nálam ez a B.
    A két lap egymás mellett látszik a képen, a státuszsor a Munka1 lap B2 cellájának a képletét mutatja.
    A feltételes formázáshoz jelöld ki a Munka1 lap A2:A... valahány tartományát, majd a formázáshoz add meg a =$B2>0 képletet.



    Szerk.
    Sajnos a kép nem olvasható. A Munka1!B2 képlete: =DARABTELI(Munka2!A:A;A2), ezt másold le a többi adat mellé.
    Utoljára szerkesztette: Delila1, 2015.11.03. 10:43:47
  • Atika :o)
    #2135
    Hello azt hogy tudom megcsinalni, hogy egy excelen belul van ket lapom es szeretnem ha a masodik lapon talalhato lista alapjan az elsoben kijelolje azokat a sorokat ahol eggyezik a termek kodja? Koszi elore is.