• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Gegevens opzoeken dmv combobox

Status
Niet open voor verdere reacties.

wacco

Gebruiker
Lid geworden
9 mrt 2006
Berichten
229
Hallo,

Ik ben zou graag d.m.v. een combinatie van comboboxen, de deta uit een bepaald werkblad willen halen, en deze op een overzicht weergeven zonder de eventuele lege rijen, liefst middels VBA code.
Ik heb een test bestandje toegevoegd waarmee misschien het e.e.a. duidelijk wordt.

In het werkblad " Invul" kies ik d.m.v. een 3-tal comboboxen de zoekvoorwaarde.
Aan de hand van deze zoekvoorwaarde, zou dus gezocht moeten worden in :
- het juiste werkblad (de naam)
- Het juiste jaar
- En de data uit de juiste maand.
- maar enkel de data die staat in " Data-1 t/m Data-2"

Deze gevonden waarden zouden dan in het werkblad " overzicht-1" moeten worden gezet.
Als er d.m.v.de comboboxen een andere keuze gemaakt wordt, zou de data in " Overzicht-1" mee moeten veranderen (de gekozen gegevens moeten dus niet bewaard blijven in het overzicht, dit zal later alleen geprint worden)

Is dit allemaal mogelijk met VBA,....??
En kan iemand mij op de juiste weg helpen.

Gr,
Jack
 

Bijlagen

Lukt het hiermee wacco ?
Code:
Sub hsv()
Dim cl As Range
With Sheets("Invul")
 Sheets("Overzicht-1").Range("D1").Resize(3) = Application.Transpose(Array(.ComboBox1, .ComboBox2, .ComboBox3))
End With
With Sheets("Overzicht-1")
If .Range("B7") <> vbNullString Then
 .Range("B7:E" & .Cells(Rows.Count, 2).End(xlUp).Row).ClearContents
   End If
 End With
With Sheets(Sheets("Invul").ComboBox3.Value)
For Each cl In .Columns(2).SpecialCells(-4123)
 If cl = WorksheetFunction.Choose(Sheets("Invul").ComboBox2.ListIndex + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) Then
  Sheets("Overzicht-1").Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(, 4) = cl.Offset(, 2).Resize(, 4).Value
    End If
      Next cl
  End With
End Sub
 
Lukt het hiermee wacco ?

Harry, net ff geprobeert.....en het werkt volgens mij perfect.
Moet het nu in een andere applicatie verwerken, maar dat moet volgens mij wel lukken.
Ga dit zo snel mogelijk proberen.
Mocht het eventueel niet lukken (wat ik niet verwacht), dan kom ik hier op terug.
Voorlopig harstikke bedankt voor de oplossing.

Gr,
Jack
 
Laat het ook graag weten als het gelukt is, je moet nl. de vraag toch als opgelost markeren.
Kleine moeite, groot plezier voor zoekenden. ;)

Bvd.
 
Harry,

Ik heb geprobeerd om het in mijn eigen bestand toe te passen,.....maar dat lukt maar niet.
Mijn kennis schiet van VBA schiet hierbij ernstig te kort.

Ik hoop dat ik nogmaals van jouw kennis en ervaring gebruik mag maken?

Ik heb een uitgeklede versie van mijn bestand bijgevoegd, en nu wil ik vragen of jij eens kan kijken om de door jou aangedragen code daarin toe te passen.
Enige uitleg van het bestand, lijkt mij op zijn plaats :

- Een keuze voor het individuele overzicht (waar dus de code van jou voor bedoelt is), staat op het werkblad start ( combobox3 en combobox4)
- Deze keuzes worden weergegeven in het werkblad setup, in de cellen G21 t/m G23.
- Deze cellen vormen de kop van het te printen werkblad Overzicht-2
- De data die in dit werkblad overzicht-2, moet worden gevonden ( met jouw code), staat in de werkbladen Naam01, naam02, enz ( maar 3 werkbladen in bestand)
- De data waar het om gaat staat in de verborgen kolommen BL t/m BR
- Waarbij in kolom BL het maand nummer staat.
- Op het moment dat er data in de kolommen T en AQ wordt ingevuld, zal in de verborgen kolommen BO t/m Br deze data worden overgenomen.
- Als nu een selectie in het werkblad Start gemaakt wordt voor een naam en een maand, is het de bedoeling dat van het juiste werkblad de data van de verborgen kolommen BO t/m BR worden
overgenomen in het werkblad overzicht, en dat eventuele lege regels in de selectie worden overgeslagen en niet zichtbaar zijn in het overzicht-2 ( tekst regels wel aan een gesloten)
- Hierna kan dan weer een nieuwe keuze gemaakt worden in de comboboxen 3 en 4 op het werkblad start.
- De gegevens op het werkblad Overzicht-2 behoeven dus niet in dit werkblad bewaard te worden, maar telkens worden ververst door de nieuwe keuze die gemaakt wordt op het werkblad start.
- Het zou ook nog prachtig zijn, als er eventueel geen data is die moet worden geprint, dat hierover een melding verschijnt.......maar dit is slechts een optie

Het is een heel verhaal, maar ik heb geprobeerd dus zo duidelijk mogelijk te omschrijven.

Ik hoop dat ik niet te veel vraag, het lijkt mij een hele klus.......maar mijn kennis schiet hier echt voor te kort.
Dus enige uitleg hoe de code precies te werk gaat, zou ik op prijs stellen......kan ik weer wat opsteken.

Bij voorbaat dank,

Gr,
Jack

P.S.
Werkbladen zijn wel beveiligd, maar een wachtwoord is niet ingesteld.
 

Bijlagen

Laatst bewerkt:
Hallo Jack,

Dat is inderdaad gemakkelijker, ik was bijna afgehaakt.

Zie de gewijzigde gele cellen in je bladen.
Formules die een foutwaarde gaven, samengevoegde cellen waar Excel slecht mee overweg kan.

Code:
Private Sub Print_individueel_Click()
Dim cl As Range
Application.EnableEvents = False
  With Sheets("Start")
    Sheets("Overzicht-2").Range("E1").Resize(3) = Application.Transpose(Array(.ComboBox3, .Shapes("Tekstvak 15").TextFrame.Characters.Text, .ComboBox4))
  End With
With Sheets("Overzicht-2")
If .Range("A6") <> vbNullString Then
 .Range("A6:H" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
   End If
 End With
 With Sheets(Sheets("Start").ComboBox3.Value)
For Each cl In .Columns(64).SpecialCells(-4123)
 If cl = WorksheetFunction.Choose(Sheets("Start").ComboBox4.ListIndex + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) Then
  Sheets("Overzicht-2").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4) = cl.Offset(, 3).Resize(, 4).Value
    End If
      Next cl
  End With
 Application.EnableEvents = True
End Sub
 
Laatst bewerkt:
Hallo Harry,

Hartelijk dank voor de snelle reactie.

Ik heb de aanpassingen die jij voorstelde uitgevoerd, maar waarom de verandering in kolom A van de werkbladen Naam01, naam02 enz.......wat zou hiermee fout kunnen gaan??
Vervolgens de code geplaatst,.....en het werkt.....maar.....omdat de werkbladnaam niet overeen kwam met de ingevulde naam in de setup, ging het fout
Ik heb vervolgens in de setup, in de kolom F, het nummer veranderd in de werkblad naam (Naam01, Naam02, enz) en in de combobox3 eigenschappen de volgende aanpassingen gedaan :
- Boundcolumn=1
- Columncount=2
- ColumnWidths=0pt;30pt
Misschien niet de juiste manier om dit op te lossen, maar het werkt wel.

Maar de code loopt vast op het moment dat ik de werkbladen beveilig, hoe kan ik ervoor zorgen dat alleen de werkbladen die met deze code worden gebruikt onbeveiligd worden tijdens de code, en daarna wederom beveiligd worden.
Voor het werkblad overzicht-2 lukt dit wel, maar de keuze werkbladen (via Combobox3)........hoe doe je dat?

En zou jij misschien een kleine uitleg kunnen geven, wat de code doet, met name in het laatste gedeelte vanaf :
Code:
With Sheets(Sheets("Start").ComboBox3.Value)

In ieder geval HARSTIKKE bedankt voor alle moeite, ik zit hier uren, en uren op te prutsen.....en het lijkt wel of jij het even uit de losse pols doet....geweldig :D

Gr,
Jack
 
Hallo Jack.

Verandering formule kolom A: Gaf foutwaarde indien kolom E leeg is (cel A392); probleem met macro door kolom BL te lopen.
De namen in tabblad Setup had ik aangepast in de cellen G4:G6.
Code:
With Sheets(Sheets("Start").ComboBox3.Value)

Uitleg: Sheets(de waarde van combob3 van tabblad Start) bv. With sheets(Naam01).


Van de bladen waar het om gaat wordt nu eerst de beveiliging eraf gehaald, en aan het eind er weer op gezet.


Code:
Private Sub Print_individueel_Click()
Dim cl As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheets("overzicht-2")
    .Unprotect
  If .Range("A6") <> vbNullString Then
    .Range("A6:H" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
  End If
With Sheets("Start")
      Sheets("Overzicht-2").Range("E1").Resize(3) = Application.Transpose(Array(.ComboBox3, .Shapes("Tekstvak 15").TextFrame.Characters.Text, .ComboBox4))
  End With
 With Sheets(Sheets("Start").ComboBox3.Value)
  .Unprotect
For Each cl In .Columns(64).SpecialCells(-4123)
 If cl = WorksheetFunction.Choose(Sheets("Start").ComboBox4.ListIndex + 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) Then
  Sheets("Overzicht-2").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4) = cl.Offset(, 3).Resize(, 4).Value
    End If
      Next cl
    .Protect
  End With
    .Protect
  End With
 Application.EnableEvents = True
End Sub
 
Hallo Harry,

Werkt perfect, ik heb enkel nog 1 probleempje.
In het overzicht-2, komt als naam te staan: Naam01 of Naam02 of.....enz.
Dit zijn de namen van de werkbladen waarop de gegevens worden gezocht, en is ook de boundcolumn in de combobox3.
Maar eigenlijk moet op dit overzicht in het veld naam, de werkelijke naam komen.
Hoe kan dit in jouw code verwerkt worden?

In het werkblad setup, is een nu een range aangemaakt genaamd : Naam_overzicht_2.
In deze range staat in de eerste kolom de werkbladnaam (Naam01, Naam02, enz.), in de tweede kolom staat de werkelijke naam.
Deze range wordt gebruikt in de combobox3 op het werkblad Start, en door de eerste kolom te verbergen (Width=0 ), en de boundcolumn op 1 (columncount=2) te zetten werkt jou code (natuturlijk :)) perfect.
Alleen deze column 1 wordt ook als naam weergegeven op het werkblad Overzicht-2, en daar zou dus eigenlijk de werkelijke naam (column 2) moeten worden weer gegeven.
Is dit mogelijk om dit in jou code te verweven???......
 
Jack,

Upload je bestand nog eens met welke gegevens je nu werkt.
 
Je hoeft een blad toch niet te ontgrendelen als je er niets in gaat veranderen ?

Code:
Private Sub Print_individueel_Click()
  Application.ScreenUpdating = False
  Application.EnableEvents = False

  With Sheets("overzicht-2")
    .Unprotect
    .cells(6,1).resize(.Cells(Rows.Count, 1).End(xlUp).Row-6,8).ClearContents

    With Sheets("Start")
      Sheets("Overzicht-2").Range("E1").Resize(3) = Application.Transpose(Array(.ComboBox3.value, .Shapes("Tekstvak 15").TextFrame.Characters.Text, .ComboBox4.value))
    End With

    For Each cl In Sheets(Sheets("Start").ComboBox3.Value).Columns(64).SpecialCells(-4123)
      If cl = Sheets("Start").ComboBox4.ListIndex + 1 Then  .Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4) = cl.Offset(, 3).Resize(, 4).Value
    Next
    .Protect
  End With

  Application.EnableEvents = True
End Sub
 
@snb,

Hij ******* het bij mij met de beveiliging erop.
De listindex is wel weer iets eenvoudiger.
 
Dit bedoel je Jack ?

Code:
Private Sub Print_individueel_Click()
'Met dank aan Harry (volledige code is door hem gemaakt)
Dim cl As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
With Sheets("overzicht-2")
    .Unprotect
  If .Range("A6") <> vbNullString Then
    .Range("A6:H" & .Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
  End If
With Sheets("Start")
      Sheets("Overzicht-2").Range("C1").Resize(3) = Application.Transpose(Array(.ComboBox3.List(.ComboBox3.ListIndex, 1), .Shapes("Tekstvak 15").TextFrame.Characters.Text, .ComboBox4))
  End With
 With Sheets(Sheets("Start").ComboBox3.List(Sheets("start").ComboBox3.ListIndex, 0))
  .Unprotect
For Each cl In .Columns(64).SpecialCells(-4123)
 If cl = Sheets("Start").ComboBox4.ListIndex + 1 Then
  Sheets("Overzicht-2").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4) = cl.Offset(, 3).Resize(, 4).Value
    End If
      Next cl
    .Protect
  End With
    .Protect
  End With
 Application.EnableEvents = True
End Sub
 
Dit bedoel je Jack ?

Harry,....dit is hem helemaal.....geweldig :thumb:
Het verschil zit hem volgens mij in deze regel :
Code:
Application.Transpose(Array(.ComboBox3.List(.ComboBox3.ListIndex, 1), .Shapes("T

Maar kan je misschien een kleine toelichting geven wat het precies doet, is toch wel een beetje abacadabra :confused:

Ik kan nu in ieder geval weer verder, moet nog een klein stukkie doen en dan zou het klaar moeten zijn.

Ik ga nog wat verder testen,...zal morgen wel worden.
En nogmaals, bedankt :thumb:

Gr,
Jack
 
Onderstaande regel ook om naar het juiste tabblad te verwijzen. ;)
Code:
With Sheets(Sheets("Start").ComboBox3.List(Sheets("start").ComboBox3.ListIndex, 0))

Je hebt 2 kolommen in je combobox, waarvan kolom 1 zichtbaar.
Eerste kolom in een combobox = 0, tweede = 1.

Ik denk dat je er zo wel uit komt.
 
Hartelijk dank, voor alle moeite.
Ik zet hem op "opgelost"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan