Avatar billede christian_h Nybegynder
10. september 2012 - 15:10 Der er 7 kommentarer og
1 løsning

Formater ListBox i Excel med VBA

Hej Alle Eksperter.

Jeg henter nogle data ind i en ListBox på en form i Excel, med VBA. Det fungerer også fint, bortset fra at bla. dato formateringen forsvinder, og datoer vises som feks. 41100.

Jeg bruger flg. måde til at hente min data på:

Me.ListBox1.RowSource = "Sheet1!D1:M1"

Kan man hente daten fra Rangen D1:M1 ind i sin ListBox på en anden må, så man ikke mister formateringen af cellerne?

Mvh.

Christian
Avatar billede supertekst Ekspert
10. september 2012 - 16:03 #1
Måske:
Private Sub UserForm_Activate()
    For Each cc In Range("Sheet1!D1:M1").Cells
        ListBox1.AddItem Format(cc, "dd-mm-yy")
    Next cc
End Sub
Avatar billede christian_h Nybegynder
10. september 2012 - 16:23 #2
Ser faktisk OK ud, med hensyn til Dato formatet. Men alt bliver vist i 1 kolonne i stedet for flere feks. som nendenstående:

01-10-2012    dag 1    timer 1    ælkadsf    13-10-2012    sdfg    ASD
01-10-2012    Dag 2    timer 2    dfg    14-10-2012    dsfg    asd
02-10-2012    Dag 3    timer 3    sdfg    15-10-2012    AD    asd

Altså lige som hvis det stod i regnearket. Det er forøvrigt heller ikke alle celler som indeholder datoer, så jeg får nok brug for flere forskellige typer formatering. Jeg ved på forhånd hvilken formatering, der skal være i hvilken kolonne, det vil være det samme hvergang, hvis det kan hjælpe noget.
Avatar billede supertekst Ekspert
10. september 2012 - 17:29 #3
Vil det så sige, at de øvrige data er placeret i de respektive kolonner i hver sin række - eller?
Avatar billede christian_h Nybegynder
10. september 2012 - 17:54 #4
Ja, hvert "element/Tekst stump" i hver sin celle.
Avatar billede supertekst Ekspert
10. september 2012 - 23:29 #5
Eksempel:
Private Sub UserForm_activate()
    With Me.ListBox1
        .ColumnCount = 7
        .ColumnWidths = "40;30;30;40;50;60;70"  'Kolonne bredder i ListBox - Justeres
   
        For ræk = 1 To 5
            .AddItem Format(Cells(ræk, 4), "dd-mm-yy")                      'datofelt
            .List(.ListCount - 1, 1) = Cells(ræk, 5)
            .List(.ListCount - 1, 2) = Cells(ræk, 6)
            .List(.ListCount - 1, 3) = Cells(ræk, 7)
            .List(.ListCount - 1, 4) = Format(Cells(ræk, 8), "dd-mm-yy")    'datofelt
            .List(.ListCount - 1, 5) = Cells(ræk, 9)
            .List(.ListCount - 1, 6) = Cells(ræk, 10)
        Next ræk
    End With
End Sub
Avatar billede christian_h Nybegynder
11. september 2012 - 07:02 #6
Hejsa

Den kan jeg ikke få til at virke, kan du uddrybe den lidt?

Mvh

Christian
Avatar billede supertekst Ekspert
11. september 2012 - 08:44 #7
Hej

Hvad er det, der ikke virker?

I den enkelte række i listboksen er der nu oprettet 7 kolonner, der får overført data fra regnearket.
Avatar billede christian_h Nybegynder
11. september 2012 - 12:14 #8
Hejsa.

Den henter data forkert ind.

Jeg har løst problemet selv.

Dim Data As Variant
Dim Dn As Long
Dim Ac As Long
Dim Ray As Variant
Dim StartCelle as Range
Dim SlutCelle as Range

Data = Range(Sheet4.Range(StartCelle), Sheet4.Range(SlutCelle)).Value

ReDim Ray(1 To UBound(Data, 1), 1 To UBound(Data, 2))

On Error Resume Next

For Dn = 1 To UBound(Data, 1)
  For Ac = 1 To UBound(Data, 2)
        If Ac = 1 Then Data(Dn, Ac) = Format(Data(Dn, Ac), "dd-mm-yyyy")
        If Ac = 6 Then Data(Dn, Ac) = Format(Data(Dn, Ac), "hh:mm")
        If Ac = 7 Then Data(Dn, Ac) = Format(Data(Dn, Ac), "hh:mm")
        Ray(Dn, Ac) = Data(Dn, Ac)
    Next Ac
Next Dn

ListBox1.List = Data

Takker for forslagne :-)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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