12. maj 2005 - 10:49Der 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
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()
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
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.
Ok, det kan være lidt svært at gennemskue i så lang en kode.
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.