Avatar billede Claus Mester
11. december 2003 - 11:21 Der er 19 kommentarer og
1 løsning

VBA word: 2 kolonner i Listbox

Hej.

Jeg har en listbox, hvori data fra en mappe skal hentes til.

Kolonne1 indeholder Filtitler
Kolonne2 indeholder Sidste red. dato

Hvordan får jeg arrangeret disse data PÆNT i en listbox?

Jeg har prøvet med tabulator, men da Filtitler kan variere i længde, svømmer dato kolonnen fra side til side, alt afhængig af Filtitel.

nicolaus
Avatar billede martin_moth Mester
11. december 2003 - 11:29 #1
En listbox har da ikke kolonner?

Listview har kolonner, MSFlexgrid har kolonner. Dem kan du bruge
Avatar billede Claus Mester
11. december 2003 - 11:32 #2
Jeg har ingen kolonner i listen nu. Men ønsker at skabe det.

Hvordan bruger jeg i praksis det du foreslår?
Avatar billede martin_moth Mester
11. december 2003 - 11:33 #3
En listbox har ikke kolonner!
Så brug en anden kontrol, fx. en listview
Avatar billede Claus Mester
11. december 2003 - 11:34 #4
Og ... hvad er en listview?
Avatar billede martin_moth Mester
11. december 2003 - 11:37 #5
Sorry - det kan du godt. 2 sek
Avatar billede martin_moth Mester
11. december 2003 - 11:38 #6
ListBox1.ColumnCount = 2
  ListBox1.AddItem "Hej" & vbTab & "du der"
  ListBox1.AddItem "Går det" & vbTab & "godt"
Avatar billede martin_moth Mester
11. december 2003 - 11:39 #7
"Og ... hvad er en listview?"
Det er en anden kontrol - i stedet for en listbox. Men som du kan se kan listbox godt have kolonner - jeg tog fejl i starten  :o)
Avatar billede Claus Mester
11. december 2003 - 12:39 #8
Jeg kan ikke rigtig få det til at fungere.
Jeg øger point til 40, så håber jeg du kan hjælpe mig.

Jeg bruger følgende kode til at indsætte data fra mappen i lstfil:

For Each f1 In fc
    If InStrRev(f1.Name, ".doc") Or InStrRev(f1.Name, ".DOC") Then
    sN = f1.Name
    sD = f1.DateLastModified
   
    Lstfil.AddItem sN & vbTab & sD
   
    End If
Next
Avatar billede Claus Mester
11. december 2003 - 12:40 #9
Sn afkortes på midten af listen og Sd vises ikke.
Avatar billede martin_moth Mester
11. december 2003 - 13:22 #10
Så juster dine kollonnebredder, eller bredden på hele din listbox

Et tip til forbedring af din kode:

If lcase(right(f1.name,4)= ".doc" then

I dit tilfælde vil følgende fil komme med:
  test.doc.xls (og det skal jo ikke med)

men følgende vil ikke komme med:
  test.Doc (og den skal jo med)

Prøv lige at test med

  Lstfil.AddItem "Hej" & vbTab & "du der"

Bare for at se om det virker :o)
Avatar billede Claus Mester
11. december 2003 - 13:31 #11
Resultatet er nøjagtig det samme som hvis jeg ikke kører Listbox med 2 kolonner (ColumnCount = 2).

Filtitel    Dato
FiltitelXX    Dato
Filtitel    Dato
......

Og tak for dine tips :-)
Avatar billede Claus Mester
11. december 2003 - 13:35 #12
Hvis jeg nu skulle bruge Listview i stedet for. Hvordan ser koden så ud, når alle filer i en mappe skal tilføjes på samme måde. Altså:

Filtitel      Dato
Filtitellllll Dato
Filtitel      Dato
Filtitelllll..Dato

Jeg kan forestille mig at der skal en "For-Next" til.
Avatar billede martin_moth Mester
11. december 2003 - 13:37 #13
Hvis jeg laver en macro i word, med en userform med en listbox på, og bruger koden:

  ListBox1.ColumnCount = 2
  ListBox1.AddItem "Hej" & vbTab & "du der"
  ListBox1.AddItem "Går det" & vbTab & "godt"

Får jeg to kolonner!

Har du en mailadresse, så kan jeg sende dig en test
Avatar billede Claus Mester
11. december 2003 - 13:43 #14
ssc@familie.tele.dk
Avatar billede Claus Mester
11. december 2003 - 13:44 #15
Jeg sætter listboxens property "ColumnCount" til 2. Det må være samme resultat som at gøre det runtime.
Avatar billede martin_moth Mester
11. december 2003 - 13:45 #16
Hmm - nu kan jeg sgu ikke selv få det til at virke.

Tror jeg giver op - jeg kan kun finde ud af det med listview...
Avatar billede Claus Mester
11. december 2003 - 13:49 #17
Jamen så lad os tage det med Listview ...
Avatar billede martin_moth Mester
11. december 2003 - 14:04 #18
Man kan jo ingenting med VBA i forhold til word. Listview skulel være så simpelt som beskrevet her:

  ListView1.ListItems.Add 1, , "Kolonne1"
  ListView1.ListItems(1).SubItems(1) = "Kolonne2"

Det virker i VB6, men ikke i VBA

Det eneste jeg kan få til at virke er en combobox, men der er også begrænsede muligheder i forhold til VB6. Øv.

Men det må kunne lade sig gøre, der er en ide med at man kan sætte antal kolonner.

Molbometoden er at bruge en monospaced font, og måle længden på de enkelte strings, og fylde spaces i dem der er for korte, så de alle er lige lange.

Det kan jo føres med Format - funktionen ret let.

Men siden det nu er filer du vil vise, kan du så ikke bruge en filelistbox med pattern sat til .doc? Nå nej - den fås jo kun til VB6 og ikak VBA.

Sidste mulighed er at prøve med MSFlexGrid, og se om du kan få det til at virke - det kan du jo lige selv forsøge :o)
Avatar billede Claus Mester
11. december 2003 - 15:16 #19
Tjaa. Jeg er gået tilbage til Listbox og Chr$(9) metoden. Så må jeg se med tiden, om der ikke dukker noget op.

For din ulejlighed får du point alligevel.

Tak for indsatsen.

nicolaus
Avatar billede martin_moth Mester
11. december 2003 - 15:29 #20
Alting er så let i VB - og så viser det sig, at i VBA kan kontrollerne kun det halve af hvad de kan i VB. Øv
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