Avatar billede kiilerrich Nybegynder
01. september 2009 - 13:53 Der er 10 kommentarer og
1 løsning

Knap til at afspille VBA kode

Jeg har denne VBA kode:

Const startRæk = 3
Const slutRæk = 500
Private Sub worksheet_activate()
Rem Når arket "Liste" aktiveres - udføres testen
Dim række As Integer, ræk As String
    Application.ScreenUpdating = False
   
    For række = startRæk To slutRæk
        ræk = række
        If Range("B" & ræk) = 0 Then
            ActiveSheet.Rows(række).Hidden = True
        Else
            ActiveSheet.Rows(række).Hidden = False
        End If
    Next række
   
    Application.ScreenUpdating = True
End Sub

Jeg vil gerne have denne kode ind i en knap hvor man aktivere den når man selv har lyst ti det. Lige nu er den tildele et ark, hvor den starter når man aktivere arket.

PS: Er der nogen der kan omskrive min VBA kode så den ikke sletter tomme linjer, men kun dem der står 0(nul) i...?
Avatar billede Slettet bruger
01. september 2009 - 20:06 #1
Indsæt nedenstående kode i et almindeligt modulark.
Koden virker på en vilkårlig kolonne. Hvis du for eksempel har dine data i kolonne B aktiverer du bare en celle et eller andet sted i kolonne B der indeholder et nul. Kør makroen og alle rækker med 0 i kolonne B vil blive sletttet. (marker en celle med "1", hvis du ønsker at slette alle rækker, hvor kolonne B indeholder "1", osv.). Jeg går ud fra du er bekendt med at knytte en makro til en knap - ellers kom igen.


Sub DeleteIf()
    On Error Resume Next
    x = ActiveCell.Value
    Set region = ActiveCell.CurrentRegion
    Set col = ActiveCell.EntireColumn
    Set checkrange = Intersect(region, col)
   
    For Each cell In checkrange
        If cell.Value = x Then
            If n = 0 Then
                Set delrange = cell.EntireRow
                n = 1
            Else
                Set delrange = Union(delrange, cell.EntireRow)
            End If
        End If
    Next
    delrange.Delete
End Sub

Hilsen
Hans
Avatar billede kiilerrich Nybegynder
02. september 2009 - 09:36 #2
dkhanknu

Den virker ikke som jeg gerne vil have den til...

Den du har sendt sletter kun den aktive linje også selvom der er andet tal end 0. fx. 1.236,35 sletter den også. og det skal den ikke.

Den VBA kode jeg har i forvejen virker som den skal, vil bare gerne have den tilføjet en knsp. Men når jeg sætter den ind i en knap, melder den fejl.
Avatar billede Slettet bruger
02. september 2009 - 10:34 #3
Ved mig gør den makro jeg sendte det du skriver, at du gerne vil have gjort. Din makro sletter ikke, men skjuler rækker med nul eller blanke fra B3 og nedefter. Hvis du er interesseret i en projektmappe med makroen (+ knap), så fortæl mig hvor jeg skal sende det til.
Hans
Avatar billede kiilerrich Nybegynder
02. september 2009 - 12:16 #4
dkhanknu

Sådan ligger landet.

Jeg har et ark ved navn balance hvor jeg taster regnskabstal ind i. Disse tal overføres til et andet ark ved navn rapport. Når disse tal er overført, er der nogle regnskabsposter som udgør saldo 0. Disse vil jeg gerne have en knap til fjerne på hele arket på en gang (sidder og sletter dem enkeltvis lige nu)hvilke den macro du har sendt også gør.

Ville gerne spare tiden på at slette/skjule dem enkeltvis.

Har det problem med den VBA jeg har, at den også sletter de tomme mellemrums rækker og dem vil jeg ikke have slettet. samt at når jeg aktivere det ark hvor VBA'en er på, så køre VBA'en med det samme og det ville jeg gerne selv styre ved at aktivere/deaktivere VBA'en ved hjælp af en knap.

Ved ikke om dette giver mere mening vedr. mit spørgsmål.
Avatar billede kiilerrich Nybegynder
02. september 2009 - 12:18 #5
Håber det giver mening
Avatar billede Slettet bruger
02. september 2009 - 13:41 #6
Denne her skjuler, og hvis jeg forstår dig ret er det også det, du ønsker.

Sub Hiderows()
Dim lr As Long, i As Long
Application.ScreenUpdating = False
With ActiveSheet
lr = Cells(Rows.Count, 2).End(xlUp).Row
For i = 3 To lr
If Not IsEmpty(Cells(i, 2)) And Cells(i, 2) = 0 Then
Cells(i, 1).EntireRow.Hidden = True
End If
Next
End With
Application.ScreenUpdating = True
End Sub


Vigtigt - koden skal indsættes i et almindeligt modul!

Gå tilbage til Excel. Hvis du har en ældre version end 2007 så tryk på Format, Forms. Find det der hedder Button. Tryk den ind. Tegn op på regnearket (så lille elller så stor du ønsker knappen skal være). Når du slipper så dukker Assign Macro dialogboksen op. Tryk på HideRows og tryk på OK. Nu kan du afvikle makroen ved at trykke på knappen. Jeg går ud fra du selv kan oversætte ovennævnte begreber (button mv.), hvis du har dansk Excel.
Avatar billede kiilerrich Nybegynder
22. september 2009 - 11:34 #7
Hej dkhanknu.

Kan sku ikke få det til at virke som jeg gerne vil... Men læg et svar så kan du få point for forsøget...

Vil starte et indlæg istedet for...
Avatar billede Slettet bruger
22. september 2009 - 11:57 #8
I stedet for point ville jeg egentlig hellere have haft en forståelse af, hvordan du ikke kan få det til at virke, men OK.
Hans
Avatar billede kiilerrich Nybegynder
22. september 2009 - 12:11 #9
Jamen det er at når jeg insætter den kode du har skrevet, så virker det kun på en linje af gangen.

Det jeg har er en excelfil hvor jeg hvor jeg skriver nogle balance tal ind i et ark. Disse tal bliver så overført til en balance. Da det sjældent at alle poster i balancen bliver brugt, vil der være nogle linjer tilbage med saldo 0. Det er disse linjer jeg gerne vil have skjult på en gang.

Hvorfor jeg gerne vil have dette VBA på en knap, er grunden at jeg gerne vil kunne slå det til og fra igen. Dette er mere for at kunne tjekke om alt er med, da excel også tager tal fra skjulte celler med i den samlet beregning.

Ved ikke om dettte giver nogen mening for dig, men måske du har en udvej til dette.
Avatar billede Slettet bruger
22. september 2009 - 14:06 #10
Undskyld - koden duede ikke. Hvad med følgende:?

Sub Hiderows()
Dim lr As Long, i As Long
Application.ScreenUpdating = False
    With ActiveSheet
        lr = Cells(Rows.Count, 2).End(xlUp).Row
        For i = 3 To lr
            If Cells(i, 2) = 0 Then
                Cells(i, 1).EntireRow.Hidden = True
            End If
        Next
    End With 
    With ActiveSheet
        lr = Cells(Rows.Count, 2).End(xlUp).Row
        For i = 3 To lr
            If IsEmpty(Cells(i, 2)) Then
                Cells(i, 1).EntireRow.Hidden = False
            End If
        Next
End With
Application.ScreenUpdating = True
End Sub

Hans
Avatar billede Slettet bruger
23. september 2009 - 06:18 #11
Hvis du stadigvæk ikke kan få det til at virke er du velkommen til at sende en kopi af filen til mig, så kigger jeg på det. Adresse under profil.
Hans
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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