10. juli 2008 - 16:48Der er
12 kommentarer og 1 løsning
LET- Test om værdi eksistere
Hej,
Jeg har listet en masse konti i et array. Og i to sideløbende array har jeg den deb og kre array. Nu skal jeg have dem skrevet ud i et excel sheet, og bruger følgende kode.
Men den stopper, og tror det er fordi at nogle af mine konti ikke har denne deb eller kre værdi. Hvordan tester man for det?
'START - Udskriv RW = 7 For i = 1 To AntalKonti Cells(RW, 2) = Konto(i) Cells(RW, 4) = DebBel(i) Cells(RW, 5) = KreBel(i) RW = RW + 1 Next 'SLUT - Udskriv
Virker ikke.. Tilføjede i første omgang lige et par )) bag testen. Men det virker alligevel ikke. Tror stadig problemet er at KreBel(i) slet ikke behover at være oprette.
Ja, jeg kan godt se, at jeg har bommet i det med det paranteser:
'START - Udskriv RW = 7 For i = 1 To AntalKonti If Not (IsEmpty(Konto(i)) Or IsNull(Konto(i))) Then Cells(RW, 2) = Konto(i) End If If Not (IsEmpty(DebBel(i)) Or IsNull(DebBel(i))) Then Cells(RW, 4) = DebBel(i) End If If Not (IsEmpty(KreBel(i)) Or IsNull(KreBel(i))) Then Cells(RW, 5) = KreBel(i) End If RW = RW + 1 Next 'SLUT - Udskriv
men du siger, det ikke virker? Får du slet ingen fejlmeldinger?
OK, så skal du nok også teste på dine arrays' upper boundarys (med Ubound funktionen):
'START - Udskriv RW = 7 For i = 1 To AntalKonti If (i <= UBound(Konto)) And Not (IsEmpty(Konto(i)) Or IsNull(Konto(i))) Then Cells(RW, 2) = Konto(i) End If If (i <= UBound(DebBel)) And Not (IsEmpty(DebBel(i)) Or IsNull(DebBel(i))) Then Cells(RW, 4) = DebBel(i) End If If (i <= UBound(KreBel)) And Not (IsEmpty(KreBel(i)) Or IsNull(KreBel(i))) Then Cells(RW, 5) = KreBel(i) End If RW = RW + 1 Next 'SLUT - Udskriv
Hej, undskyld den lange vente tid. men der var lige et ringridning i sønderborg der skulle overståes.
Det virker stadig ikke. Her er min totale kode:
Sub Upload() Dim Konto() As String Dim AntalKonti As String Dim DebBel() As String Dim KreBel() As String
Sheets("Input").Select Data = Range("A1").CurrentRegion Sheets("Dokumentation").Select
AntalKonti = 0 For i = 2 To UBound(Data, 1)
'START - Test om deb/kre konto er oprettet i Konto() DebKontoFindes = False 'Nulstiller test parameter KreKontoFindes = False 'Nulstiller test parameter If Len(Join(Konto)) > 0 Then 'Tester om Konto() indeholder noget For j = LBound(Konto) To UBound(Konto) 'Løkke på eksisterende data i Konto() If Data(i, 5) = Konto(j) Then DebKontoFindes = True End If If Data(i, 8) = Konto(j) Then KreKontoFindes = True End If Next End If 'SLUT - Test om deb/kre konto er oprettet i Konto()
'START - Tilføj deb informationer If DebKontoFindes = True Then For j = LBound(Konto) To UBound(Konto) If Data(i, 5) = Konto(j) Then DebBel(j) = DebBel(j) + Data(i, 3) End If Next Else AntalKonti = AntalKonti + 1 ReDim Preserve Konto(AntalKonti) Konto(AntalKonti) = Data(i, 5) ReDim Preserve DebBel(AntalKonti) DebBel(AntalKonti) = Data(i, 3) End If 'SLUT - Tilføj deb informationer
'START - Tilføj kre informationer If KreKontoFindes = True Then For j = LBound(Konto) To UBound(Konto) If Data(i, 8) = Konto(j) Then KreBel(j) = KreBel(j) + Data(i, 3) End If Next Else AntalKonti = AntalKonti + 1 ReDim Preserve Konto(AntalKonti) Konto(AntalKonti) = Data(i, 8) ReDim Preserve KreBel(AntalKonti) KreBel(AntalKonti) = Data(i, 3) End If 'SLUT - Tilføj deb informationer
Next i
'START - Udskriv RW = 7 For i = 1 To AntalKonti If (i <= UBound(Konto)) And Not (IsEmpty(Konto(i)) Or IsNull(Konto(i))) Then Cells(RW, 2) = Konto(i) End If If (i <= UBound(DebBel)) And Not (IsEmpty(DebBel(i)) Or IsNull(DebBel(i))) Then Cells(RW, 4) = DebBel(i) End If If (i <= UBound(KreBel)) And Not (IsEmpty(KreBel(i)) Or IsNull(KreBel(i))) Then Cells(RW, 5) = KreBel(i) End If RW = RW + 1 Next 'SLUT - Udskriv
Okay, det ser ud til, at VBA evaluerer hele linien på én gang. Selv om man starter med at teste på Ubound, så stopper evalueringen ikke, selv om resultatet af den første test bliver False. Det er derfor nødvendigt at dele det i to If sætninger:
'START - Udskriv RW = 7 For i = 1 To AntalKonti If (i <= UBound(Konto)) Then If Not (IsEmpty(Konto(i)) Or IsNull(Konto(i))) Then Cells(RW, 2) = Konto(i) End If End If If (i <= UBound(DebBel)) Then If Not (IsEmpty(DebBel(i)) Or IsNull(DebBel(i))) Then Cells(RW, 4) = DebBel(i) End If End If If (i <= UBound(KreBel)) Then If Not (IsEmpty(KreBel(i)) Or IsNull(KreBel(i))) Then Cells(RW, 5) = KreBel(i) End If End If RW = RW + 1 Next 'SLUT - Udskriv
Dans skulle også være meget sundere end at sidde og gruble over computerkode. ;-)
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.