Avatar billede petert Forsker
21. november 2007 - 07:58 Der er 23 kommentarer og
1 løsning

Hjælp til ekstra funktion i makro

Hej jeg har tidligere fået hjælp til en makro der afstemmer en finans konto. Og den kører perfeckt.
Makroen gør bl.a det at den overstreger beløb der matcher hinanden i samme valuta i kolonne E.
Det jeg ønsker er at når alle beløb der matcher er gennem streget skal de ikke gennem streget beløb skifte farve så de er røde .(Det er kun beløb i Kolonne E det omhandler ).
Her er makroen.
Public Sub FiltreringAfPosteringer()

  ' Bemærk: Nedenstående er konstanter, og rutinen
  ' kræver derfor at data er placeret et konkret sted
  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  ' Slet tidligere overstregninger
  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.Strikethrough = False
 
  Dim I As Integer, j As Integer
  Dim DebetBeløb As Double, KreditBeløb As Double
 
  ' Løb beløbskolonnen igennem fra start til slut
  For I = StartRække + 1 To SlutRække
    ' Gem beløb
    DebetBeløb = Range(BeløbsKolonne & I).Value
    ' Hvis det er et debetbeløb
    If DebetBeløb > 0 Then
      ' Løb beløbskolonnen igennem en gang til og
      ' led efter kreditbeløb
      For j = StartRække + 1 To SlutRække
        KreditBeløb = Range(BeløbsKolonne & j).Value
        If KreditBeløb < 0 And _
Range("D" & I).Value = Range("D" & j).Value Then

          ' Hvis debetbeløb og kreditbeløb er ens (+/-)
          ' og kreditbeløbet ikke tidligere er overstreget
         
          If DebetBeløb = KreditBeløb * -1 And _
          Not Range(BeløbsKolonne & j).Font.Strikethrough Then
            ' Overstreg både debet- og kreditbeløb
            ' og hop ud af løkke
            Range(BeløbsKolonne & I).Font.Strikethrough = True
            Range(BeløbsKolonne & j).Font.Strikethrough = True
            Exit For
          End If
         
        End If
      Next
    End If
  Next

End Sub

Mvh
Petert
Avatar billede jlemming Nybegynder
21. november 2007 - 09:13 #1
Prøv dette

Public Sub FiltreringAfPosteringer()

  ' Bemærk: Nedenstående er konstanter, og rutinen
  ' kræver derfor at data er placeret et konkret sted
  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  ' Slet tidligere overstregninger
  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.Strikethrough = False

  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.ColorIndex = xlAutomatic

  Dim I As Integer, j As Integer
  Dim DebetBeløb As Double, KreditBeløb As Double
 
  ' Løb beløbskolonnen igennem fra start til slut
  For I = StartRække + 1 To SlutRække
    ' Gem beløb
    DebetBeløb = Range(BeløbsKolonne & I).Value
    ' Hvis det er et debetbeløb
    If DebetBeløb > 0 Then
      ' Løb beløbskolonnen igennem en gang til og
      ' led efter kreditbeløb
      For j = StartRække + 1 To SlutRække
        KreditBeløb = Range(BeløbsKolonne & j).Value
        If KreditBeløb < 0 And _
Range("D" & I).Value = Range("D" & j).Value Then

          ' Hvis debetbeløb og kreditbeløb er ens (+/-)
          ' og kreditbeløbet ikke tidligere er overstreget
         
          If DebetBeløb = KreditBeløb * -1 And _
          Not Range(BeløbsKolonne & j).Font.Strikethrough Then
            ' Overstreg både debet- og kreditbeløb
            ' og hop ud af løkke
            Range(BeløbsKolonne & I).Font.Strikethrough = True
            Range(BeløbsKolonne & j).Font.Strikethrough = True
            Exit For
          else
            Range(BeløbsKolonne & I).font.ColorIndex = 3
            Range(BeløbsKolonne & j).font.ColorIndex = 3
          end if

         
        End If
      Next
    End If
  Next

End Sub
Avatar billede petert Forsker
21. november 2007 - 09:46 #2
Den er ikke hel god den gør følgende.
Den laver alle røde i kolonne E (både beløb der er overstreget og beløb der ikke er overstreget røde. Mærkeligt gør den ikke E2,E7,og E9 ikke røde sevl om de er overstreget.
Mvh
petert
Avatar billede jlemming Nybegynder
21. november 2007 - 10:12 #3
Ok, prøv denne

ellers kan det være du skal sende mig et ark, jeg kan teste det på



Public Sub FiltreringAfPosteringer()

  ' Bemærk: Nedenstående er konstanter, og rutinen
  ' kræver derfor at data er placeret et konkret sted
  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  ' Slet tidligere overstregninger
  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.Strikethrough = False

  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.ColorIndex = xlAutomatic

  Dim I As Integer, j As Integer
  Dim DebetBeløb As Double, KreditBeløb As Double
 
  ' Løb beløbskolonnen igennem fra start til slut
  For I = StartRække + 1 To SlutRække
    ' Gem beløb
    DebetBeløb = Range(BeløbsKolonne & I).Value
    ' Hvis det er et debetbeløb
    If DebetBeløb > 0 Then
      ' Løb beløbskolonnen igennem en gang til og
      ' led efter kreditbeløb
      For j = StartRække + 1 To SlutRække
        KreditBeløb = Range(BeløbsKolonne & j).Value
        If KreditBeløb < 0 And _
Range("D" & I).Value = Range("D" & j).Value Then

          ' Hvis debetbeløb og kreditbeløb er ens (+/-)
          ' og kreditbeløbet ikke tidligere er overstreget
         
          If DebetBeløb = KreditBeløb * -1 And _
          Not Range(BeløbsKolonne & j).Font.Strikethrough Then
            ' Overstreg både debet- og kreditbeløb
            ' og hop ud af løkke
            Range(BeløbsKolonne & I).Font.Strikethrough = True
            Range(BeløbsKolonne & j).Font.Strikethrough = True
            Exit For
          End If
        End If
      Next
    End If
  Next
  For I = StartRække + 1 To SlutRække      ' sæt gul farve på dem der ikke er overstreget
    If Not Range(BeløbsKolonne & I).Font.Strikethrough Then
        Range(BeløbsKolonne & I).Font.ColorIndex = 3
    End If
  Next


End Sub
Avatar billede petert Forsker
21. november 2007 - 11:06 #4
Lige i Øjet.læg et svar. mange tak for hjælpen
Mvh
Petert
Avatar billede jlemming Nybegynder
21. november 2007 - 11:22 #5
Velbekomme, Det var ellers et dejtlig stykke du havde, med en god beskrivelse, Det glemmer vi andre tit.
Avatar billede petert Forsker
21. november 2007 - 11:39 #6
Jeg har et tillægs spørgsmål om du har et bud på følgende.
Kan man soterer rækkerne således at til slut kommer alle de rækker hvor der er rød i kolonne E til at stå øverst? Eller kan man køre en nu makro der gør dette?
Et andet problem er øverst i arket har jeg et område H-j 1-10 hvor der komme nogle saldi samt under dem har jeg nogle knapper. Hvis så der er mange rækker og jeg ruller ned ruller selfølgelig disse knapper og saldi op og uden for synsfeltet har du en ide til hvad man kan gøre for bedre funktionalitet. Det kræver selvfølgelig atjeg sender et ark og tilhørende fil jeg afstemmer. Vil du eller andre give et bud på dette. oplys om jeg skal åbne et nyt spørgsmål.
Mvh
Petert
Avatar billede jlemming Nybegynder
21. november 2007 - 12:19 #7
Indsæt dette i bunden af koden, Du må altid gerne give ekstra point :o)

Det eneste løsning jeg har på det sidste, er at oprette genvejstaster

tl = 0
For I = StartRække + 1 To SlutRække      ' hvis rød tekst flyt til top
    If Range(BeløbsKolonne & I).Font.ColorIndex = 3 Then
        Rows(I & ":" & I).Cut
        Rows(StartRække + tl & ":" & StartRække + tl).Insert Shift:=xlDown
        tl = tl + 1
    End If
  Next
Avatar billede petert Forsker
21. november 2007 - 12:29 #8
Jeg glemte en detalje. De kolonner der skal soteres i, er Rækkerne fra 2 og højere og kun i kolonne A til G (fordi jeg har saldi og knapper i H til J række 1 til 10 )
Hvad skal koden så være.
Mvh
Petert
Avatar billede jlemming Nybegynder
21. november 2007 - 12:45 #9
Ikke forstået, den sidste kode kigger på kolonne E, skal den kigge på flere kolonner?
Avatar billede petert Forsker
21. november 2007 - 12:50 #10
Kan jeg ikke sende arket og filen med posterne så kan du med det samme se hvad jeg mener.
Mvh
Petert
Avatar billede jlemming Nybegynder
21. november 2007 - 12:58 #11
jo jacob,lemming (a) honeywell,com
Avatar billede petert Forsker
21. november 2007 - 13:20 #12
jeg kan ikke få din e-mail til at virke jeg har brugt følgende inde i parentesen(jacob,lemming@honeywell.com)
/Petert
Avatar billede jlemming Nybegynder
21. november 2007 - 13:25 #13
, = .

(a) = @

Dette er for at undgå spammails
Så du  mangler et . imellem fornavn og efternavn :o)
Avatar billede petert Forsker
21. november 2007 - 19:07 #14
Hej jlemming jeg sender her også fordi jeg ger skulle have det sidste til at virke inden i morgen formidag

Tak for tilsendte. Det virker fint. ”du er en sand mester” Kan man også gøre det sådan, at den sortering du lavede, kan man også køre separat (som jeg tildeler en knap på lige fod med ”eks overstreg maskerede”. Fordi hvis jeg vælger kør makro (posterne afstemmes, markeres røde, og sorteres. Dette er OK) Derefter markerer jeg enkelte beløb, hvis der er tale om mindre afvigelser og slåfejl. Så ville det være godt at kunne sortere de tilbageværende der ikke er overstreget igen så de står øverst. Så kunne jeg ganske enkelt markere disse og printe en side ud til dokumentation til næste gang.

Jeg vedlægger den sidst reviderede makro.
Public Sub FiltreringAfPosteringer()

  ' Bemærk: Nedenstående er konstanter, og rutinen
  ' kræver derfor at data er placeret et konkret sted
  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  ' Slet tidligere overstregninger
  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.Strikethrough = False

  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.ColorIndex = xlAutomatic

  Dim I As Integer, j As Integer
  Dim DebetBeløb As Double, KreditBeløb As Double
 
  ' Løb beløbskolonnen igennem fra start til slut
  For I = StartRække + 1 To SlutRække
    ' Gem beløb
    DebetBeløb = Range(BeløbsKolonne & I).Value
    ' Hvis det er et debetbeløb
    If DebetBeløb > 0 Then
      ' Løb beløbskolonnen igennem en gang til og
      ' led efter kreditbeløb
      For j = StartRække + 1 To SlutRække
        KreditBeløb = Range(BeløbsKolonne & j).Value
        If KreditBeløb < 0 And _
Range("D" & I).Value = Range("D" & j).Value Then

          ' Hvis debetbeløb og kreditbeløb er ens (+/-)
          ' og kreditbeløbet ikke tidligere er overstreget
         
          If DebetBeløb = KreditBeløb * -1 And _
          Not Range(BeløbsKolonne & j).Font.Strikethrough Then
            ' Overstreg både debet- og kreditbeløb
            ' og hop ud af løkke
            Range(BeløbsKolonne & I).Font.Strikethrough = True
            Range(BeløbsKolonne & j).Font.Strikethrough = True
            Exit For
          End If
        End If
      Next
    End If
  Next
  For I = StartRække + 1 To SlutRække      ' sæt gul farve på dem der ikke er overstreget
    If Not Range(BeløbsKolonne & I).Font.Strikethrough Then
        Range(BeløbsKolonne & I).Font.ColorIndex = 3
    End If
  Next
  tl = 0
  For I = StartRække + 1 To SlutRække      ' hvis rød tekst flyt til top
    If Range(BeløbsKolonne & I).Font.ColorIndex = 3 Then
        Range("A" & I & ":G" & I).Cut
        Range("A" & StartRække + tl + 1).Insert Shift:=xlDown
        tl = tl + 1
    End If
  Next


End Sub

Mvh
Petert
Avatar billede jlemming Nybegynder
22. november 2007 - 08:44 #15
-Koden  til at sortere ligger i bunden :-)

Public Sub FiltreringAfPosteringer()

  ' Bemærk: Nedenstående er konstanter, og rutinen
  ' kræver derfor at data er placeret et konkret sted
  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  ' Slet tidligere overstregninger
  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.Strikethrough = False

  Range(BeløbsKolonne & StartRække). _
  CurrentRegion.Font.ColorIndex = xlAutomatic

  Dim I As Integer, j As Integer
  Dim DebetBeløb As Double, KreditBeløb As Double
 
  ' Løb beløbskolonnen igennem fra start til slut
  For I = StartRække + 1 To SlutRække
    ' Gem beløb
    DebetBeløb = Range(BeløbsKolonne & I).Value
    ' Hvis det er et debetbeløb
    If DebetBeløb > 0 Then
      ' Løb beløbskolonnen igennem en gang til og
      ' led efter kreditbeløb
      For j = StartRække + 1 To SlutRække
        KreditBeløb = Range(BeløbsKolonne & j).Value
        If KreditBeløb < 0 And _
Range("D" & I).Value = Range("D" & j).Value Then

          ' Hvis debetbeløb og kreditbeløb er ens (+/-)
          ' og kreditbeløbet ikke tidligere er overstreget
         
          If DebetBeløb = KreditBeløb * -1 And _
          Not Range(BeløbsKolonne & j).Font.Strikethrough Then
            ' Overstreg både debet- og kreditbeløb
            ' og hop ud af løkke
            Range(BeløbsKolonne & I).Font.Strikethrough = True
            Range(BeløbsKolonne & j).Font.Strikethrough = True
            Exit For
          End If
        End If
      Next
    End If
  Next
  For I = StartRække + 1 To SlutRække      ' sæt gul farve på dem der ikke er overstreget
    If Not Range(BeløbsKolonne & I).Font.Strikethrough Then
        Range(BeløbsKolonne & I).Font.ColorIndex = 3
    End If
  Next
  Call sortere
 
End Sub



Sub sortere()

  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  Application.ScreenUpdating = False
  tl = 0
  For I = StartRække + 2 To SlutRække      ' hvis rød tekst flyt til top
    If Range(BeløbsKolonne & I).Font.ColorIndex = 3 Then
        Range("A" & I & ":G" & I).Cut
        Range("A" & StartRække + tl + 1).Insert Shift:=xlDown
        tl = tl + 1
    End If
  Next
  Application.ScreenUpdating = True
           
End Sub
Avatar billede petert Forsker
22. november 2007 - 09:27 #16
Hej igen
jeg kan ikke få den sidste makro til at køre rigtigt.
Jeg har indsat i en ny makro

Sub sortere()

  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  Application.ScreenUpdating = False
  tl = 0
  For I = StartRække + 2 To SlutRække      ' hvis rød tekst flyt til top
    If Range(BeløbsKolonne & I).Font.ColorIndex = 3 Then
        Range("A" & I & ":G" & I).Cut
        Range("A" & StartRække + tl + 1).Insert Shift:=xlDown
        tl = tl + 1
    End If
  Next
  Application.ScreenUpdating = True
           
End Sub

men hvis jeg først kører afstemnings, sorterings makroen og jeg så manuelt overstreger eks 4 nye røde poster og så kører soter igen bliver disse 4 nye ikke flyttet ned således at det kun er ikke overstreget der står øverst. har du en ide til hvad der skal rettes i koden
/Petert
Avatar billede petert Forsker
22. november 2007 - 10:00 #17
Hej igen
Kan det være noget med der i koden står " hvis rød tekst flyt til top "
Når jeg overstreger manuelt forbliver teksten rød men overstreget. Kan det være fejlen?
/petert
Avatar billede petert Forsker
22. november 2007 - 10:05 #18
Jeg indsætter koderne for de 2 makroer der gør at jeg kan overstrege og ophæve en overstregning, hvis det giver nogen hjælp

Sub GennemstregMarkerede()
    Selection.Font.Strikethrough = True
End Sub

Sub FjernGennemstregMarkerede()
    Selection.Font.Strikethrough = False
End Sub

Petert
Avatar billede jlemming Nybegynder
22. november 2007 - 11:44 #19
Ja, du har ret den kigger kun på farven, jeg skal nok rette det, men har lidt travlt, så det bliver nok først iaften
Avatar billede petert Forsker
22. november 2007 - 19:02 #20
Hej jlemming igen
jeg har idag i mellemtiden prøvet og få løst det sidste omkring afstemningsarket, i spørgsmål 807025 men vi kan ikke få dette til at virke. Jeg tænkte hvis vi ændrede koden i overstregning så den også lavede farven blå og koden i ophævoverstregning så den ændrede farven til sort så vil din kode virke. og så vil jeg kunne se forskel på dem der overstregse automatisk og dem jeg selv overstreger.
Kan du få koderne til at virke??
/petert
Avatar billede jlemming Nybegynder
26. november 2007 - 09:29 #21
Så er jeg tilbage igen, prøv dem her

sættet blå og sort

Sub GennemstregMarkerede()
    Selection.Font.Strikethrough = True
    Selection.Font.ColorIndex = 5
End Sub

Sub FjernGennemstregMarkerede()
    Selection.Font.Strikethrough = False
    Selection.Font.ColorIndex = xlAutomatic
End Sub


Denne Kode flytter dem der ikke er overstreget til toppen
Sub sortere()

  Const BeløbsKolonne As String = "E"
  Const StartRække As Integer = 1
  Const Regneark As String = "Ark1"
 
  ' Find sidste række
  Sheets(Regneark).Select
  Dim SlutRække As Integer
  SlutRække = Range(BeløbsKolonne & StartRække) _
  .CurrentRegion.Rows.Count + StartRække - 1
 
  Application.ScreenUpdating = False
  tl = 0
  For I = StartRække + 2 To SlutRække      ' hvis ej overstreget tekst flyt til top
    If Range(BeløbsKolonne & I).Font.Strikethrough = False Then
        Range("A" & I & ":G" & I).Cut
        Range("A" & StartRække + tl + 1).Insert Shift:=xlDown
        tl = tl + 1
    End If
  Next
  Application.ScreenUpdating = True
           
End Sub
Avatar billede petert Forsker
26. november 2007 - 16:28 #22
Hej igen
Den sidder lige i øjet. læg et svar så vi kan lukke dette.
Tusind tak for hjælpen
/petert
Avatar billede jlemming Nybegynder
28. november 2007 - 14:36 #23
Velbekomme :o)

Dette spm er jo lukket, hvis du vil give flere point, er du nød til at oprette et nyt spm. med point til mig
Avatar billede petert Forsker
28. november 2007 - 18:10 #24
OK.
Mvh
Petert
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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