Avatar billede kov Nybegynder
16. august 2001 - 14:12 Der er 24 kommentarer og
1 løsning

Fjerne tomme celler fra udskrift

Jeg er stødt ind i et mindre problem: Jeg har et Excel regneark der indeholder en del formler. En del af disse formler bliver i praksis sjældent regnet ud. Et eksempel er =HVIS(A2;A3+1;\"\") det ses at jeg tester på A2 og indsætter en værdi hvis A2 er sand. Hvis dette ikke er tilfældet bliver der indsat et blanktegn. Problemet er at blanktegnet medfører at sider hvor de indgår udskrives hvilket ikke er nødventigt hvis de er det eneste på siden.

Jeg vil gerne undgå at skulle justere sidesperatorene manuelt hvorfor det ikke er en løsning.

Jeg ved at man kan skjule NUL-værdier men det løser ikke problemet.

På forhånd tak
KOV
Avatar billede janvogt Praktikant
16. august 2001 - 14:31 #1
Du kan måske lave et filter og sortere de blanke celler fra inden du udskriver?
16. august 2001 - 14:46 #2
Nu ved jeg jo ikke helt, hvordan dit ark er opbygget, men jeg kigger gerne på det fd@win-consult.com

En løsning kunne være filter og sorter som janvogt foreslår, hvis det kan lade sig gøre, men hvis ikke så skal der måske makro til, som skjuler/viser linier alt efter om der er værdi\'er i cellerne - altså forskellig fra \"\". Hvis der skal en makro til, så vil det kræve, at jeg ser arket.
Avatar billede kov Nybegynder
16. august 2001 - 14:57 #3
>> Alle, Jeg har arbejdet lidt med filter og tror desværre ikke det er vejen at gå. Problemet er at jeg gerne vil have måske 5-10 sider der er forberedt til at modtage data, dvs. at div formler og (betingende)formateringer er indsat. Hvis man f.eks. kun indtaster data på side 1 vil man således have et antal tomme sider. Jeg vil gerne undgå at disse bliver udskrevet, men jeg vil omvendt gerne have at de er synlige og klar til at modtage data.

>> flemmingdahl, jeg har skrevet en makro der indsætter formlerne efterhånden. Problemet er, at jeg gerne vil gøre det dynamisk hvilket betyder at det bliver tungt at arbejde med.

Jeg havde håbet at der fandtes er særligt tegn man kunne bruge i stedet for blanktegn således at sider der alene indeholdt disse ikke blev sideopdelt og medtaget i udskreften som standard.
Avatar billede janvogt Praktikant
16. august 2001 - 15:02 #4
Et sådan \"Excel-tegn\" findes vist ikke ..... :-(

Men man kunne vel få en makro til at skjule rækker med nulceller og så tælle sig frem inden den indsætter sideskift.
16. august 2001 - 15:23 #5
Denne makro laver skjulningsnummeret.

Sub SkjulBlankeRækker()
Dim rCell As Range
    \'Angiv først venstre kolonne der skal checkes samt rækkerne
    For Each rCell In Range(\"A1:A1000\")
        \'Checker om der er tal i 6 kolonner - tilføj evt. flere
        If rCell.Value = \"\" And rCell.Offset(0, 1).Value = \"\" And rCell.Offset(0, 2).Value = \"\" _
        And rCell.Offset(0, 3).Value = \"\" And rCell.Offset(0, 4).Value = \"\" _
        And rCell.Offset(0, 5).Value = \"\" And rCell.Offset(0, 6).Value = \"\" Then
            \'Der var ingen tal i rækken - Skjul
            rCell.EntireRow.Hidden = True
        Else
            \'Der var tal i rækken - Vis (også hvis den var skjult før)
            rCell.EntireRow.Hidden = False
        End If
    Next
End Sub

Flemming
16. august 2001 - 15:24 #6
Den lille

_

skal være med i slutingen af rækken ovenover!!
Avatar billede kov Nybegynder
16. august 2001 - 15:31 #7
>> Janvogt, Du har ret i det kan lade sig gøre. Problemet er at når jeg har skjult rækkerne med nulceller kan de ikke bruges mere dvs. at løsningen ikke er god til dokumenter der ofte redigeres.

Man kunne selvfølgelig indsætte en \"udskriftsknap\". På den måde ville man kunne arbejde med dokumentet og når man var klar til at udskrive kunne en makro skjule nulrækkerne, udføre udskriften og vise rækkerne igen så man er klar til at arbejde videre...... Hmmm det var måske egentligt ikke så tosset....

Under alle omstændigheder så vil jeg helst have en formatering, typografi eller et formel-nul-resultat der medføre at en formel ikke medfører sideskift og udskrift før formelen viser noget fornuftigt.

V.H
KOV
Avatar billede kov Nybegynder
16. august 2001 - 15:35 #8
>> Flemmingdhal, jeg havde skrevet svaret til janvogt inden jeg så dit indlæg -sorry.

Som jeg skriver, kan jeg godt se muligheder i den løsning du præsenterer -jeg tror jeg arbejder lidt videre med det.

Tak for indlæget
KOV
Avatar billede kov Nybegynder
17. august 2001 - 09:58 #9
>> Flemmingdahl, Jeg har bygget en makro der kan løse mit problem ud fra dit eksempel. Der er dog en lille detajle: Den køre ufatteligt langsomt. Jeg sysntes gernerelt at VB scripts har en ret dårlig afviklingshastighed -er der noget jeg har glemt f.eks. at disable screen-update eller noget??

Da det oprindelige spørgsmål ikke er fuldt besvaret lader jeg spørgsmålet stå åbent et par dage endnu -det kan være at nogen har en god ide...

Tak for hjælpen
KOV
17. august 2001 - 10:16 #10
Hvad mangler for fuld løsning af dit spørgsmål ?

Hvis du kopier din makro herind, så kan jeg måske se, hvorfor det kører langsomt, og komme med et par tips/ændringsforslag til hastighedsforøgelse.
17. august 2001 - 10:18 #11
Det er måske udskriftsproblematikken ?!

Hvis ikke du har indsat sideskift, og lader Excel styre det, så skulle det give sig selv, når nul-linier skjules!
Avatar billede kov Nybegynder
17. august 2001 - 10:39 #12
>>Flemmingdahl, OK mit problem er løst, men jeg ville nu gerne høre om et tegn eller en formatiering der har samme effekt som at skjule rækkerne...

Mit script ser således ud:

Sub SkjulBlankeRækker()
    Dim rCell As Excel.Range
    For Each rCell In Worksheets(\"Partlist\").Range(\"A1:A500\")
        If rCell.Value = \"\" And IsEmpty(rCell.Offset(0, 1)) And IsEmpty(rCell.Offset(0, 2)) _
        And IsEmpty(rCell.Offset(0, 3)) And IsEmpty(rCell.Offset(0, 4)) And IsEmpty(rCell.Offset(0, 5)) _
        And IsEmpty(rCell.Offset(0, 6)) And IsEmpty(rCell.Offset(0, 7)) And IsEmpty(rCell.Offset(0, 8)) Then
            rCell.EntireRow.Hidden = True
        Else
            rCell.EntireRow.Hidden = False
        End If
    Next
End Sub

Som du kan se er det en let modificeret version af dit eksempel. Det skal siges at scriptet ligger i kodemodulet for et andet ark end det der arbejdes på og at scriptet kaldes med tryk på en knap (tekstbox)

KOV
17. august 2001 - 10:45 #13
Jeg kender ingen tegn/formatering, som kan skjule det faktum, at der står en formel i en celle - eller det faktum at udskriften tager enten det angivne udskriftsområde eller alle celle med indhold
Avatar billede kov Nybegynder
17. august 2001 - 10:58 #14
>> Flemmingdahl, Nej det kan åbentbart ikke lade sig gøre. Det er sådan set også ligemeget, det havde bare været enklere (og bedre) end at kode sig ud af det...

Jeg har lukket spørgsmålet og tildelt dig pointene men jeg vil stadig gerne høre din vurdering vedr. hastigheden af scriptet.

KOV
17. august 2001 - 11:20 #15
Der er ikke så voldsomt meget at gøre hastighedsmæssigt. Jeg bruger normalt ikke IsEmpty funktionen, men hvis makro\'en virker, så må IsEmpty jo validere på værdien i cellen og ikke på formler.
Hvordan du starter makro\'en samt placering i workbook\'en har ingen betydning for hastigheden.
17. august 2001 - 11:25 #16
Makro\'en er opbygget på Range, hvilket er hurtigere end select. Det hurtigste er funktion CELLS, og den kunne nok omlægges til cells!
Avatar billede kov Nybegynder
17. august 2001 - 11:30 #17
Ja..Joo.. Men er der noget videre at hente ??

Jeg kunne måske snarre mistænke IsEmpty for at sløve tingende ned.

Alt er jo selvfølgelig relativt, men jeg mener at 60 sec for at løbe 500 celler igennem på en 1GHz maskiner er lidt rigeligt..
17. august 2001 - 11:34 #18
Prøv om disse to forbedre - ændre måske IsEmpty til .Value = \"\"
De er IKKE testet.

Sub SkjulBlankeRækker()
    Dim rCell As Excel.Range
    For Each rCell In Worksheets(\"Partlist\").Range(\"A1:A500\")
        If Cells(rCell.Row, rCell.Column).Value = \"\" _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 1)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 2)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 3)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 4)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 5)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 6)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 7)) _
        And IsEmpty(Cells(rCell.Row, rCell.Column + 8)) Then
            Cells(rCell.Row, rCell.Column).EntireRow.Hidden = True
        Else
            Cells(rCell.Row, rCell.Column).EntireRow.Hidden = False
        End If
    Next
End Sub

Sub SkjulBlankeRækker()
    Dim iX As Integer          \'Rækker
    Dim iC As Integer: iC = 1  \'1 = kolonne A
    For iX = 1 To 500          \'Række 1-500
        If Cells(iX, iC).Value = \"\" _
        And IsEmpty(Cells(iX, iC + 1)) _
        And IsEmpty(Cells(iX, iC + 2)) _
        And IsEmpty(Cells(iX, iC + 3)) _
        And IsEmpty(Cells(iX, iC + 4)) _
        And IsEmpty(Cells(iX, iC + 5)) _
        And IsEmpty(Cells(iX, iC + 6)) _
        And IsEmpty(Cells(iX, iC + 7)) _
        And IsEmpty(Cells(iX, iC + 8)) Then
            Cells(iX, iC).EntireRow.Hidden = True
        Else
            Cells(iX, iC).EntireRow.Hidden = False
        End If
    Next iX
End Sub
17. august 2001 - 11:35 #19
60 sec. om at løbe 500*9 = 4500 celler
Men lang tid alligevel.
Avatar billede janvogt Praktikant
18. august 2001 - 23:02 #20
>>> kov

Jeg blev lidt nysgerrig og jeg tror faktisk jeg har fundet \"det manglende Excel-tegn\".
Nu er spørgsmålet jo afsluttet, og dit problem forhåbentlig løst, men er du alligevel interesseret så send lige en mail.
19. august 2001 - 18:40 #21
Du kan jo skrive det her jan !
Avatar billede janvogt Praktikant
19. august 2001 - 18:50 #22
Som jeg skriver er spørgsmålet jo besvaret og afsluttet, så jeg fortæller bare, at der faktisk er en alternativ løsning ...., selvom alle incl. mig selv først afviste det.
Så skulle det have interesse for nogen kan man jo stille et nyt spørgsmål!
19. august 2001 - 19:05 #23
Hmmmmmmm...........!
Avatar billede kov Nybegynder
20. august 2001 - 09:50 #24
>> Flemmingdahl, Vi er vist endt i den evige diskusion: Hvornår skal et spørgsmål afsluttes ? -Når spørgeren har fået løst sit problem eller når det oprindelige spørgsmål er besvaret. Guderne skal vide at det ikke altid er det samme....

>> Janvogt, hvis du har fundet en løsning ville det vel ikke være urimeligt at skrive det her hvor det hører til. Selvfølgelig skal seriøst arbejde og brugt tid belønnes, det er jo netop derfor jeg absolut mener at Flemmingdahl har fortjent de 30 point. Ud fra samme argument har jeg oprettet et nyt spørgsmål således at du for mulighed for at vise din løsning og hente pointene.

Vi ses i et nyt spørgsmål

V.H KOV
Avatar billede janvogt Praktikant
20. august 2001 - 11:05 #25
Udmærket, \"I\'ll be back\"!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester