Avatar billede frederikschack Nybegynder
03. februar 2009 - 15:39 Der er 1 løsning

Type mismatch

Hej,

Jeg har problemer med typerne (Type mismatch) i nedenstående kode, den variabel der bliver returneret fra CopyFilter, er tilsyneladende ikke den samme som den der bliver modtaget i funktionen run(). Jeg har lavet noget tilsvarende kode der returnerer værdierne på samme måde og det fungerer upåklageligt.

Hvad har jeg overset? (se kommentarerne i koden)


Function CopyFilter(readSheet As String, height As Long, width As Long)
    Dim RowArray() As Variant
    Dim DimY() As Variant
    Dim DimX() As Variant
    ReDim DimY(height)
    ReDim DimX(width)
   
    newY = 1
    For y = 2 To height
        If Sheets(readSheet).Rows(y).Hidden = False Then
            For x = 1 To width
                DimX(x) = Worksheets(readSheet).Cells(y, x).Value
            Next
            DimY(newY) = DimX()
            Worksheets("Ark3").Cells(newY, 1) = DimY(newY)(1) 'Her er dataene fine nok og kan skrives til excel arket
            newY = newY + 1
        End If
    Next
    ReDim DimY(newY - 1)
   
    CopyFilter = DimY() 'Her bliver de returneret
   
End Function

Function run()
    Dim types(10) As String
    Dim fields(2) As Integer
    Dim fieldCount As Integer
    Dim FilteredData() As Variant
    Dim blahblah As String
   
   

    fields(1) = 1
    fields(2) = 2
    typeField = 1
   
    FilteredData() = CopyFilter("Ark1", countFilledRows("Ark1"), 2) 'Her bliver de modtaget i FilteredData
    types(1) = "a"
    types(2) = "b"
    Worksheets("Ark5").Cells(1, 1) = UBound(FilteredData())
    For y = 1 To UBound(FilteredData)
        For x = 1 To 2 'UBound(FilteredData(y)())
            Worksheets("Ark3").Cells(y, 1) = FilteredData(y)(1) 'Og her er dataene ikke fine nok og kan ikke skrives til excel arket
        Next
    Next
   
    'result = createReport(FilteredData, types, typeField, fields)
End Function
Avatar billede frederikschack Nybegynder
03. februar 2009 - 18:09 #1
Svaret er at man ikke kan lave en ReDim når der ligger data i sådan en Variant. Istedet laver jeg en DimY(0) med antallet af gældende linier i og så bruger den istedet for UBound(FiltreredeData())
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