Avatar billede oversjanten Nybegynder
12. maj 2005 - 10:49 Der er 7 kommentarer og
1 løsning

VBA udtræk fra celle

Jeg har et excell ark, der indeholder 4 kolonner:

tal1, tal2, tal3, tal4

Jeg ønsker på bagrund af værdierne i tal1,tal2, og tal3 få udtrukket tal4 , i rækken hvor tal1-3 er samfaldende med brugerinput

input værdierne er ikke tomme, har fået udskevet dem.


jeg har forsøgt med følgende kode:
Dim Celle1 As String,Celle2 As String,Celle4 As String,Celle1 As String

'i er det samlede antal rækker i arket
    For j = 0 To i
        Celle3 = ActiveSheet.Cells(j, 3).Value
        If Celle3 = Aar Then
            Celle2 = ActiveSheet.Cells(j, 2).Value
            If Celle2 = Part Then
                    Celle1 = ActiveSheet.Cells(j, 1).Value
                    If Celle1 = Land Then
                        Celle4 = ActiveSheet.Cells(j, 4).Value
                        Exit For
                    End If
            Else
 
            End If
        Else
 
        End If
    Next
    MsgBox "Resultatet er: " & Celle4
Avatar billede oversjanten Nybegynder
12. maj 2005 - 10:58 #1
det skal måske lige tilføjes at cellerne ikke er tomme
Avatar billede stefanfuglsang Juniormester
12. maj 2005 - 11:01 #2
Hvad sker der i dit program (nærmere beskrivelse af problemet)?

Hint:
"Danmark" og "danmark" er ikke samme streng, brug f.eks. LCase() på begge sider af lighedstegn
"Danmark" og "danmark  " er heller ikke det samme, brug Trim()
Avatar billede stefanfuglsang Juniormester
12. maj 2005 - 11:02 #3
ups, det sidste skulle være
"Danmark" og "Danmark  " er heller ikke det samme, brug Trim()
Avatar billede stefanfuglsang Juniormester
12. maj 2005 - 11:09 #4
... og din
For j = 0 To i
skal  være
For j = 1 To i
Avatar billede oversjanten Nybegynder
12. maj 2005 - 11:27 #5
Ups... er kommet til at dim Celle3 som string, skal være Integer
Jeg er ikke helt sikker på anvendelsen af Trim og LCase...Jeg har derfor "kun" tilføjet linierne:
        LCase (Celle3)
        LCase (Aar)



Fejlen jeg får er Run-time error, type mismatch, jeg vedlægger gerne hele koden:

Private Sub simple_Click()
' lokale variabler deklareres
    Dim Aar As Integer
    Dim Land As String
    Dim Part As String
    Dim tjeck As String
    Dim sti As String
    Dim Filename As String
    Dim myWB1 As Workbook
    Dim i As Integer
    Dim Result As Integer
    Dim j As Integer
    Dim Celle1 As String
    Dim Celle2 As String
    Dim Celle3 As Integer
    Dim Celle4 As Integer
   
    tjeck = False
   
    ' tjeck af landekode er indtastet korrekt
    Do While tjeck = False
        Land = Application.InputBox("Hvilket land ønsker du en rapport fra?" & vbCrLf & vbCrLf & "Anvend følgende muligheder:" & vbCrLf & "deu (Tyskland)        dnk (Danmark)" & vbCrLf & "prt (Portugal)          swe (Sverige)", "Land")
        If Land = "deu" Or Land = "dnk" Or Land = "prt" Or Land = "swe" Or Land = "aut" Then
            tjeck = True
        Else
            MsgBox "FEJL" & vbCrLf & vbCrLf & "Din indtastning er forkert" & vbCrLf & vbCrLf & "Landekoden skal være:" & vbCrLf & "deu, dnk, swe, prt eller aut"
        End If
    Loop
   
    tjeck = False
   
    ' tjeck af årstal er indtastet korrekt
    Do While tjeck = False
    Aar = Application.InputBox("Hvilket år ønsker du en rapport fra?" & vbCrLf & vbCrLf & "Indtast 4 ciffre (Eksempel: 1990)", "År")
        If Aar = "1990" Or Aar = "1991" Or Aar = "1992" Or Aar = "1993" Or Aar = "1994" Or Aar = "1995" Or Aar = "1996" Or Aar = "1997" Or Aar = "1998" Then
            tjeck = True
        Else
            MsgBox "FEJL" & vbCrLf & vbCrLf & "Din indtastning er forkert" & vbCrLf & vbCrLf & "Landekoden skal bestå af 4 ciffre, og være imellem 1990 - 1998 "
        End If
    Loop
   
    tjeck = False
   
    ' tjeck af landekode er indtastet korrekt
    Do While tjeck = False
        Part = Application.InputBox("Hvilket land ønsker du en rapport fra?" & vbCrLf & vbCrLf & "Anvend følgende muligheder:" & vbCrLf & "deu (Tyskland)        dnk (Danmark)" & vbCrLf & "prt (Portugal)          swe (Sverige)", "Land")
        If Part = "deu" Or Part = "dnk" Or Part = "prt" Or Part = "swe" Or Part = "aut" Then
            tjeck = True
        Else
            MsgBox "FEJL" & vbCrLf & vbCrLf & "Din indtastning er forkert" & vbCrLf & vbCrLf & "Landekoden skal være:" & vbCrLf & "deu, dnk, swe, prt eller aut"
        End If
    Loop
   
    ' Sti til dokument skal ændres... efter behov!
   
    sti = Application.GetOpenFilename("(*.xls),*.xls", , "Vælg fil")
    ' viser ikke applikationen
    Application.Visible = False
    ' åbner excell dokument og sætter valgte dokument til variabelnavn
    Set myWB1 = Workbooks.Open(sti)
    'Tæl antal rækker i ark1
    For i = 1 To myWB1.Sheets(1).UsedRange.Rows.Count
        Next i
    ' træk sidste række fra tæller(den er tom)
    i = i - 1
     
 
    For j = 1 To i
        Celle3 = ActiveSheet.Cells(j, 3).Value <---- denne linie bliver markeret
        Trim (Celle3)
        Trim (Aar)
        LCase (Celle3)
        LCase (Aar)
        Trim (Celle3)
        Trim (Aar)
        If Celle3 = Aar Then
          Celle2 = ActiveSheet.Cells(j, 2).Value
            If Celle2 = Part Then
                    Celle1 = ActiveSheet.Cells(j, 1).Value
                    If Celle1 = Land Then
                        Celle4 = ActiveSheet.Cells(j, 4).Value
                        Exit For
                    End If
            Else
 
            End If
        Else
 
        End If
    Next
    MsgBox "Resultatet er: " & Celle4
End Sub
Avatar billede stefanfuglsang Juniormester
12. maj 2005 - 12:47 #6
Du skal nok bruge noget i retning af
Celle3 = Trim(LCase(Celle3))
I øvrigt er 

For i = 1 To myWB1.Sheets(1).UsedRange.Rows.Count
Next i
' træk sidste række fra tæller(den er tom)
i = i - 1
     
ikke nødvendig, den gør ikke andet, end at gennemløbe værdierne, du kan bruge myWB1.Sheets(1).UsedRange.Rows.Count direkte til at angive antallet af rækker.
Avatar billede oversjanten Nybegynder
12. maj 2005 - 14:07 #7
Jeg har fundet fejlen...

Fejlen var
Dim Aar As Integer
som skulle have været
Dim Aar As String , idet Celle3 = Aar, skal datatyperne selvfølgelig være ens :-(

Men da jeg har benyttet mig af dit råd med trim, og lowercase, skal du da nogle point, så smid lige et svar

Tak for hjælpen
Avatar billede stefanfuglsang Juniormester
13. maj 2005 - 09:43 #8
Ok, det kan være lidt svært at gennemskue i så lang en kode.
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