Keresés

Részletes keresés

Sánta Kutya (SK) Creative Commons License 2013.02.15 0 0 20426

Tetszetős, köszönöm!

Előzmény: SQLkerdes (20425)
SQLkerdes Creative Commons License 2013.02.15 0 0 20425

Nézd meg még ezt a cikket, elég jónak tűnik:  http://www.excelitems.com/2010/12/optimize-vba-code-for-faster-macros.html

Előzmény: Sánta Kutya (SK) (20410)
Törölt nick Creative Commons License 2013.02.15 0 0 20424

Az nem feltétlenül. Pár példa ilyen "eseményre":

- megváltozik a cellakijelölés

- megváltoztatod egy cella tartalmát

- megnyitod a munkafüzetet,

- bezárod

- elmented

- duplakattintás

- kattintás jobb egérgombbal

- stb.

 

Meg tudod nézni ezeket, ha bemész a munkalap vagy a munkafüzet kódablakába és a lenyíló menüt böngészed. Ld. kép.

Előzmény: Sánta Kutya (SK) (20419)
SQLkerdes Creative Commons License 2013.02.15 0 0 20423

Hát akkor nem tudom.  Lehet, hogy sok oszlopd meg sorod van, azért lassú.

Előzmény: Sánta Kutya (SK) (20414)
Tie Creative Commons License 2013.02.15 0 0 20422

Ez egy ilyen szakma. :)

Ment mail.

Előzmény: Delila10 (20421)
Delila10 Creative Commons License 2013.02.15 0 0 20421

Jó lenne, ha megadnád a címedet, mert lesznek itt bajok.

Csak belekukkantottam, és már 2 lapot is találtam, ahol nem azonos sorban kezdődnek az adatok, mint a többi lapon.

 

Van lapod bőségesen!

Előzmény: Tie (20420)
Tie Creative Commons License 2013.02.15 0 0 20420

Áttoltam toldacuccottal.

Előzmény: Delila10 (20415)
Sánta Kutya (SK) Creative Commons License 2013.02.15 0 0 20419

Köszi! Ezek szerint a gombnyomásra induló makró kötelezően az Excel Objectsbe kerül.

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

Excel Objects-ben van a munkalapoknak meg a munkafüzetnek a kódablaka. Ide lehet úgynevezett "event macro"-kat is írni, ami akkor fut le, ha az adott munkalapon vagy munkafüzetben valamilyen "esemény" történik. A modulokba ilyet nem lehet. Ha nem event macro, akkor viszont érdemes modulba rakni, mert akkor lehet tudni, hogy ott van a script.

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

Izé, mi a különbség a makróablakban az Excel Objects és a Modules között? Rémlik, hogy volt egyszer fogalmam róla...

Delila10 Creative Commons License 2013.02.15 0 0 20416

Ennek örülök, szívesen.

Előzmény: KelemenGy (20408)
Delila10 Creative Commons License 2013.02.15 0 0 20415

Az a makró nem követhetett el ilyen gyalázatot.

Küldd el a füzetet!

Előzmény: Tie (20413)
Sánta Kutya (SK) Creative Commons License 2013.02.15 0 0 20414

Elvileg csak számtani függvények vannnak, a szumha a legbonyolultabb, és egyáltalán nem gyorsít (sőt, még picit lassabbnak is tűnt). Köszi a tippet!

 

Előzmény: SQLkerdes (20412)
Tie Creative Commons License 2013.02.15 0 0 20413

De azt nem én másoltam oda, az akkor került oda, amikor lefuttattam a makrót, azt a makró pakolta oda. Mint ahogy a makró törölte üresre az 11-es sor fölötti dolgokat is.

Előzmény: Delila10 (20402)
SQLkerdes Creative Commons License 2013.02.15 0 0 20412

Én a screenupdate-mellé még beraknék egy Application.Calculation = xlCalculationManual-t és a kód végén állítanám vissza automatikusra.

 

Nekem volt, hogy már csodát tett.  Bár a makród nem ad semmi input-ot a munkalapnak, de a .hide a volatilis függvényeket (ha vannak ilyenek a munkalapon) újraszámoltatja, ami akár durván is lelassíthatja a futást.

 

Próbáld ki, bajod nem lehet belőle.

Előzmény: Sánta Kutya (SK) (20410)
pirxike Creative Commons License 2013.02.15 0 0 20411

Sziasztok. 

 

Szükségem lenne egy olyan makróra, amely excel-ben egy munkalapon megkeresi az összes 0-át, ( de csak azokat a cellákat, amik semmi más számot, csa 1 db nullát tartalmaznak) és kitörli, majd a munkalapot csv formátumba elmenti, de úgy, hogy az első oszlopot kihagyja belőle. 

 

Ha vki tudna egy ilyet írni nekem, azért nagyon hálás lennék.

Sánta Kutya (SK) Creative Commons License 2013.02.15 0 0 20410

Nem baj, hozzáadtam egy szöveges feltételt.Köszi!

 

Most így néz ki:

    Application.ScreenUpdating = False
    i = 4
    Do While Cells(i, 1) <> "XXX"
        If Cells(i, 1) <> "Eladások" And Cells(i, 2) <> "ÖSSZESEN" And Cells(i, 2) <> "valami" Then
            s = 0
            For j = 7 To 15 Step 2
                Rem On Error Resume Next
                If IsNumeric(Cells(i, j)) Then
                    s = s + Cells(i, j).Value
                End If
            Next j
            If s = 0 Then
                Rows(i).Hidden = True
            End If
        End If
        i = i + 1
    Loop
    Application.ScreenUpdating = True

Működik, de kegyetlen lassú. Meg lehet ezt gyorsítani valahogy?

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

Majdnem jó, csak úgy látszik, a dátumos sort is eltünteti. Pedig szerintem nem nulla dátumok vannak benne...

Előzmény: Delila10 (20406)
KelemenGy Creative Commons License 2013.02.15 0 0 20408

Örök hálám! Így már teljesen azt teszi, amit szeretnék.

Előzmény: Delila10 (20405)
Delila10 Creative Commons License 2013.02.15 0 0 20407

A végéről lehagytam egy zárójelet. :(

Előzmény: Delila10 (20405)
Delila10 Creative Commons License 2013.02.15 0 0 20406

if isnumeric(cells(i,j) then  ez csak a "számos" celláknál csinálja azt, amit mondasz neki.

Előzmény: Sánta Kutya (SK) (20403)
Delila10 Creative Commons License 2013.02.15 0 0 20405

Próbáld így:

 

Sub Auto_Open()
    Dim sor%, sorok%, lap%
    
    For lap% = 1 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%, 2).Value = "" Then _
               Rows(sor%).Hidden = True
        Next
    Next
End Sub



Előzmény: KelemenGy (20399)
Sánta Kutya (SK) Creative Commons License 2013.02.15 0 0 20404

Mégsem úsztam meg, került az összegzés elé egy On Error Resume Next, most ronda és lassú, de működik.

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

De jó, hogy itt vagy, egy gyors kérdés, hátha megúszom a guglizást:

 

        For j = 7 To 15 Step 2
            s = s + Cells(i, j).Value
        Next j

Ezt kéne átírni, hogy a szöveges cellákat ne vegye figyelembe, mert leáll típushibával.

Az egyik sorban sajnos van pár egyesített cella is az útjában, remélem, kibírja.

Előzmény: Delila10 (20402)
Delila10 Creative Commons License 2013.02.15 0 0 20402

Az A4:E9 tartományt átmásoltad a H14:K19 tartományba, ezzel ott is lett egy egyesített rész, a H14:H17. Az egyesített cellákba nem tudja a makró beilleszteni az egyes lapokról érkező adatokat.

Előzmény: Tie (20401)
Tie Creative Commons License 2013.02.15 0 0 20401

Na de az az összevont mező miért okoz gondot?

Egyrészt az A11-től főfelé van, tehát nem kéne vele foglalkoznia, másrészt meg nincs az A mezőjében 'A' érték, tehát megint csak nem kéne vele foglalkoznia.

Előzmény: Delila10 (20394)
KelemenGy Creative Commons License 2013.02.15 0 0 20400

Még szebb lenne, ha meg lehetne adni, hogy mely lapokon fusson le.

Előzmény: KelemenGy (20399)
KelemenGy Creative Commons License 2013.02.15 0 0 20399

Küzdök a szeren... :)

 

Elvileg ennek a fájl megnyitására automatikusan le kellene futni. Most azokat a sorokat rejti, amit szeretnék, de el kellene érni, hogy ne csak az aktív lapon dolgozzon, hanem minden lapon.

 

Sub Auto_Open()
Dim sor%, sorok%
    sorok% = ActiveSheet.UsedRange.Rows.Count
    For sor% = 1 To sorok% 'Felfedjük mindegyiket
        Rows(sor%).Hidden = False
    Next
    For sor% = 4 To sorok% '4. sortól rejtünk csak ha 2. oszlop értéke hamis
        If Cells(sor%, 2).Value = "" Then _
           Rows(sor%).Hidden = True
    Next
End Sub

Sánta Kutya (SK) Creative Commons License 2013.02.15 0 0 20398

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

KelemenGy Creative Commons License 2013.02.15 0 0 20397

Lemaradt: a 20383-ra válaszoltam az imént.

Előzmény: KelemenGy (20396)

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