30. januar 2007 - 17:29Der 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
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
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
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
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) 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
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
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
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
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
Hej kabbak send venligst et svar så vi kan lukke dette spørgsmål MVH Petert
Synes godt om
Ny brugerNybegynder
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.