Zapolnjevanje vsebine preko celega zvezka

Pomoč pri izdelavi makrov
Odgovori
GoldZ
Prispevkov: 137
Pridružen: Če Sep 01, 2005 10:20 am

Zapolnjevanje vsebine preko celega zvezka

Odgovor Napisal/-a GoldZ »

Pozdravljeni!

Uporabniške želje so precej nenavadne... Namreč, na CELOTNEM listu v prazne celice napisati 0 :?:. Rešitev je precej preprosta, a je seveda izvajanje kode strahovito počasno... :evil:

Koda: Izberi vse

Sub ZapolniPrazneCelice()


Dim EnaCelica As Range

Cells.Select
    'Napišimo zanko:
    For Each EnaCelica In Selection
    
        If EnaCelica.Value = "" Then
        EnaCelica.Value = 0
        End If
        
    Next
End Sub
Kakšen nasvet/namig kako kodo pohitriti? Oz. kakšno zanko uporabiti, da se hitreje sprehodi po listu skoz??
Življenje je enostavno, če poznaš "The Secret".
GoldZ
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

ti "uporabniki" pa zeres ne poznajo Excela. Moje mnenje je, da bi jim ga vseeno morali razložiti oz. da bi jim morali razložiti nemumnost njihovega početja. Pravzaprav, bi vam morali povedati, zakaj to potrebujejo; vi pa bi jim razložili zakaj ne potrebujejo :).

No ampak naloga je pa zanimiva. Vaša koda je nasploh počasna, ker delate s Selection, zato tega niti nisem poskušal. Sem pa poskušal sledeče

Koda: Izberi vse

    Dim v, k
    For v = 1 To 65536
        For k = 1 To 256
            Cells(v, k) = 0
        Next
    Next
In ta koda (bi) se na mojem računalniku izvajala cca. 20 minut (to sem izračunal iz rezultata izvajanja nad prvih 2000 vrstic)

Če to samo malce popravite, da Excel vmes ne počne drugih stvari

Koda: Izberi vse

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With
    
    Dim v, k
    For v = 1 To 65536
        For k = 1 To 256
            Cells(v, k) = 0
        Next
    Next

    With Application
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
Ta koda se na mojem računalniku izvaja 4 minute ==> tako 5xPOHITRITEV!

Potem pa grem še korak dalje :)

Koda: Izberi vse

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With
    
    Dim vrstica(1 To 256)
    Dim k
    
    For k = 1 To 256
        vrstica(k) = 12
    Next
    
    For k = 1 To 65536
        Rows(k) = vrstica
    Next

    With Application
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With
Ta koda se na mojem računalniku izvaja 40 sekund ==> tako 36xPOHITRITEV!

To je to 8) .
lp,
Matjaž Prtenjak
Administrator
GoldZ
Prispevkov: 137
Pridružen: Če Sep 01, 2005 10:20 am

Odgovor Napisal/-a GoldZ »

:)
Hvala za rešitev! Problem je bil predvsem, da naj napolni v vse celice, ki so prazne - torej naj pusti vpisane vrednosti na listu take kot so...

A bomo kombinirali. Če želi zapolniti list, ki ima podatke, sem v makro namesto označitve celega lista dal

Koda: Izberi vse

ActiveSheet.UsedRange.Select
če pa želi imeti celi list, pa naj si pomaga z vašim...

P.S. Dobra ideja... prepričati uporabnika, da to ne rabi :lol:
P.S.2: Kaj pa bomo delali, ko bo v Office 12 več kot 1M vrstic
:)
Življenje je enostavno, če poznaš "The Secret".
GoldZ
Odgovori