Avatar billede petert Forsker
30. januar 2007 - 17:29 Der er 9 kommentarer og
1 løsning

Hjælp til makro

Jeg har fået rigtig god hjælp af kabbak til denne makro bl.a i spørgsmål spm/758060  men der et problem der driller.
Jeg har to makroer først en der henter en fil og derefter en der finder ens tal et + og et i - og derefter oversterger disse så kun de tal der ikke passer sammen står åbne. Der sker bare det at så snart jeg henter filen ind med tal overstreger den de tal der passer sammen med det samme og ikke først når jeg kører makroen med afstemninger. Er der en måde man evt.kan gøre så man ophæver over stergningerne ??? jeg vedlægger først makro "hendt data" og derefter makro "afstemning"
Public Sub HenttxtData()
    Dim strline() As Variant, X As Long, Str As String, fileToOpen As String
    Dim RES() As Variant, I As Long, A As Variant, P As Long
    fileToOpen = "C:\Data\konti\konto 90020.txt" ' ret her hvis det er en anden fil
'    fileToOpen = "C:\test\konto 90020.txt"
    If Dir(fileToOpen) <> "" Then
        Open fileToOpen For Input As #1
        Line Input #1, Str
        Line Input #1, Str
        Line Input #1, Str
        Line Input #1, Str
        X = 0
       
        Do
            Line Input #1, Str
            If Str = "" Then
         
                Exit Do
            End If
            ReDim Preserve strline(X)
            A = Split(Str, vbTab)
            strline(X) = A(0)
            strline(X) = strline(X) & ";" & A(1)
            strline(X) = strline(X) & ";" & A(6)
            strline(X) = strline(X) & ";" & A(7)
            strline(X) = strline(X) & ";" & A(8)
            strline(X) = strline(X) & ";" & A(9)
            strline(X) = strline(X) & ";" & A(10)
            X = X + 1
        Loop Until EOF(1)
        Close #1
       
        P = X - 1
        ReDim RES(P, 6)
       
        For I = 0 To P
            A = Split(strline(I), ";")
            RES(I, 0) = A(0)
            RES(I, 1) = A(1)
            RES(I, 2) = A(2)
            RES(I, 3) = A(3)
            RES(I, 4) = A(4) * 1
                        If A(4) < 0 Then
                RES(I, 5) = A(5) * -1
            Else
                RES(I, 5) = A(5) * 1
            End If
         
      RES(I, 6) = A(6) * 1
        Next

        Range(Cells(2, 1), Cells(2, 7).Offset(P, 0)) = RES
    Else
        MsgBox " Filen findes ikke"
    End If
End Sub


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
Avatar billede kabbak Professor
31. januar 2007 - 18:35 #1
Public Sub HenttxtData()
    Dim strline() As Variant, X As Long, Str As String, fileToOpen As String
    Dim RES() As Variant, I As Long, A As Variant, P As Long
    fileToOpen = "C:\Data\konti\konto 90020.txt" ' ret her hvis det er en anden fil
'    fileToOpen = "C:\test\konto 90020.txt"
    If Dir(fileToOpen) <> "" Then
        Open fileToOpen For Input As #1
        Line Input #1, Str
        Line Input #1, Str
        Line Input #1, Str
        Line Input #1, Str
        X = 0
     
        Do
            Line Input #1, Str
            If Str = "" Then
       
                Exit Do
            End If
            ReDim Preserve strline(X)
            A = Split(Str, vbTab)
            strline(X) = A(0)
            strline(X) = strline(X) & ";" & A(1)
            strline(X) = strline(X) & ";" & A(6)
            strline(X) = strline(X) & ";" & A(7)
            strline(X) = strline(X) & ";" & A(8)
            strline(X) = strline(X) & ";" & A(9)
            strline(X) = strline(X) & ";" & A(10)
            X = X + 1
        Loop Until EOF(1)
        Close #1
     
        P = X - 1
        ReDim RES(P, 6)
     
        For I = 0 To P
            A = Split(strline(I), ";")
            RES(I, 0) = A(0)
            RES(I, 1) = A(1)
            RES(I, 2) = A(2)
            RES(I, 3) = A(3)
            RES(I, 4) = A(4) * 1
                        If A(4) < 0 Then
                RES(I, 5) = A(5) * -1
            Else
                RES(I, 5) = A(5) * 1
            End If
       
      RES(I, 6) = A(6) * 1
        Next

        Range(Cells(2, 1), Cells(2, 7).Offset(P, 0)) = RES

'****************************************************
  Range("E1").CurrentRegion.Font.Strikethrough = False ' fjern gennemstregning ved indlæsning
'***************************************************
    Else
        MsgBox " Filen findes ikke"
    End If
End Sub
Avatar billede petert Forsker
01. februar 2007 - 14:31 #2
Nu virker det 100% med indlæsning.Mange tak kabbak.Har du mulighed for at rette makroen så man får saldo på både valuta beløbet og dk kr (som nu) for de poster der ikke er afstemt. Jeg vedlægger makroen her. Helst med resultat i J1,J2,J3,J4
MVH
Petert


Sub ValutaSaldi()

valuta = Array("EUR", "DKK", "NOK", "GBP")

ReDim valutasum(UBound(valuta), 1)
rækkeslut = Range("D1").CurrentRegion.Rows.Count

For I = 0 To UBound(valuta)
    For Each cell In Range("D1:D" & rækkeslut)
        If cell.Value = valuta(I) And _
        Not cell.Offset(0, 1).Font.Strikethrough Then
            total = total + cell.Offset(, 2).Value
        End If
    Next cell
    valutasum(I, 0) = valuta(I)
    valutasum(I, 1) = total
    total = 0
Next I

Range("H2").Resize(I, 2) = valutasum

End Sub
Avatar billede kabbak Professor
01. februar 2007 - 23:35 #3
Sub ValutaSaldi()

valuta = Array("EUR", "DKK", "NOK", "GBP")

ReDim valutasum(UBound(valuta), 1)
rækkeslut = Range("D1").CurrentRegion.Rows.Count

For I = 0 To UBound(valuta)
    For Each cell In Range("D1:D" & rækkeslut)
        If cell.Value = valuta(I) And _
        Not cell.Offset(0, 1).Font.Strikethrough Then
            total = total + cell.Offset(, 2).Value
        End If
    Next cell
    valutasum(I, 0) = valuta(I)
    valutasum(I, 1) = total
    total = 0
Next I
For I = 0 To UBound(valuta)
Range("H" & I + 2) = valutasum(I, 0)
Range("J" & I + 2) = valutasum(I, 1)
Next
End Sub
Avatar billede kabbak Professor
01. februar 2007 - 23:37 #4
Du mente vel J2,J3,J4,J5
Avatar billede petert Forsker
02. februar 2007 - 07:52 #5
Ja det er korrekt det skal være J2,J3,J4,J5.Men det virker rigtigt.Nu er saldoen i DK kr flyttet til J2,J3,J4,J5,Dette er OK. Men saldoen i valuta er ikke i (I2,I3,I4,I5)kan det laves.
/petert
Avatar billede kabbak Professor
02. februar 2007 - 13:04 #6
Sub ValutaSaldi()

valuta = Array("EUR", "DKK", "NOK", "GBP")

ReDim valutasum(UBound(valuta), 1)
rækkeslut = Range("D1").CurrentRegion.Rows.Count

For I = 0 To UBound(valuta)
    For Each cell In Range("D1:D" & rækkeslut)
        If cell.Value = valuta(I) And _
        Not cell.Offset(0, 1).Font.Strikethrough Then
            total = total + cell.Offset(, 2).Value
        End If
    Next cell
    valutasum(I, 0) = valuta(I)
    valutasum(I, 1) = total
    total = 0
Next I

Range("I2").Resize(I, 2) = valutasum

End Sub
Avatar billede petert Forsker
02. februar 2007 - 14:59 #7
Hej kabbak.Jeg tror vi misforstår hinanden. Nu flyttede ("EUR", "DKK", "NOK", "GBP")fra H2,H3,H4,H5. til I2,I3,I4,I5 det er fokert de skulle blive i H kolonnen.
For at opsumere skulle det gerne være sådan
1. I H2,H3,H4,H5 skal stå ("EUR", "DKK", "NOK", "GBP")
2. I I2,I3,I4,I5 skal være saldo af ikke afstemte beløb i valuta ("EUR", "DKK", "NOK", "GBP")disse beløb stammer fra E kolonnen.
3. og i J  være saldo af ikke afstemte beløb i DK kr.Disse beløb stammer fra F kononnen Som nuværende kode
/Petert
Avatar billede kabbak Professor
02. februar 2007 - 19:24 #8
Sub ValutaSaldi()
valuta = Array("EUR", "DKK", "NOK", "GBP")
ReDim valutasum(UBound(valuta), 2)
rækkeslut = Range("D1").CurrentRegion.Rows.Count
For I = 0 To UBound(valuta)
    For Each cell In Range("D1:D" & rækkeslut)
        If cell.Value = valuta(I) And _
        Not cell.Offset(0, 1).Font.Strikethrough Then
            total = total + cell.Offset(, 2).Value
            TotalValuta = TotalValuta + cell.Offset(, 1).Value
        End If
    Next cell
    valutasum(I, 0) = valuta(I)
    valutasum(I, 1) = total
    valutasum(I, 2) = TotalValuta
    total = 0
    TotalValuta = 0
Next I
Range("h2").Resize(I, 3) = valutasum
End Sub
Avatar billede petert Forsker
03. februar 2007 - 06:42 #9
Sådan så sad den lige i skabet. Tusindtak kabbak for din store hjælp.
/Petert
Avatar billede petert Forsker
26. marts 2007 - 10:22 #10
Hej kabbak send venligst et svar så vi kan lukke dette spørgsmål
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