Avatar billede sjoran Nybegynder
27. april 2009 - 15:12 Der er 6 kommentarer og
1 løsning

VBA - Amount<>0

Hej,
Jeg er ikke god til VBA og har stjålet denne kode fra en anden database og tilpasset den så den virker på mit nuværende datasæt. Jeg vil gerne i selve koden lave en frasortering af alle de rækker hvor Amount=0. Den spytter nemlig 5200 rækker ind i target datasættet, men kun 1400 indeholder værdier forskellig fra 0.

Private Sub Command2_Click()
Dim db As Database
Dim rsSource As Recordset
Dim rsTarget As Recordset
Dim I As Integer
Dim AsOfDate As Date

Set db = CurrentDb
Set rsSource = db.OpenRecordset("Recieve_SAP_Costs")
Set rsTarget = db.OpenRecordset("T_import_SAP_Costs")


'For I = 2 To 27 afspejler antal regnr, hvis der kommer flere skal antallet sættes op

For I = 2 To 27
     
    Reg = rsSource.Fields(I).Name
   
    ' Move Transactions
     
    rsSource.MoveFirst
   
    While Not rsSource.EOF
   
            rsTarget.AddNew
                rsTarget!Date = rsSource.Fields(0)
                rsTarget!Regnr = Reg
                rsTarget!AccountID = rsSource.Fields(1)
                rsTarget!Amount = rsSource.Fields(I) * 1000
            rsTarget.Update
        rsSource.MoveNext
   
    Wend
   
Next I

End Sub
Avatar billede terry Ekspert
27. april 2009 - 15:26 #1
Try altering the Openrecordset

Set rsSource = db.OpenRecordset("SELECT * FROM Recieve_SAP_Costs WHERE amount <> 0")
Avatar billede terry Ekspert
27. april 2009 - 15:28 #2
Or make a query using the same SQL as I gave and then use query in the OpenRecordset

Set rsSource = db.OpenRecordset("NameOfQueryGoesHere")
Avatar billede sjoran Nybegynder
27. april 2009 - 16:04 #3
Haven't tried your suggestion yet, but by looking at it I don't think that it will work, as the "Amount" field only exist in the target recordset. The source recordset is a matrix/pivottable with departments("Reg" in the code) as header for the colomns and Account is "header" for the rows, and amount is the data in the middle. So actually it is in the target recordset that the selection should be made.
Avatar billede terry Ekspert
27. april 2009 - 16:30 #4
If its in the target table then it wont work.


If I understand you correectly then this is the line that contains the destination amount?
rsTarget!Amount = rsSource.Fields(I) * 1000

If that is correc then you need to test the value of rsSource.Fields(I) to decide as the whether or not the record is to be inserted.

While Not rsSource.EOF


If rsSource.Fields(I) <> 0 Then   
            rsTarget.AddNew
                rsTarget!Date = rsSource.Fields(0)
                rsTarget!Regnr = Reg
                rsTarget!AccountID = rsSource.Fields(1)
                rsTarget!Amount = rsSource.Fields(I) * 1000
            rsTarget.Update
End if
        rsSource.MoveNext
   
    Wend
Avatar billede sjoran Nybegynder
27. april 2009 - 16:45 #5
Thank you so much. That did the job spot on.
Avatar billede terry Ekspert
27. april 2009 - 18:46 #6
Here comes an answer then :o)
Avatar billede terry Ekspert
28. april 2009 - 18:48 #7
thanks
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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