VBA ranges van meerdere sheets in combobox

Status
Niet open voor verdere reacties.

Royzilla

Gebruiker
Lid geworden
10 apr 2014
Berichten
187
Goedemorgen,

Ik heb een stukje code dat een range haalt uit Sheet2. Deze Range wordt geplaatst in Combobox1. Als er dan een maand (inhoud van de range) geselecteerd is worden de gegevens geladen en in de juiste kolommen geplaatst.

Het probleempje wat ik heb is dat als je daarna nog een keer een maand wil selecteren dan zijn de Ranges nog eens toegevoegd. wie kan me hierop corrigeren?(wat overigens logisch is omdat ik niet weet hoe ik die items éénmalig moet laten toevoegen)

Ik heb nog een vraagje:
Is het mogelijk om meerdere ranges van meerdere sheets in deze combobox te plaatsen?


Code:
Private Sub ComboBox1_Change()
    
    With Sheet1.ComboBox1
    .AddItem Sheets(2).Range("Q3").Value
    .AddItem Sheets(2).Range("R3").Value
    .AddItem Sheets(2).Range("S3").Value
    .AddItem Sheets(2).Range("T3").Value
    .AddItem Sheets(2).Range("U3").Value
    .AddItem Sheets(2).Range("V3").Value
    .AddItem Sheets(2).Range("W3").Value
    .AddItem Sheets(2).Range("X3").Value
    .AddItem Sheets(2).Range("Y3").Value
    .AddItem Sheets(2).Range("Z3").Value
    .AddItem Sheets(2).Range("AA3").Value
    .AddItem Sheets(2).Range("AB3").Value
    End With
    
    With Sheets("2014")
        fColumn = .Range("Q3:AB3").Find(Sheets(1).ComboBox1).Column
        .Cells(3, fColumn).Offset(1).Resize(39).Copy
        Sheets("KPI").Range("H3") = .Cells(3, fColumn).Value
        Sheets("KPI").Range("H4").PasteSpecial xlPasteValues
        .Cells(3, fColumn - 1).Offset(1).Resize(39).Copy
        Sheets("KPI").Range("F3") = .Cells(3, fColumn - 1).Value
        Sheets("KPI").Range("F4").PasteSpecial xlPasteValues
    End With
    
End Sub
 
Beste SNB,

Bedankt voor het reageren en ik ga ook zeker even op die website rondsnuffelen.

De code die je in het berichtje had geplaatst als ik die uitvoer en de rest even allemaal tussen comments zet krijg ik maar 1 item terug. de eerste van de range.

Ik had je ook moeten zeggen dat ik met een ActiveX ComboBox in mijn excel zelf werk en niet in een userform. Als ik een totale range wil geven in de list op die manier. Wordt alleen de eerste van de range zichtbaar en uitgevoerd.

Hoe kan dit?
 
Code:
Private Sub Sheet_activate()
    ComboBox1.List = Application.Transpose(Sheets(2).Range("Q3:AB3").Value)
End Sub
 
Thanks dit werkt Prima @Warme Bakkertje

Is er ook een mogelijkheid om zegmaar van andere sheets ook dezelfde range in deze combobox toe te voegen. De range blijft in elke sheet altijd hetzelfde, maar de sheets zijn van verschillende jaren.

Als dat eventueel kan heb je natuurlijk elke keer 12 maanden onder elkaar staan in de combobox kan er dan aangegeven worden uit welke sheet deze komen? Ben gewoon nieuwsgierig en leergierig :)
 
Laatst bewerkt:
Vanwege die nieuws- en leergierigheid zou ik eerst de webpagina waarnaar ik verwees eens grondig doornemen. Daarna kunnen we veel effektiever met elkaar communiceren.
 
Goedemorgen,

Op de pagina heb ik dit gevonden en ik denk dat ik dit stuk moet gebruiken voor wat ik wil.
Code:
For Each sh In Sheets
c00 = c00 & "|" & sh.Name
Next
ComboBox1.List = Split(Mid(c00, 2), "|")

maar mijn kennis breekt hier op omdat ik niet weet hoe ik het moet combineren met het volgende:
Code:
Private Sub Sheet_activate()
    For Each sh In Sheets
        c00 = c00 & "|" & sh.Name
        ComboBox1.List = Application.Transpose(Sheets(2).Range("Q3:AB3").Value)
    Next
    ComboBox1.List = Split(Mid(c00, 2), "|")
End Sub

Als ik het op deze manier doe, krijg ik natuurlijk alle sheet namen maar dan weet ik niet hoe ik die ranges van alle sheets er ook in krijg of zichtbaar maak met de sheetnaam ervoor in de combobox.
 
Code:
Private Sub Worksheet_Activate()
    For Each sh In Sheets
        c00 = c00 & Join(Application.Transpose(Application.Transpose(Sheets(1).Range("Q3:AB3"))), "|") & "|"
    Next
    ComboBox1.List = Split(Mid(c00, 1), "|")
End Sub
 
Heey bedankt voor je antwoord.

Zou je me uit kunnen leggen waarom er 2 keer gebruik gemaakt wordt van application.Transpose?
Dat snap ik niet.

Wat dit stukje code doet, is die range steeds kopiëren en kopieren. Het blijft dezelfde range van 1 sheet. Is dat mogelijk om elke sheet te checken op die range vanaf Sheet(2)?
 
Code:
Private Sub Worksheet_Activate()
    For  sh  = 2 to sheets.count
        c00 = c00 & Join(Application.Transpose(Application.Transpose(Sheets([COLOR="#FF0000"]sh[/COLOR]).Range("Q3:AB3"))), "|") & "|"
    Next
    ComboBox1.List = Split(Mid(c00, 1), "|")
End Sub
 
Laatst bewerkt:
hij zet de range er vaak genoeg in. alleen Kopieert die nu de range van sheet 2 ook in 3 en zo door.
 
Die code kopiëert juist niks. Die zet enkel alle bereiken van die werkbladen onder elkaar in de Combobox.
 
Sorry je hebt gelijk,
het gaat dan over dit stukje die moet ik zien te combineren met de code die jij stuurde.

Code:
Private Sub ComboBox1_Change()

    With Sheets("(wat hier?)")
        fColumn = .Range("Q3:AB3").Find(Sheets(1).ComboBox1).Column
        .Cells(3, fColumn).Offset(1).Resize(39).Copy
        Sheets("Hoofdlijst").Range("H3") = .Cells(3, fColumn).Value
        Sheets("Hoofdlijst").Range("H4").PasteSpecial xlPasteValues
        .Cells(3, fColumn - 1).Offset(1).Resize(39).Copy
        Sheets("Hoofdlijst").Range("F3") = .Cells(3, fColumn - 1).Value
        Sheets("Hoofdlijst").Range("F4").PasteSpecial xlPasteValues

    End With
End Sub

Code:
Private Sub Sheet_activate()
    
    For Each sh In Sheets
        c00 = c00 & Join(Application.Transpose(Application.Transpose(Sheets(2).Range("Q3:AB3"))), "|") & "|"
    Next
    ComboBox1.List = Split(Mid(c00, 1), "|")

End Sub
 
Code:
Private Sub WorkSheet_activate()
    Application.enableevents = false
    For Each sh In Sheets
        c00 = c00 & Join(Application.Transpose(Application.Transpose(Sheets(2).Range("Q3:AB3"))), "|") & "|"
    Next
    ComboBox1.List = Split(Mid(c00, 1), "|")
    application.enableevents = true
End Sub
 
Laatst bewerkt:
Ik neem aan dat ik hier ook iets moet aangeven dat er gekeken wordt uit welke sheet de range komt, want normaal stond er letterlijk een sheet naam in deze regel:
Code:
With Sheets("")

Wat moet daar dan om het kopiëren van de data goed te krijgen?
 
Da's dan fijn om te weten dat dit 15 posts voor niks geweest zijn, want wat jij wil bereiken is totaal iets anders dan zomaar even een combobox vullen met bereiken uit verschillende sheets. :mad:
Het antwoord op je titelvraag heb je gekregen maar heeft eigenlijk geen uitstaans met wat je eigenlijk wil uitwerken.
Ik zou daarom deze vraag sluiten, start een nieuwe vraag met een relevante titel en denk diep na over de formulering van je vraag. Plaats er tevens ineens een voorbeeldbestand bij met fictieve gegevens maar toch eentje dat de werkelijke layout van je bestand weergeeft zodat we zelf niets moeten gaan reconstrueren.
 
Hmm oke..

Het lijkt mij gewoon logisch dat je meerdere Sheet ranges heb en als je dan een maand aanklikt die in de range van Sheet 3 hoort dat je dan ook de data daar van krijgt, maar dat zal dan aan mij liggen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan