Avatar billede Morten Nybegynder
13. juni 2003 - 07:46 Der er 7 kommentarer og
1 løsning

Fylde listebox med range

Hej

Jeg har tøffet rundt i spørgsmål og svar og fundet noget men ikke helt det jeg skulle bruge....

Jeg har et range A2-F200, jeg skal have vist dette i en listbox på min userform, men...

rækken skal kun indsættes hvis f.eks. B2 er udfyldt og C2 er tom, hvis dette (eller andet) kriterie er opfyldt så skal der i listboxen vises A1-B1-F1

Er der nogen som kan hjælpe med dette?
Avatar billede Morten Nybegynder
13. juni 2003 - 07:46 #1
så skal der selvfølelig vises A2-B2-F2....
Avatar billede Morten Nybegynder
13. juni 2003 - 08:54 #2
Nedenstående biksede jeg lige sammen - hvis nogen har et bedre forslag er jeg lydhør... og en lille ting - hvordan kan jeg lige undgå array DataList indeholder tomme... ?
Jeg dimmer den med antal Rows i hele range... men jeg fylder ikke dem alle.. kan man Clear de tomme efterfølgende???

Private Sub UserForm_Activate()
Dim Data(), intNbrRow, DataList()
Dim i As Integer, line, k As Integer

    intNbrRow = getRow("strDataLokal", "R")
    'ReDim Data(0 To intNbrRow, 7)
    ReDim DataList(1 To intNbrRow, 1 To 3)
   
    Data = funcRng("strLocalVer", "strWBLocal", "strWSDataLink", "strDataLokal")

    k = 1
        For i = 1 To UBound(Data)
            If Data(i, 2) <> "" And Data(i, 3) = "" Then
                DataList(k, 1) = Data(i, 1)
                DataList(k, 2) = Data(i, 2)
                DataList(k, 3) = Data(i, 6)
                k = k + 1
            End If

        Next i
        With ListBox1
            .ColumnCount = 3
            .ColumnWidths = "95;95"
            .list = DataList
           
        End With
End Sub
Avatar billede bak Forsker
13. juni 2003 - 09:19 #3
check lige om det her virker (frihånd)
jeg har lavet et tmpData dar er dimmet omvendt, så jeg kan lave en redim preserve bagefter. (redim preserve redimmer kun  sidste del af et array.)
Derefter bliver data vendt om og smidt ind i DataList




Private Sub UserForm_Activate()
Dim Data(), intNbrRow, DataList(), tmpData()
Dim i As Integer, line, k As Integer

    intNbrRow = getRow("strDataLokal", "R")
    'ReDim Data(0 To intNbrRow, 7)
    ReDim tmpData(1 To 3, 1 To intNbrRow)
   
    Data = funcRng("strLocalVer", "strWBLocal", "strWSDataLink", "strDataLokal")

    k = 1
        For i = 1 To UBound(Data)
            If Data(i, 2) <> "" And Data(i, 3) = "" Then
                tmpData(1, k) = Data(i, 1)
                tmpData(2, k) = Data(i, 2)
                tmpData(3, k) = Data(i, 6)
                k = k + 1
            End If
        Next i
        ReDim Preserve tmpData(1 To 3, k - 1)
        DataList = Application.WorksheetFunction.Transpose(tmpData)
        Set tmpData = Nothing
        With ListBox1
            .ColumnCount = 3
            .ColumnWidths = "95;95"
            .List = DataList
           
        End With
End Sub
Avatar billede Morten Nybegynder
13. juni 2003 - 09:48 #4
Når jeg debugger får jeg fejl på linien

set tmpData=nothing

"Can't assing to array" ??

Jeg prøver lige at fjerne den linie for den bruges vel "kun" til at tømme hukommelsen????
Avatar billede Morten Nybegynder
13. juni 2003 - 09:54 #5
Jeps med denne lille ændring:

        ReDim Preserve tmpData(1 To 3, k - 1)
til
        ReDim Preserve tmpData(1 To 3, 1 To k - 1)

så virker det perfekt (se nedenstående...)

Kan du lige kigge på hvordan jeg tømmer tmpData...?

Og så smide et svar så jeg kan "betale"

Private Sub UserForm_Activate()
Dim Data(), intNbrRow, DataList(), tmpData()
Dim i As Integer, line, k As Integer

    intNbrRow = getRow("strDataLokal", "R")
    ReDim tmpData(1 To 3, 1 To intNbrRow)
    ReDim DataList(1 To intNbrRow, 1 To 3)
    Data = funcRng("strLocalVer", "strWBLocal", "strWSDataLink", "strDataLokal")

    k = 1
        For i = 1 To UBound(Data)
            If Data(i, 2) <> "" And Data(i, 3) = "" Then
                tmpData(1, k) = Data(i, 1)
                tmpData(2, k) = Data(i, 2)
                tmpData(3, k) = Data(i, 6)
                k = k + 1
            End If
        Next i
        ReDim Preserve tmpData(1 To 3, 1 To k - 1)
        DataList = Application.WorksheetFunction.Transpose(tmpData)
        'Set tmpData = Nothing
        With ListBox1
            .ColumnCount = 3
            .ColumnWidths = "95;95"
            .list = DataList
           
        End With
End Sub
Avatar billede Morten Nybegynder
13. juni 2003 - 09:56 #6
og faktisk behøver jeg ikke:

Redim DataList... så den har jeg fjernet igen...
Avatar billede bak Forsker
13. juni 2003 - 10:09 #7
Ok, her er et svar.
mht. tmpData    tjaeee, prøv lige at dimme den sådan her

Dim tmpData as variant

og prøv så Set tmpData = Nothing igen

funker det ikke må du undvære :-)
Avatar billede Morten Nybegynder
13. juni 2003 - 10:32 #8
Jeg kan ikke lige teste den helt færdig men umiddelbart ser det ud som om det virkede altså at dimme tmpData as Variant...

Du får lige nogle point og så tusind tak for hjælpen....
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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