• 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.

Combobox vullen met de nog beschikbaar keuzes

Status
Niet open voor verdere reacties.

spaarie

Terugkerende gebruiker
Lid geworden
11 jul 2011
Berichten
1.784
Helpers,

Ik kom even niet verder. In de userform kan men een ipadres selecteren en een willekeurige poort. Deze combinatie is uniek en mag niet meer gemaakt worden.
Nu wil ik het zo inrichten dat wanneer men een ipadres selecteert, de nog beschikbare poorten worden getoond. Echter lukt het me niet helemaal (zie bijlage).

Wie o wie kan een helpend handje toereiken?
 

Bijlagen

hallo spaarie
bedoel je dat je in combobox2 alle beschikbaare poorten uit je data sheet zonder de reeds gebruikte poorten uit sheet lijst ziet?

of is het gecompiceerder?

als het de eerste optie is dan kun je deze function gebruiken: ( het grootste deel heb ik ooit van jou gehad )
Code:
Function BeschikbarePoorten(allePoorten As Range, GebruiktePoorten As Range)
    Dim CelVanAllePoorten As Range, CelVanGebruiktePoorten As Range, sp
    With CreateObject("System.Collections.ArrayList")
        For Each CelVanAllePoorten In allePoorten.Cells
            If CelVanAllePoorten = "" Then Exit For    'aangenomen dat er geen lege cellen mogen voorkomen
            For Each CelVanGebruiktePoorten In GebruiktePoorten.Cells
                If CelVanAllePoorten = CelVanGebruiktePoorten Then Exit For
            Next
            If CelVanGebruiktePoorten Is Nothing And Not .Contains(CelVanAllePoorten.Value) Then .Add CelVanAllePoorten.Value
        Next
        BeschikbarePoorten = WorksheetFunction.Transpose(.toarray())
    End With
End Function
zie voorbeeld.
je moet hem zelf nog wat verfraaien zodat hij altijd juiste hele gebieden pakt.
hij wordt nu alleen nog aangeroepen in de init_sub
 

Bijlagen

Laatst bewerkt:
Hoi,

Dit zou ook goed kunnen met de " CreateObject("scripting.dictionary") "

Zie volgende link voor meer info:
http://www.snb-vba.eu/VBA_Dictionary_en.html

Zoals vaker zijn leiden er meer wegen naar Rome :).

Tevens zou ik voor naambereiken gaan ipv je special cells overall te gebruiken. Zo iets als op volgende link:
http://www.ozgrid.com/forum/showthread.php?t=62504
En eventueel deze in het begin van je code al toekennen aan een Eigen parameter om je code manageable (is die een bestaand woord?) te houden.

Waarschijnlijk heb je al kennis van al deze items maar een geheugensteuntje is nooit weg :).

Edit:
Zou zelf je formulier ook zo maken zoals je code ook gaat werken.
Ik zelf zou klant als eerste zetten en hierna het ip, dit aangezien je de poortnummers laat vullen op basis van deze twee gegevens.
 
Laatst bewerkt:
Uhm Sylvester bedankt voor je reactie, maar ik doelde erop om de beschikbare poorten in combobox2 op het userform zichtbaar te maken. Wellicht dat ik de functie kan ombouwen...
 
@Demeter: Inderdaad leiden er meer wegen naar Rome, maar dacht eigenlijk wel dat het iets simpeler kon en dat ik ergens overheen keek ofzo.
Inderdaad heb ik wel kennis van deze zaken, maar ik heb mijn eigen, misschien eigenwijze, manier van werken en vind het fijn zo :)

Overigens speelt de klant geen rol in de keuzes van de ip adressen en poorten. Dit is gewoon een informatief veld en heeft geen invloed hierop.

Het beoogde resultaat is dus het selecteren van een ip adres in combobox1 en wanneer ik op dropbutton klik van combobox2 dat deze gevuld wordt met de nog beschikbare poorten op dat ip adres.
 
Laatst bewerkt:
Bedoel je zoiets?
Code:
Sub VenA()
Sheets("Data").Columns(3).SpecialCells(4).Offset(, -1).Select
End Sub

Anders moet ik eerst jouw formulier doorgronden. (ga ik toch wel doen):d
 
spaarie, kun je per ip_adres alle poorten gebruiken?

ik bedoel dat poorten meerdere keren voor kunnen komen?
 
@VenA: niet bepaald ;)

@Sylvester: Yup! Staat ook in het voorbeeld..
Dit is dus mogelijk:
192.168.1.100 - poort 10
192.168.1.100 - poort 20
192.168.1.200 - poort 10
 
Laatst bewerkt:
Verwijder iedere gebeurteniscode van Combobox2.

Gebruik vervolgens:

Code:
Private Sub ComboBox1_Change()
  c00 = "_10_20_30_40_50_60_70_80_90_100_110_120_130_140_150_160_170_180_190_200_210_"

  For j = 0 To UBound(ListBox1.List)
    If ListBox1.List(j, 0) = ComboBox1.Value Then c00 = Replace(c00, "_" & ListBox1.List(j, 1) & "_", "_")
  Next

  ComboBox2.List = Filter(Split(c00, "_"), "0")
End Sub
 
Wat een held die snb. Hier had ik echt nooit op gekomen, bedankt!

Echter rest mij nog de vraag. Waarom vul je c00 handmatig met alle poortwaardes?
Code:
c00 = "_10_20_30_40_50_60_70_80_90_100_110_120_130_140_150_160_170_180_190_200_210_"
Ik heb in mijn originele bestand namelijk een aanzienlijk grotere lijst dan mijn voorbeeldbestand. Momenteel zo even opgelost;
Code:
Private Sub ComboBox1_Change()
    With Sheets("DATA")
        For Each p In .Columns(2).SpecialCells(2).Offset(1).SpecialCells(2)
            c = c & "_" & p
        Next
        For j = 0 To UBound(ListBox1.List)
            If ListBox1.List(j, 0) = ComboBox1.Value Then c = Replace(c, "_" & ListBox1.List(j, 1) & "_", "_")
        Next
    End With
    ComboBox2.List = Filter(Split(c, "_"), "0")
End Sub
 
Echter rest mij nog de vraag. Waarom vul je c00 handmatig met alle poortwaardes?
Code:
c00 = "_10_20_30_40_50_60_70_80_90_100_110_120_130_140_150_160_170_180_190_200_210_"

Als dat 'handmatig' is, heeft dat woord er in het Nederlands wel een heel curieuze nieuwe betekenis bij gekregen.

Ik heb in mijn originele bestand namelijk een aanzienlijk grotere lijst dan mijn voorbeeldbestand.
Hoe hadden wij dat moeten/kunnen weten ?

Je kun het ook 'handmatig' oplossen met

Code:
c00="_" & join(application.transpose( .Columns(2).SpecialCells(2).Offset(1).SpecialCells(2)),"_") & "_"
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan