Als MAAND-functie maken voor listbox

Status
Niet open voor verdere reacties.

Offthefield

Gebruiker
Lid geworden
27 apr 2005
Berichten
369
Ik ben bezig met het maken van een listbox, hierbij dient G1 (Deze geeft de maand aan),
als deze gelijk is aan de maand van de datum (in mijn geval 1-3-2006 en 2-3-2006)
dan dient deze in de listbox te komen

Ik heb een deel van de procedure, maar ik weet niet hoe ik de maand dient te bepalen

Heeft iemand een idee hoe dit moet??

OffthefieldBekijk bijlage Maandlistbox.xls
 
Code:
If Month(Cells(i, 1)) = Range("g1").Value Then
Je moet nog wel de startwaarde van i wijzigen in 2 alvorens de macro te draaien want op regel 1 staat geen datum en dan krijg je een foutmelding.
 
Perfect, hij werkt!!

Hartelijk dank

Maar nu zit ik met een ander probleem, hoe krijg ik deze gegevens
nu weer in een andere sheet?

bvd

Offthefield
 
Maak een commandbutton op de userform.
Maak een nieuw blad aan, genaamd "Blad1".
Code "Userform_Initialize()" iets aangepast.

Doordat de code alles op één rij zet in de listbox, wordt het ook zo weer weggeschreven in één cel.
Code:
Private Sub UserForm_Initialize()
 Sheets("HORIZONTAAL").Select
  Dim i As Variant
   ListBox1.Clear
     i = 2
Do Until Cells(i, 1).Value = ""
      If Month(Cells(i, 1)) = Range("g1").Value Then
      ListBox1.AddItem Format(Cells(i, 2).Value, "€ ###,###.00") & "  " & Format(Cells(i, 3).Value, "0%") & "  " & Cells(i, 4).Value
    End If
  i = i + 1
 Loop
End Sub

Code:
Private Sub CommandButton1_Click()
 For i = 0 To ListBox1.ListCount - 1
     With Sheets("Blad1").Cells(Rows.Count, 1).End(xlUp)
      .Offset(1) = ListBox1.List(i)
      End With
    Next i
   Me.Hide
  Unload Me
End Sub
 
Je hoeft blad Horizontaal niet eerst te selecteren. Declareer i als Integer ipv Variant (neemt minder geheugenruimte in).
Code:
Private Sub UserForm_Initialize()
 Dim i As Integer
 ListBox1.Clear
 i = 2
 With Sheets("HORIZONTAAL")
    Do Until .Cells(i, 1).Value = ""
        If Month(.Cells(i, 1)) = .Range("g1").Value Then
            ListBox1.AddItem Format(.Cells(i, 2).Value, "€ ###,###.00") & "  " & _
                    Format(.Cells(i, 3).Value, "0%") & "  " & .Cells(i, 4).Value
        End If
        i = i + 1
    Loop
 End With
End Sub

Doordat de code alles op één rij zet in de listbox, wordt het ook zo weer weggeschreven in één cel.

En dat probleem tackelen we dan als volgt
Code:
Private Sub CommandButton1_Click()
 Dim i As Integer
 For i = 0 To ListBox1.ListCount - 1
     With Sheets("Blad1").Cells(Rows.Count, 1).End(xlUp)
      [COLOR="red"].Offset(1).Resize(, 3) = Split(ListBox1.List(i), "  ")[/COLOR]
      End With
 Next i
 Unload Me
End Sub
 
Het is precies wat ik zocht!!
Het gaat er steeds mooier uit zien!

Ik heb nog een klein vraagje om het te perfectioneren,

De gegevens wil ik naar rechts uitlijnen

Hoe moet dit met het laatste antwoord van Warme Bakkertje?

bvd

Offthefield
 
Dan zou ik het zo doen.
Maar misschien denkt @Warme bakkertje er anders over. :d

Zet kolom A van Blad1 op financieel

Code:
Private Sub UserForm_Initialize()
 ListBox1.Clear
 i = 2
  rw = 0
    Do Until Cells(i, 1).Value = ""
        If Month(Cells(i, 1)) = Range("g1").Value Then
        ListBox1.ColumnCount = 3
           ListBox1.AddItem
             ListBox1.List(rw, 0) = Format(Cells(i, 2), "€ ###,###.00")
             ListBox1.List(rw, 1) = Format(Cells(i, 3), "0%")
             ListBox1.List(rw, 2) = Cells(i, 4).Value
          rw = rw + 1
     End If
        i = i + 1
    Loop
End Sub


Private Sub CommandButton1_Click()
 Dim i As Long
 For i = 0 To ListBox1.ListCount - 1
     With Sheets("Blad1").Cells(Rows.Count, 1).End(xlUp)
      .Offset(1, 0) = CDec(ListBox1.List(i, 0))
      .Offset(1, 1) = ListBox1.List(i, 1)
      .Offset(1, 2) = Datevalue(ListBox1.List(i, 2))
    End With
  Next i
 Unload Me
End Sub
 
Laatst bewerkt:
Bij wijze van oefening zou je het eens kunnen maken met een Array of een Collection vooral als de lijst zeer lang wordt , maar wat mij betreft voldoet dit meer dan ruimschoots. :thumb:
Wat je nog kan doen is de kolombreedtes v/d Listbox instellen met
Code:
ListBox1.ColumnWidths = "60;30;60"
(Plaats deze regel na de ColumnCount) zodat je de schuifbalk niet nodig hebt.
 
Rudi,


Nadat ik de code had herlezen, zag dat er een foutje in was blijven staan.
Er stond nog een for, next in uit een soort van test.
De code is uiteraard een stuk sneller geworden.

Code is aangepast.
 
Nog een beetje opgesmukt :D
Code:
Private Sub Userform_Initialize()
i = 2
rw = 0
    With ListBox1
        .Clear
        .ColumnCount = 3
        .ColumnWidths = "70;40;60"
        Do Until Cells(i, 1).Value = ""
            If Month(Cells(i, 1)) = Range("G1").Value Then
                .AddItem
                .List(rw, 0) = Format(Cells(i, 2), "€ ###,###.00")
                .List(rw, 1) = Format(Cells(i, 3), "0%")
                .List(rw, 2) = Cells(i, 4).Value
                rw = rw + 1
            End If
        i = i + 1
        Loop
    End With
End Sub
Eentje met een Array
Code:
Private Sub Userform_Initialize()
    Dim myarray() As Variant
    i = 2
    With Sheets("HORIZONTAAL")
    ReDim myarray(1 To .UsedRange.Rows.Count, 3)
        Do Until .Cells(i, 1).Value = ""
            If Month(.Cells(i, 1)) = .Range("G1").Value Then
                j = j + 1
                myarray(j, 0) = Format(.Cells(i, 2), "€ ###,###.00")
                myarray(j, 1) = Format(.Cells(i, 3), "0%")
                myarray(j, 2) = Format(.Cells(i, 4).Value, "dd/mm/yyyy")
            End If
         i = i + 1
        Loop
        With ListBox1
            .Clear
            .ColumnCount = 3
            .ColumnWidths = "70;40;60"
            .List = myarray
        End With
    End With
End Sub
 
Laatst bewerkt:
Lijkt me nu helemaal dik in orde, :thumb:
Ik ga naar bed, wekker loopt zo weer af. :eek:
Moi.
 
Laatst bewerkt door een moderator:
Hartelijk bedankt, voor de razendsnelle reactie

Ik ga ze vanavond uitproberen

Offthefield
 
Ik ben verder gegaan en ben nu aan het experimenteren met VERTICAAL zoeken

in Sheet1(VERTICAAL1) gaat het goed, maar in Sheet2(VERTICAAL2) volgt een
error, alleen ik zie niet waarom!

Ik heb nl dezelfde procedures gedaan als bij HORIZONTAAL zoeken.

Kan iemand zien wat ik over het hoofd zie??

bvd

Offthefield
 

Bijlagen

  • verticaallistbox.xls
    38,5 KB · Weergaven: 28
Code:
i = [COLOR="red"]2[/COLOR]
If [COLOR="red"]Month([/COLOR]Cells(2, i)[COLOR="red"]) [/COLOR]= Range("B1").Value Then
 
HSV,

Hartelijk dank voor de snelle reactie,
1 cijfer verkeerd en je zit uren te turen
klasse man

Offthefield
 
Nu komt er weer een probleem bij het perfectioneren,
hoe krijg ik de gegevens hier uitgelijnd, alles staat nu
weer schots en scheef

bvd

Offthefield
 

Bijlagen

  • verticaallistbox1.xls
    54,5 KB · Weergaven: 28
Als je de één van de laatste codes van Rudi @Warme bakkertje probeert, is daar toch een oplossing.
 
HSV,

Bedankt

Ik zat een beetje te tobben met rw uit code van Warme Bakkertje en nu staat
als netjes naast elkaar

Offthefield
 
rw = een teller.
Elke keer als de loop de juiste maand vindt, gaat rw met 1 omhoog (rw = rw + 1).
Zo gaat de volgende gevonden waarde in de daarop volgende rij van je ListBox.
(.List(rw,0))

Ik heb het rw benoemd voor de afkorting van Row (ik dacht dat dit wel makkelijk te herkennen zou zijn).
 
Laatst bewerkt:
We gaan weer verder met het verbeteren van het programma

Hoe krijg ik de velden A3, A4, A5 en A6 standaard in de lijst van
Warme Bakkertje (met .List(rw, 0) ect.)

Bij voorbaat dank

Offthefield
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan