Avatar billede tjensen Nybegynder
10. juli 2008 - 16:48 Der 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
Avatar billede kjulius Novice
10. juli 2008 - 20:30 #1
Måske

If not (IsEmpty(Konto(i) or IsNull(Konto(i)) Then
    ' Gør noget...
End If
Avatar billede tjensen Nybegynder
11. juli 2008 - 09:49 #2
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.
Avatar billede kabbak Professor
11. juli 2008 - 13:19 #3
If not IsEmpty(Konto(i)) Then
    ' Gør noget...
End If
Avatar billede kjulius Novice
12. juli 2008 - 00:51 #4
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?
Avatar billede tjensen Nybegynder
12. juli 2008 - 15:07 #5
Jeg får Subscript is out of range på DebBel(i).
Avatar billede kjulius Novice
12. juli 2008 - 21:10 #6
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
Avatar billede tjensen Nybegynder
15. juli 2008 - 16:06 #7
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
   
End Sub
Avatar billede kjulius Novice
15. juli 2008 - 20:11 #8
Samme fejlmelding (og samme sted)? Hvad er værdien af "i" i forhold til "UBound(DebBel)" og "LBound(DebBel), når fejlen opstår?
Avatar billede tjensen Nybegynder
15. juli 2008 - 20:52 #9
Samme fejl. I har værdien 2.

Data indeholder kun 2 linie pt.

Data(2, 3) = 10000
Data(2, 5) = 100
Date(2, 8) = 200

Data(3, 3) = 20000
Data(3, 5) = 100
Date(3, 8) = 300
Avatar billede kjulius Novice
15. juli 2008 - 21:57 #10
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
Avatar billede tjensen Nybegynder
15. juli 2008 - 21:59 #11
Ja da!! Årh, nu er jeg glad!
Tror nærmest lige jeg skal danse lidt :D

Mange tak!
Avatar billede tjensen Nybegynder
17. juli 2008 - 15:26 #12
svar?
Avatar billede kjulius Novice
17. juli 2008 - 18:47 #13
Dans skulle også være meget sundere end at sidde og gruble over computerkode. ;-)
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
Kurser inden for grundlæggende programmering

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