Opgelost Een ingelezen ComboBox, de waarde uit elkaar halen

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.
Goedenavond,
Gaat uiteraard over voorgaande.
Ben de hele dag bezig om de code over te zetten naar m'n andere file.
Loop tegen 2 problemen op.
2e kan in verband zijn met de 1e dus eerst maar de 1e :)
Vanuit het testfile hier (Comboboxinlezen #7 me Cattegorie #3) wilde ik dus de macro overzetten.
Maar loop steeds tegen een bepaalde foutmelding op:
Dit hieronder werkt prima,

Code:
Private Sub CattegorieCB_change()
  If CattegorieCB = "" Then Exit Sub
  Dim lRow, Data
  With Sheets("DBase")
    lRow = .Range("A" & .Rows.Count).End(xlUp).Row      ' laatste regel
    Data = Filter(Evaluate("transpose(if(" & "DBase!" & .Range("D9:D" & lRow).Address & "=" & CattegorieCB.Value & "," & "DBase!" & .Range("A9:A" & lRow).Address & ",false))"), False, 0)
    ZoekNaamCB.List = Application.Transpose(Data)
  End With
End Sub


Maar na het overzetten dus niet, krijg foutmelding Fout 13 tijdens uitvoering.
Typen komen niet overeen. Hier de aangepaste code:
Code:
    If ZoekCattCB = "" Then Exit Sub
    Dim lRow, Data
    With Sheets("DBaseCentrum")
      lRow = .Range("S" & .Rows.Count).End(xlUp).Row      ' laatste regel
   
      Data = Filter(Evaluate("transpose(if(" & "DBaseCentrum!" & .Range("X9:X" & lRow).Address & "=" & ZoekCattCB.Value & "," & "DBaseCentrum!" & .Range("S9:S" & lRow).Address & ",false))"), False, 0)
   
      BedrNaamCB.List = Application.Transpose(Data)
    End With

Probleem zit hem in de volgende regel:
Code:
Data = Filter(Evaluate("transpose(if(" & "DBaseCentrum!" & .Range("X9:X" & lRow).Address & "=" & ZoekCattCB.Value & "," & "DBaseCentrum!" & .Range("S9:S" & lRow).Address & ",false))"), False, 0)

Heb dus het:
- werkblad DBase veranderd naar DBaseCentrum
- Cattegorie kolom naar Range X
- zoekwaarde naar ZoekCattCB
- kolom Naam naar Range S
Is het een probleem als je deze variabelen veranderd?
 
Laatst bewerkt:
Zal ze even onder elkaar zetten
Code:
'# De 1e werkt goed   
    Data = Filter(Evaluate("transpose(if(" & "DBase!" & .Range("D9:D" & lRow).Address & "=" & CattegorieCB.Value & "," & "DBase!" & .Range("A9:A" & lRow).Address & ",false))"), False, 0)
    Data = Filter(Evaluate("transpose(if(" & "DBaseCentrum!" & .Range("X9:X" & lRow).Address & "=" & ZoekCattCB.Value & "," & "DBaseCentrum!" & .Range("S9:S" & lRow).Address & ",false))"), False, 0)
'# de 2e dus niet
 
Post een nieuw voorbeeldbestand dat de werkelijke situatie weergeeft met gegevens die gelijkaardig zijn aan de data in het uiteindelijke bestand.
 
Goedemiddag,
Even een nieuw vb-tje met het probleem
Heeft dus te maken met verplaatsen van de kolommen voor inlezen, maar kom er niet uit.
 
Geen voorbeeldbestand gevonden.
 
In je 1ste bestand was Categorie een numerieke waarde, in je laatste bestand alphanumerieke waarden.
Daarom ging de formule de mist in.
 

Bijlagen

Goedemiddag Warme bakkertje,

Stom dat ik daar zelf niet op kom.
Maar zit even te kijken waar je nu die aanpassingen gedaan hebt.

Onder activate en change niets te vinden?

Onder Sub PrintPDFBut zaten nog een paar kleine foutjes qua juiste grootte 18 i.p.v. 4
Wat ik daar niet snap is waarom deze formule:
Code:
 .Range("AL8").CurrentRegion.Offset(1).Resize(, 18).ClearContents  ' maakt omgeving schoon??
   
 .Range("AL9").Offset(1).Resize(UBound(res), 4) = res
1e regel, maakt hij vanaf de regel eronder één of alles er beneden schoon?
Bij AL9 begint nl. de matrix.
Dus antwoord zou dan alles er beneden zijn, klopt dit?
Zoja waarom dan niet gewoon direct .range("AL9").resize.....

2e regel, snap ik het volgende niet helemaal
- vanaf AL9 Offset(1) 1 rij naar beneden?
- Resize vanaf ?? , 4 = 4 kolom 4? Hier worden de gevonden data neergezet, begrijp ik maar hoe?
 
Laatst bewerkt:
ok, ben er achter waarom hij hem nu wel pakt,lijkt op zoek de 7 verschillen :)
Code:
    Data = Filter(Evaluate("transpose(if(" & "DBaseCentrum!" & .Range("X9:X" & lRow).Address & "=" & CattegorieCB.Value & "," & "DBaseCentrum!" & .Range("S9:S" & lRow).Address & ",false))"), False, 0)
'wb Data = Filter(Evaluate("transpose(if(" & "DBaseCentrum!" & .Range("X9:X" & lRow).Address & "=""" & CattegorieCB.Value & """," & "DBaseCentrum!" & .Range("S9:S" & lRow).Address & ",false))"), False, 0)
Dus de 4 aanhalingstekens.
Maar de overige vragen blijven wel open staan.
 
1e regel:
Het gebied rond cel AL8, maar dan 1 rij lager (Offset(1), opgerekt tot 18 kolommen (Resize(,18) wordt leeg gemaakt. De kopteksten blijven dus staan.

2e regel:
De door jou geciteerde 2e regel klopt niet met de code uit #29, die is:
Code:
.Range("AL9").Resize(UBound(res), 18) = res
En die zet in het gebied AL9, opgerekt tot het aantal rijen van res en 18 kolommen, de inhoud van de array res neer.

Verder zou je de gehele inhoud van Sub UserForm_activate() kunnen vervangen door:
Code:
CattegorieCB.List = WorksheetFunction.Unique(Sheets("DBaseCentrum").Range("X9:X16"))
Is voor de beginnende VBA-er iets gemakkelijker te begrijpen.
 
Thanks voor de uitleg.
Even een nieuw vb-tje gemaakt voor de liefhebber.

Blijft één vraag over nl.
Cattegorie zou dus Alphanummeriek of Nummeriek kunnen zijn.
Is daar evt. ook nog een oplossing voor die beidde aankan, of gewoon zorgen dat Nummeriek altijd met een letter begint?

Nogmaals bedankt allemaal..
Dutch
 

Bijlagen

Code:
Data = Filter(Evaluate("transpose(if(DBaseCentrum!" & .Range("X9:X" & lRow).Address & "=" & IIf(IsNumeric(CattegorieCB.Value), Val(CattegorieCB.Value), """" & CattegorieCB.Value & """") & " ," & "DBaseCentrum!" & .Range("S9:S" & lRow).Address & ",false))"), False, 0)
 
Overzichtelijker gemaakt.
Code:
Private Sub CattegorieCB_Change()
Dim Data
If len(CattegorieCB) then
 Sheets("DBaseCentrum").Range("s8").CurrentRegion.Columns(1).Name = "b"
     Data = Filter(Evaluate("transpose(if(offset(b,,5)=" & IIf(IsNumeric(CattegorieCB.Value), CattegorieCB.Value, """" & CattegorieCB.Value & """") & ",b ,false))"), False, 0)
       With ZoekNaamCB
        .Clear
        .List = Application.Transpose(Data)
       End With
end if
End Sub
 
Laatst bewerkt:
Verander nog:
Code:
.List = Application.Transpose(Data)
in.
Code:
.List = Data

Had ik zo maar klakkeloos overgenomen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan