Keresés

Részletes keresés

Törölt nick Creative Commons License 2013.02.19 0 0 20471

Rendben.

Előzmény: Sánta Kutya (SK) (20470)
Sánta Kutya (SK) Creative Commons License 2013.02.19 0 0 20470

Hát már bocsánat, én sem vagyok nagy véleménnyel ennek a fórumnak a technikai színvonaláról, és 2000 óta nézem, ahogy egyre rosszabb és rosszabb verziókkal cserélik le, de kódokat inkább a pastebinbe írjál.

Előzmény: Törölt nick (20469)
Törölt nick Creative Commons License 2013.02.19 0 0 20469

Rémálom ez a fórum.

 

Nem lehet szerkeszteni.

Kilóg a sor vége az ablakból és nem lehet elolvasni, ha túl hosszú.

Nem lehet normálisan kódot bemásolni, mert ömlesztve értelmezi.

 

De legalább:

- egyszerű

- gyorsan betölt Magyarországon

- van

 

 

Ezt már egyszer kérdeztem, de nincs másik magyar exceles fórum?

Törölt nick Creative Commons License 2013.02.19 0 0 20468

Azért dobja a 'subscript out of range' hibaüzenetet, mert olyan munkalapra hivatkozik, aminek a neve egy üres string (szöveges változó), tehát egy üres cella tartalma a G oszlopban. Esetleg bele lehet tenni egy ha függvényt, hogy ne másoljon, ha a G oszlopban levő cella üres az adott sorban. Beleírtam a kódrészletbe.

 

Az nem teljesen tiszta nekem, hogy miért nem másol amikor üres a B oszlopban a cella, erre nem tudok mit mondani.

 

A G oszlop másolásához valóban a resize metódussal kell babrálni, ezt is beleírtam. Ha nem stimmel, szólj!

 

For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)

If Rng.Value <> "" Then _

Sheets(CStr(Rng.Value)).Range("B" & _

Rows.Count).End(xlUp).Offset(1, 0).Resize(, 6).Value = _

Rng.Offset(, -6).Resize(, 6).Value

Next Rng

 

Részletesen elmagyarázva:

- a For..Each ciklus végigmegy a "leltárlista" munkalap G oszlopán a negyedik sortól

az Lr-edik sorig.

- az Rng változó mindig az adott cellát jelenti (először G4, majd G5, stb.)

- If Rng.Value <> "" Then Ha a cella nem üres, akkor

- Sheets(CStr(Rng.Value)) a Rng cellában található érték nevével fémjelzett munkalap

(a CStr szöveges változót csinál belőle, hogy ne számként értelmezze)

- .Range("B" & Rows.Count).End(xlUp) B oszlop utolsó sorából indulva felfelé haladva

az első nem üres cella (pl. B3)

- .Offset(1,0) az eggyel alatta levő cella (pl. B4)

- .Resize(,6) a kijelölés átméretezése egy celláról hat cella szélesre jobbra(tehát pl. B4:G4)

- .Value és ennek az értéke

 

legyen egyenlő ezzel:

Rng.Offset(,-6).Resize(,6).Value magyarán a Rng cellától hattal balra levő cella

(a "leltárlista" munkalap G oszlopában van a Rng, mint emlékszünk, tehát pl. G4-ből lesz B4)

átméretezve jobbra hat cella széles területté (pl. B4:G4), és ennek az értéke.

 

Remélem segítettem.

Előzmény: Törölt nick (20467)
Törölt nick Creative Commons License 2013.02.19 0 0 20467

Azért dobja a 'subscript out of range' hibaüzenetet, mert olyan munkalapra hivatkozik, aminek a neve egy üres string (szöveges változó), tehát egy üres cella tartalma a G oszlopban. Esetleg bele lehet tenni egy ha függvényt, hogy ne másoljon, ha a G oszlopban levő cella üres az adott sorban. Beleírtam a kódrészletbe.

 

Az nem teljesen tiszta nekem, hogy miért nem másol amikor üres a B oszlopban a cella, erre nem tudok mit mondani.

 

A G oszlop másolásához valóban a resize metódussal kell babrálni, ezt is beleírtam. Ha nem stimmel, szólj!

 

For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)

If Rng.Value <> "" Then _

Sheets(CStr(Rng.Value)).Range("B" & _

Rows.Count).End(xlUp).Offset(1, 0).Resize(, 6).Value = _

Rng.Offset(, -6).Resize(, 6).Value

Next Rng

 

Részletesen elmagyarázva:

- a For..Each ciklus végigmegy a "leltárlista" munkalap G oszlopán a negyedik sortól az Lr-edik sorig.

- az Rng változó mindig az adott cellát jelenti (először G4, majd G5, stb.)

- If Rng.Value <> "" Then Ha a cella nem üres, akkor

- Sheets(CStr(Rng.Value)) a Rng cellában található érték nevével fémjelzett munkalap (a CStr szöveges változót csinál belőle, hogy ne számként értelmezze)

- .Range("B" & Rows.Count).End(xlUp) B oszlop utolsó sorából indulva felfelé haladva az első nem üres cella (pl. B3)

- .Offset(1,0) az eggyel alatta levő cella (pl. B4)

- .Resize(,6) a kijelölés átméretezése egy celláról hat cella szélesre jobbra(tehát pl. B4:G4)

- .Value és ennek az értéke

 

legyen egyenlő ezzel:

Rng.Offset(,-6).Resize(,6).Value magyarán a Rng cellától hattal balra levő cella (a "leltárlista" munkalap G oszlopában van a Rng, mint emlékszünk, tehát pl. G4-ből lesz B4)

átméretezve jobbra hat cella széles területté (pl. B4:G4), és ennek az értéke

 

Remélem segítettem.

Előzmény: KelemenGy (20464)
Sánta Kutya (SK) Creative Commons License 2013.02.19 0 0 20466

A replace kiiktatása nem is a sebesség miatt kell, csak a programozói egóm kívánja. :-)

Előzmény: Retro Image (20465)
Retro Image Creative Commons License 2013.02.19 0 0 20465

Ha az utolsó helyett a Z oszlopba teszed a képleteket, azzal szerintem semmit nem nyersz.

A képlet módositása úgy, hogy a Replace feleslegessé váljon, járható útnak tűnik. Ki kell próbálni, hogy működik-e. Azért én nem várnék tőle túl sokat. A Replace elég gyors dolog egy 60-80 soros táblázatnál.

A futtatás előtti aktiv cellát meg úgy őrzöd meg, hogy:

Dim Talon As Range

Set Talon = Activecell

 

aztán jön a program többi része

a végén pedig

Range("A1").Activate

helyett

Talon.Activate

kell.

 

A vessző és a pontosvessző körüli kavarodás pedig azért van, mert a VBA részt nem magyaritották az Excel többi összetevőjével. (Hála Istennek :o))

Előzmény: Sánta Kutya (SK) (20461)
KelemenGy Creative Commons License 2013.02.19 0 0 20464

Azt csinálja, amit szeretnék, de van egy érdekesség. Ennél a sornál Subscript out of range-dzsel kiszáll ha a G oszlopban üres cellába fut:

 

Sheets(CStr(Rng.Value)).Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Resize(, 5).Value = _
        Rng.Offset(, -5).Resize(, 5).Value

 

Másik furaság, hogy csak akkor másolja át a sorokat, ha a B oszlopban a cella nem üres. Ezeket egyszerű megoldani, nem hagyunk üres cellákat :)

 

Azt még megkérdezhetem, hogy mit kell átírjak ahhoz, hogy a G oszlop celláit is másolja? Gondolom valahol a resize-ok körül lesz a megoldás.

 

A helységlapoknak is van fejlécük, az adatos sorok ott is a 4. sorban kezdődnek, ezt írtam át, így jót töröl:

 

Sh.UsedRange.Offset(1, 0).ClearContents 'kitöröl az első soron kívül mindent

 

helyett


Sh.UsedRange.Offset(3, 1).ClearContents 'kitöröl az első három soron és az első oszlopon kívül mindent

 

Egyébiránt nagyon gyorsan lefut.

Törölt nick Creative Commons License 2013.02.19 0 0 20463

Ezer köszönet. Nagy segítség volt. Valóban.

 

Esetleg a csoport név is lekérdezhető?

Előzmény: Retro Image (20444)
lashodyes Creative Commons License 2013.02.19 0 0 20462

Sziasztok! Szeretnék egy pici segítséget kérni, excelben szeretnék vérnyomásnaplót vezetni. Ehhez találtam egy majdnem minden szempontból megfelelő template-et, amin egy dolgot szeretnék megváltoztatni: azt szeretném, hogy ne day 1, day 2 stb. legyen, hanem pl 2013.02.19, 18:00, és mindez a charton is így legyen, így változzon. Azért szeretném így, mert egy nap többször is mérek. Hogyan volna ez lehetséges? A template linkje: http://raywinstead.com/bp/BPMonthOnceADayFormExcel.xls

 

Nagyon fontos volna, hálás köszönet annak aki hajlandó volna segíteni.

Sánta Kutya (SK) Creative Commons License 2013.02.19 0 0 20461

Aha, köszi, tehát jól láttam, hogy valóban ír a táblázatba! Csak éppen az utolsó oszlopba. Na most ha megmondom, hogy az utolsó oszlop mondjuk a P, és még ha írnak is mellé, a Z oszlop már biztosan szabad, azzal lehet gyorsítani?

És hogy tudom az elején eltárolni a kurzor helyét, hogy ne A1-re álljon vissza?

Ha a SUM(G4,I4,K4,M4,O4) helyett IF(SUM(G4,I4,K4,M4,O4)=0,"",1)-et írnék, azzal megspórolnám a külön cserét, nem? Akkor felesleges lenne az
Rng.Replace what:="0", replacement:="", lookat:=xlWhole

Meg kell szokni, hogy itt vessző van a pontosvessző helyett, furcsa, és nem is értem, miért nem az van az Excelben is.

Előzmény: Retro Image (20459)
privateer Creative Commons License 2013.02.19 0 0 20460

Sziasztok!

Nem írtam még ide sosem.  

 

Feladat a következő. Van egy excel fájl, meg mondjuk 6 darab vegyes pdf. Ezeket akarom átnevezni.

 

Jelenleg a következőképp csinálom.
Van egy excel táblám, benne két makró.

Az egyik a mondjuk  ctrl+a-val a könyvtárban lévő pdf fájlok neveit listázza be.
A másik pl. ctrl+d-vel megnyitja a beállított pdf olvasót.

Utána én kitöltöm pl a dátumoszlopot, majd az irattípust automatikus kiegészítés segítségével gépelve kiválasztom.

Ha végeztem, a kívánt tartalmat copy paste módszerrel át viszem egy sima bat fájlba, ott a wordpad++ makrójával kiszedem a tabulátorokat. És az elkészült sima dosos rename bat fájlal átnevezem a pdf-eket.

Kérdésem a következő

1. Hogy lehetne megnyitni a pdf fájlokat, úgy, hogy ne nyisson meg újabb pdf ablakot. Azaz előzőleg megnyitott fájlt, ha van olyan zárja is be. Tudom, lehet hogy a viewer beállításán múlik. De gyanítom, hogy excelből vezérelhető.
2. Hogy lehetne az irattípust egyfajta legördülő listából kiválasztani. Jelenleg alt+le nyíllal választom ki, vagy beírom az első 1-2 betűt.
- Nem nem jött be az adatok - érvényesítés - beállítások fülön a Megengedve (lista), majd forrás megadása. + legördülő lista bepipálása.  - Ugyanis szeretném minimalizálni az egerezést, és itt hiába gépelek be bármit, nem működött.

3. Dupla egér kattra nem lehetne elindítani a makrót? Ne kelljen állandóan kombózni? Azaz adott cellára duplán kattintok, hívja be a pdf olvasót.
4. hogy tudnám kiírni egy bat fájlba az excel tartalmát (csak a kívánt területtel)? Megspórolhatnám a copy paste wordpad++ makrós pucolást. 

Excel tudom, hogy sosem fog fájlokat átnevezni, ezért kellene nekem egy külső bat fájlt kreálni és elindítani.
Ebből adódik az ötös kérdésem

5. hogy tudnám elindítani excelből az elkészült bat fájlt, hogy lefuthasson, átnevezve a pdf fájlokat?

Mellékeltem az eddig elkészült excel táblám.
http://data.hu/get/6226455/fileatnevezo.rar 

Megjegyzem, hogy a makrónak meg kell adni az pdf olvasó helyét, hogy megtudja nyitni!

Retro Image Creative Commons License 2013.02.19 0 0 20459

Itt van újra, kommentekkel.

 

Sub b()
   Dim EndCell As Range, Rng As Range, LastCol As Range

 

   Set LastCol = Cells(1, Columns.Count).EntireColumn

   'Megkeresi az utolsó oszlopot a munkalapon (remélve, de nem ellenőrizve, hogy az nincs használatban :o))

   'Ezt az oszlopot segédoszlopként használjuk a továbbiakban


   Set EndCell = Range("A:A").Find(what:="XXX", After:=Range("A4"), LookIn:=xlValues, lookat:=xlWhole)
   If EndCell Is Nothing Then Exit Sub

   'Megkeresi az első XXX tartalmú cellát az A oszlopban, A4 után. Eddig kell elrejteni a kritériumnak megfelelő sorokat.

   'Legyen ez pl. az $A$129 cella.

   Set Rng = Range("A4").Resize(EndCell.Row - 4)

   'Ez definiálja  a teljes tartományt, amelyre a vizsgálatot el kell végezni (az A4-től az XXX előtti celláig). Pl. $A$4:$A$128

   Set Rng = Intersect(Rng.EntireRow, LastCol)

   'Ez definiálja az előbb meghatározott teljes tartománynak megfelelő cellákat az utolsó oszlopban.

   'Pl. Excel 2003 esetében az itolsó oszlo az IV, tehát a tartomány: $IV$4:$IV$128

 

   Rng.Formula = "=IF(OR(A4=""Eladások"",B4=""ÖSSZESEN"",B4=""valami""),1,SUM(G4,I4,K4,M4,O4))"

   'Az utolsó oszlop előbb meghatározott celláiba beletesz egy képletet, amely az elrejtendő sorokra nulla eredményt ad

   'A nem elrejtendő sorokra nullánál nagyobb számot.

 

   Rng.Copy
   Rng.PasteSpecial xlPasteValues

   'A képleteket irányított beillesztéssel értékre módosítja

 

   Application.CutCopyMode = False

   'Ez a sor nem kell :o)

 

   Rng.Replace what:="0", replacement:="", lookat:=xlWhole

   'Az értékek közül a nullákat (ezek jelölik az elrejtendő sorokat) lecseréli üres sztringre.

 

   Rng.SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True

   'Az üres sztringet tartalmazó sorokat egy lépésben elrejti.

   'Itt kimaradt a hibakezelés. Ha nincs üres cella, akkor hibát dob a program.

 

   Rng.ClearContents

   'Törli a segédoszlop tartalmát

 

   Range("A1").Activate

   'Visszahozza a fókuszt az A1-re, mert valahol időközben elmászott a segédoszlopra.

 

End Sub

 

 

Előzmény: Sánta Kutya (SK) (20458)
Sánta Kutya (SK) Creative Commons License 2013.02.19 0 0 20458

Szia! Ez drasztikusan gyorsabb! Csak nem értem, hogy működik. A Rng.Formula= olyan benyomást kelt bennem, mintha teleírná a munkalapot... Mit csinál ez tulajdonképpen?

Előzmény: Retro Image (20427)
Törölt nick Creative Commons License 2013.02.19 0 0 20457

Ha nem a második sortól kezdődik az adatod a helységek munkalapjain, akkor megváltoztatom majd a kódot.

Előzmény: Törölt nick (20456)
Törölt nick Creative Commons License 2013.02.19 0 0 20456

A Sheets(Rng.Value) hivatkozás azért nem működött rendesen, mert indexként és nem a munkalap neveként értelmezte, elnézést. Így már jónak kéne lennie.

 

Változtattam némileg a kódon. Ezt a ThisWorkbook modulba kell bemásolni. Nem frissül automatikusan, amikor változtatsz egy cellát, az túl sok futtatást eredményezne szerintem.

Ehelyett minden alkalommal le fog futni, amikor elmented a munkalapot. Minden futás alkalmával az első sor kivételével kitöröl minden adatot a helységneveket tartalmazó munkalapokról, majd újra bemásol mindent. Elméletileg nem kéne, hogy sok időbe teljen, kíváncsi vagyok, mennyi idő alatt fut le neked.

 

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim Rng As Range
Dim Lr As Long ' utolsó sor
Dim Sh As Worksheet
Lr = Sheets("leltárlista").Range("G" & Rows.Count).End(xlUp).Row

For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "leltárlista" Then _
    Sh.UsedRange.Offset(1, 0).ClearContents 'kitöröl az első soron kívül mindent
Next Sh
For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)
    Sheets(CStr(Rng.Value)).Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Resize(, 5).Value = _
        Rng.Offset(, -5).Resize(, 5).Value
Next Rng

End Sub

Előzmény: KelemenGy (20454)
pigee Creative Commons License 2013.02.19 0 0 20455

Nem, 1.1 - 1.12 megy rendben, de pl. 2.1-re mar 1900.1.12 az eredmeny, stb.

Előzmény: tbando (20441)
KelemenGy Creative Commons License 2013.02.19 0 0 20454

Köszönöm! Minimális belepiszkálást igényelt a tesztkörnyezetbe betéve, egy munkalappal odébb tájolta magát, ezt ennek "Sheets(Rng.Value)" a módosításával megoldottam.

Viszont már látom mi lesz ezze a bajom. Ez valóban ahányszor lefut, annyiszor duplázza be a tételeket. Ez megint nem az, amit tőlem szeretnének. Eredetileg az volt a kérdés, hogy az megoldható-e, hogy a leltárlistán szereplő tételek sorában a helység számát változtatva automatikusan, mindenféle futtatás és piszkálás nélkül változzanak a mögöttes helységleltár lapok. Ezért is kell ez külön, mert négy helységnél még szűrök és nyomtatom a leszűrt listát, mint helységleltárt, de ebben feltöltés után lesz egy 300+ tételes anyaglista az első lapon és utána még vagy 20 lap.

A 20449-ben bemutatott rendszer ennek a célnak megfelel. Két problémám van vele: 1: iszonyú redundáns, ahány helység, annyiszor tartalmazza a teljes méretű táblázatot, 2: nem jó a folyószámozás, de ez a kisebbik gond, nyomtatás előtt rendbe lehet tenni.

Előzmény: Törölt nick (20453)
Törölt nick Creative Commons License 2013.02.19 0 0 20453

Én előre szóltam. :D Itt a makró. A leltárlista egyes sorait másolja a B-től F oszlopig (5 cella) a G oszlopban megadott munkalapra. Ahányszor futtatod, annyiszor másolja. Nem hibabiztos, szólj ha valami gond van vele. Javaslom, azért hagyd meg a leltárlistában az eredeti sorokat - annak ellenére is, hogy így kétszer tárolod ugyanazt az adatot.

 

Sub CopyRows()

Dim Rng As Range
Dim Lr As Long ' utolsó sor

Lr = Sheets("leltárlista").Range("G" & Rows.Count).End(xlUp).Row

For Each Rng In Sheets("leltárlista").Range("G4:G" & Lr)
    Sheets(Rng.Value).Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Resize(, 5).Value = _
        Rng.Offset(, -5).Resize(, 5).Value
Next Rng

End Sub

 

 

Előzmény: KelemenGy (20452)
KelemenGy Creative Commons License 2013.02.19 0 0 20452

Üdv! Ez is egy megoldás, nekem jó is lenne akár az autoszűrős, akár a jelenleg meglévő módszer, de a kérés felém úgy hangzott, hogy azt oldjam meg, amit lejjebb megfogalmaztam :)

A könyvcímet köszönöm!

Előzmény: Törölt nick (20450)
Törölt nick Creative Commons License 2013.02.19 0 0 20451

szednéd*

Előzmény: Törölt nick (20450)
Törölt nick Creative Commons License 2013.02.19 0 0 20450

Szia!

 

Meg lehet csinálni, de minek szednét szét több munkalapra az adatodat? Sokkal több előnye van, ha egyben van az egész. Könnyen tudsz rá szűrni, kimutatást, grafikont, pivottáblát csinálni. Ha csak egy helység adatait akarod látni, akkor egyszerűen szűrsz arra az oszlopra. Több munkalapon tárolni ugyanolyan felépítésű adatot eléggé előnytelen.

 

Én John Walkenbach egyik könyvéből tanulgattam a makrók alapjait: VBA programming for dummies a címe, ha jól emlékszem.

Előzmény: KelemenGy (20449)
KelemenGy Creative Commons License 2013.02.19 0 0 20449

Sziasztok!

 

Agyalok, hogy hogyan tudnám tökéletesíteni a leltáros táblámat.

 

A táblázat felépítése ugyanaz, mint eddig volt.

 

Sorszám / HETK (ez egy kódszám) / Megnevezés / Mennyiség / Mennyiségi egység / Azonosító / Helység szám

 

A valódi adatsor a 4. sorban kezdődik, addig fejléc van. Minden lap ugyanilyen felépítésű, lapokból most van öt (leltárlista, 1, 2, 3, 4). A helységszám a teszttáblán 1-4-ig terjed, az élesben ennél jóval több lesz, minden helységhez külön munkalappal. A cél az volna, hogy a sorszámozás maradjon meg minden lapon az eredeti állapotban, de az kezdő lapról (leltárlista) az egyes sorokból a B:F tartomány adatai kerüljenek át arra a munkalapra, amit a G oszlopban lévő egész megad.

 

Jelenleg van egy működőképes megoldás rá, de nem az igazi, ugyanis egy HA függvénnyel átvetettem a megfelelő lapokra az adatokat, de ez szaggatott sorszámozást eredményez az 1-4-ig számozott munkalapokon. Azt szeretném elérni, hogy egyrészt értsem, hogy a makró melyik sora mit művel, másrészt meglegyen az eredeti cél is, azaz a leltárlistáról vegye át a megfelelő értékeket úgy, hogy a sorszámozás minden további munkalapon 1-nél kezdődjön és folyamatos legyen, ha lehet, mindezt automatikusan.

 

Jelenleg ezt a HA függvényt használom:

 

=HA(leltárlista!$G4=26;HA(leltárlista!B4="";"";leltárlista!B4);"")


(azért egymásbaágyazott, hogy ha a leltárlistán egy adott cella üres, akkor a függvény ne 0, hanem üres értékkel térjen vissza)

 

Illetve ezt a makrót:

 

Sub Auto_Open()
With Application
    .ScreenUpdating = False
End With
    Dim sor%, sorok%, lap%
    
    For lap% = 2 To Worksheets.Count
        Sheets(lap%).Select
        sorok% = Cells.SpecialCells(xlLastCell).Row
        
        'Felfedjük mindegyiket
        Rows("1:" & sorok%).Hidden = False
        
        '4. sortól rejtünk csak ha 2. oszlop értéke hamis
        For sor% = sorok% To 4 Step -1
            If Cells(sor%, 3).Value = "" Then _
               Rows(sor%).Hidden = True
        Next
    Next
With Application
    .ScreenUpdating = True
End With
End Sub

 

Elképzelhető, hogy sikerül ezt a makrót úgy átírni, hogy megoldja a feladatot? Hangsúlyozom, érteni is szeretném, így ha elmondja valaki, hogy mit írja át benne, az is tuti lenne (már ha nem 0-ról kell újraírni, annyira nem értek sajna hozzá). Van egyébként valakinek jó tippje, hogy honnan lehetne normális tananyagot szerezni ehhez?

Sánta Kutya (SK) Creative Commons License 2013.02.19 0 0 20448

Pont elkaptam még a lap alján. Cenkinek cemmi ötlete? Nem tapasztaltatok hasonlót? Lehet, hogy a légnyomáskülönbség?

 

Megosztott munkafüzet, user elrejti a sorokat, elmenti, egy emelettel feljebb megnyitva a rejtett sorok felfedv jelennek meg. Hogy lehet? Excel 2007.

Előzmény: Sánta Kutya (SK) (20398)
Retro Image Creative Commons License 2013.02.19 0 0 20447

"Valóban azzal a sorral van a bibi valószínűleg, csak azt nem tudom, hogy micsoda!"

 

De hát mondom: nincs olyan munkafüzet, amire a program hivatkozik. Létre kell hozni előbb, és csak azután hivatkozni rá.

Ha mondjuk van egy sablon munkafüzeted, akkor mondd neki, hogy SaveAs, pl. így:

 

Workbooks("sablon.xls").SaveAs Filename:="C:\mappa\útvonal többi része\KIR" & Format(Date, "éééé.hh.nn") & ".xls"

 

aztán már tudsz rá hivatkozni.

 

Egyébként a programodban a Range hivatkozások egyike sincs adekvát módon definiálva, ezért csak szerencsés együttállások esetén fog működni. Arra számítani, hogy hogy az adott munkafüzetben mindig pontosan a szükséges munkalap legyen aktív, nagy bátorságra vall. :o)

Szerintem ezeket ki kellene javítani, ahhoz viszont a feladat megfogalmazása továbbra is elégtelen.

Előzmény: szláj70 (20446)
szláj70 Creative Commons License 2013.02.18 0 0 20446

Igen, hasonló, de ahová bemásolnám, annak a munkafüzetnek változó a neve, mindíg a "KIR" + az aktuális dátum. A munkalap neve mindíg ugyanaz, innen is indítanám a makrót.

Azt, hogy egy adott és ÁLLANDÓ nevű munkafüzetbe másolja, nincs gond, csak nem tudom, milyen módon tudnám úgy összefűzni a munkafüzet nevét, a "KIR" szóval és az aktuális dátummal, hogy azt értelmezze a makró.

Valóban azzal a sorral van a bibi valószínűleg, csak azt nem tudom, hogy micsoda!

 

Előzmény: Retro Image (20445)
Retro Image Creative Commons License 2013.02.18 0 0 20445

A kérdésfeltevés szerintem nem igazán jó.

Valahogy így kellene megfogalmazni:

  • Van egy X nevű munkafüzet, annak Y nevű munkalapja, ahonnan szeretném kimásolni a

             -   B3:L48 fix tartományt

             -   A B:L oszlopokban, a 3. sortól kezdődő, összefüggő tartományt

             -   valami más módon definiált tartományt,

  • és szeretném beilleszteni az A nevű munkafüzet B munkalapjára, az így és így definiált cellától kezdődően (itt is többféle definíció lehetséges, nem sorolom fel újra)
  • a kód pedig

             -   az X munkafüzetben

             -   az A munkafüzetben

             -   egy harmadik munkafüzetben (név szerint:...) legyen elhelyezve.

 

Erre már lehetne egy jól működő kódot írni, mert maga a feladat nem nehéz.

 

Ami a konkrét hibaüzenetet illeti, erős a gyanúm, hogy az alábbi sor a ludas (egyébként a hibaüzenettel párhuzamosan azt is érdemes megemlíteni, hogy hol akad ki a program):

Windows("KIR " & j5 & ".xlsm").Activate

Mégpedig az lehet a gond, hogy nem létezik ilyen munkafüzet, amikor a sor végrehajtódik. Valami sablon munkafüzettel dolgozol, amit előzőleg el kellene a KIR+dátum más néven.

Esetleg a kiterjesztésekkel lehet gond, hogy xls vagy xlsm.

Ennyiből nem lehet kideríteni.

Előzmény: szláj70 (20442)
Retro Image Creative Commons License 2013.02.18 0 0 20444

Delila tudja :o)

 

(Na jó, elárulom: lásd 19877)

Előzmény: Törölt nick (20443)
Törölt nick Creative Commons License 2013.02.18 0 0 20443

Kérdésem volna.

Van egy megosztott file amibe két helyről léphetnek be a dolgozók és kétféle lehetőségük van a filebe írni, azaz két oszlopba csoportba írhatnak de úgy, hogy mondjuk az egyik az A-C másik társaság a D-F oszlopba. Hogyan tudom megkülönböztetni őket illetve az ehhez szükséges paraméterek hogyan kérdezem le?

Előre is köszönöm.

szláj70 Creative Commons License 2013.02.18 0 0 20442

Kedves Segítők!

Köszönöm az eddigi segítséget, amivel rávezetődtem dolgokra. Most ismét megakadtam:

Szeretném, ha egy cellába megjelenne az adott munkafüzet neve. Ez eddig nem nagy probléma, bár csak a teljes útvonalas függvény akar működni, de nem nagy baj, megoldható másképpen is, de...

Szeretném elérni, hogy egy másik munkafüzetből, (Napi kocsikiadás KIVONAT.xls”) EBBE, a naponta (a dátummal változó) változó nevű („KIR ”+dátum elnevezésű) munkafüzetbe másoljon át adatokat.

Próbáltam így:

Sub Makró5()

'

' Makró5 Kocsikiadás bemásolás

'

 

'

    Windows("Napi kocsikiadás KIVONAT.xls").Activate

    Range("B3:L48").Select

    Selection.Copy

    Windows("KIR " & j5 & ".xlsm").Activate

    ActiveWindow.SmallScroll Down:=-3

    Range("C10:M55").Select

    ActiveWindow.SmallScroll Down:=-39

    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _

        xlNone, SkipBlanks:=False, Transpose:=False

    ActiveWindow.SmallScroll Down:=-3

    Range("A16").Select

End Sub

 

Nem sikerült, majd írtatok másikat Nekem, amibe behelyettesítettem a nevet (tán nem jól?) és így sem jó.

Sub Kocsikiadas()

    Windows("Napi kocsikiadás KIVONAT.xls").Activate

    Range("B3:L48").Copy

    Windows("KIR " & j5 & ".xlsm").Activate

    Range("B" & Cells(Rows.Count, "A").End(xlUp).Row + 4).Select

    Selection.PasteSpecial Paste:=xlPasteValues

    Selection.PasteSpecial Paste:=xlFormats

    Range("A16").Select

    Application.CutCopyMode = False

End Sub

Mi lehet a baj? „subscript out of range” hibával megáll.

Köszi.

 

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!