Cel selectie

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Beste leden.

Onderstaand een stukje code. Deze code is ooit samen met Pasan gemaakt waarna ik deze verder kon gaan uitwerken. Ik heb hierover een vraagteken en ik kom er niet achter.

Code:
Dim DEBITEUR As String
    DEBITEUR = ComboBox1
    
    If ComboBox1 <> vbNullString Then
        it = Application.WorksheetFunction.Match(ComboBox1, Sheets("Debiteuren").Columns(1), 0)
        Kolnr = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
        Frame3.Enabled = True
        
        For i = 2 To 4
            Me("Textbox" & i) = Cells(it, Kolnr(i) - 2)
        Next
    End If
    
    TextBox5 = Cells(it, 9)     'BTW - nummer
    TextBox6 = Cells(it, 11)    'Telefoonnummer
    TextBox7 = Cells(it, 8)     'Debiteurnummer
    TextBox8 = Cells(it, 12)    'Emailadres
    TextBox9 = it 'Hier wordt het rijnummer van het tabel getoond waarin de gegevens gevonden zijn

Nu vraag ik mij af wie er kan ontdekken waar, welke en bovenal of er wel een cel op het tabblad geselecteerd wordt. Dit omdat ik met nog verder uitwerken van deze code niet uitkom. Bepaalde gegevens op het tabblad worden namelijk niet in de juiste cel geladen. Als ik de -2 in het For gedeelte weghaal dan kom ik uit op cel: D4. Deze cel wordt namelijk ook met Cells(3,3) geselecteerd vanaf Cel A1.

Mocht mijn vermoeden kloppen en dat er inderdaad niet geselecteerd wordt dan weet ik wat mij te doen staat en waarom bepaalde coderegels dan ook niet werken.

Alvast bedankt en fijne dagen verder.
 
Laatst bewerkt:
Er wordt geen cel geselecteerd op je werkblad (er staat nergens "select" in de code).
Als je de -2 weghaalt, kom je op 4 uit.
Als (it) ook de waarde 4 vertegenwoordigd, kom je inderdaad op cel D4 uit.

Het eerste element in een array = 0, de tweede = 1, de derde = 2, enz.
Code:
Kolnr = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
        
        For i = 2 To 4
            Me("Textbox" & i) = Cells(it, Kolnr(i) )
        Next
De for next lus begint met i = 2 → net uitgelegd dat het tweede element de derde waarde is → derde waarde = 4.
 
Ik dacht dat For 2 To 4 over de textboxen 2 tot en met 4 gingen. In deze is dat dus niet zo begrijp ik.

Getver ik dacht dat ik de code doorhad.

Ik heb overigens nu besloten om maar verder te werken met Cells(it , X). Dan kom ik namelijk wel uit en het zijn toch maar 3 korte coderegeltjes die ik gehoopt had met een For te kunnen doen. Dus het enig waar bovengenoemde code dan voor is, is dan enkel voor de ComboBox.

Het ging namelijk in deze over de invulling van postbusgegevens. Textbox2 zou dan het postbusnummer moeten aangeven in plaats van de straat, Textbox3 de bijbehorende postcode en Textbox4 de bijbehorende plaats. Deze staan weer in de kolommen E, F, G. Dus eigenlijk rechts naast de D4.

Wat ik eerst kreeg te zien is dat bij het postbusnummer de plaats werd ingevuld, bij de postcode het postbusnummer en bij plaats de postcode. Dus eigenlijk kort door de bocht. Textbox2 werd dan in plaats van E4 -> G4, Textbox3 werd dan in plaats van F4 -> E4 en Textbox4 werd dan in plaats van G4 -> F4. Het stukje code zal ik er zo even bij plakken.

Het gaat mij niet meer om een oplossing, daar ik dit al gewoon met Cells(it, X) heb opgelost, maar gewoon waar het dan fout ging.
 
Laatst bewerkt:
De werkende code:

Code:
If CheckBox2 Then
            Select Case Cells(it, 5)
                Case Is = vbNullString
                    CheckBox2 = False
                    Label3 = " Straat"
      'Adresgegevens worden geladen doordat sub vanuit Private Sub CheckBox2_Change() opnieuw wordt uitgevoerd.
                Case Is <> vbNullString
                    Label3 = " Postbus"
                    TextBox2 = "Postbus " & Cells(it, 5)
                    TextBox3 = Cells(it, 6)
                    TextBox4 = Cells(it, 7)
            End Select
    End If

Dit was en dit stukje werkte niet.

Code:
Select Case CheckBox2   'Postbus
            Case Is = True
                Select Case Cells(it, 5)    'Postbusnummer
                    Case Is = vbNullString
                        CheckBox2 = False
                                                
                        For i = 2 To 4
                            Me("Textbox" & i) = Cells(it, Kolnr(i) - 2)
                        Next
      ===========================================================================              
                    Case Is > vbNullString
                        TextBox2 = "Postbus " & Cells(it, Kolnr(i))
                        
                        For i = 3 To 4
                            Me("Textbox" & i) = Cells(it, Kolnr(i))
                        Next
      ===========================================================================                  
                

                End Select
        End Select

Het betreft het stukje tussen de = tekens. Daarboven heb ik ook een wijziging gemaakt, maar niet relevant op de fout.
 
Maarten,

For i = 2 to 4
Kijk nu eens in welke codestukjes de " i " staat.
In jouw voorbeeld heeft het betrekking op (textbox2, textbox3 en textbox4).
Maar de " i " heeft ook betrekking op Kolnr(i).
Kolnr(2)=4
Kolnr(3)=5
Kolnr(4)=6
 
Ik denk dat ik hem begin te begrijpen. Die "i" had ik inderdaad al met de textboxen gelinkt. Inderdaad de "i" bij kolmnr is eer ook. Dat zag ik. Maar ook hiervan dacht ik dat deze dus daar ook bij hoorde. Echter deze "i" is dus echt voor het kolomnr en dus de array in deze.

Dus dan is het de "it" die de rij aangeeft, daar was ik al achter door enkel de "it" te gebruiken.

De kolom(i) blijft voor mij nog wel even helaas toch een vraagteken. Als ik zo naar jou laatste uitleg kijk en dan bij kolnr(4)=6. Dan zou ik dus in kolom F moeten zitten. Dat vervolgens met die -2 is dan kolom D.

Toch snap ik jouw Jip en Janneke taal nog niet helemaal. Ik heb wel het idee dat ik aardig in de buurt zit.

Ik heb voor test even een textbox erbij geplaatst en deze de waarde kolnr(i) gegeven. Deze waarde hier vermeld is dan 7. Is dat dan kolom G ?

Ik zie dus als locatie cells(it, kolnr(i)) ---> it = 4 en kolnr(i) = 7.

Ik dacht dat ik hem door had, maar dat is dus niet zo.

Wel had ik het idee inderdaad al dat er geen cel geselecteerd wordt.

Edit 27-12-2014 om 22:45 uur

Nu snap ik het helemaal niet meer. Ik heb om uit te proberen de array uitgebreid. Ik heb er 0 en 1 bij geplaatst. Hierop kreeg ik een foutmelding. Vervolgens heb ik de -2 bij kolnr(i) in de For verwijderd. Hierna werkte de code weer, maar het gekke is... het blijft gewoon werken zoals het moet werken. Heeft de kolnr(i) wel nut vraag ik mij dan af. Uiteraard heb ik dat ook uitgeprobeerd en het heeft gewoon wel een functie. Als ik dan namelijk bij de Array de 0 en de 1 weer verwijder en nog steeds de -2 weglaat dan krijg ik in textbox 2 de plaats, textbox 3 het postbusnummer en in textbox 4 de postcode van de postbus. Dit stukje is voor als enkel de adres gegevens worden geladen en dus niet checkbox2 wordt aangevinkt.

Wil ik dan de postbusgegevens laden door checkbox2 aan te vinken, dan gaat dat wel goed?????? Dus 2 x wordt er toch een positie bepaald vanaf waar de cellen worden gelezen.

Ik zie niet wat er gebeurd. Noem het te diep in het glaasje gekeken door de feestdagen of te moeilijk denken, maar ik wil gewoon dit stukje doorgronden. Ik wil weten wat er staat.
 
Laatst bewerkt:
Je moet je een beetje meer verdiepen in de array's.
Draai onderstaande code maar eens (misschien helpt het).

Code:
Sub hsv()
Dim Kolnr, i As Long, it As Long
it = 4
 Kolnr = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
   For i = 0 To UBound(Kolnr)
    MsgBox "Range(" & Cells(it, Kolnr(i)).Address & ")"
   Next i
  End Sub
 
HSV dank je wel. Hoewel ik nu kan zien waar de gegevens vandaan komen, al zag je dat anders ook wel, vraag ik mij af hoe het dan kan dat kolom D als eerste wordt gekozen. Op de 1 of andere manier is kolom D het begin punt. Afhankelijk van de it wordt de juiste rij geselecteerd. Dus dan kan het D4 zijn, met een andere klant kan het weer D5 zijn etc.

Het kwartje valt niet. Ik denk dat ik te moeilijk denk. Daar heb ik wel vaker last van waardoor ik het vervolgens niet zie, terwijl het zo simpel is of kan zijn.

Wat geeft array nu eigenlijk aan? Zijn het de kolommen? Zo ja is array 0 dan kolom A, array 1 kolom B etc?

Maar dat kan dan volgens mij weer niet omdat in mijn code array 2 nul is, maar dan weer uitgaande van de -2 bij For Next zou het dan 2 - 2 is nul moeten zijn en dan volgens mij weer kolom A...... Maar deze komt niet boven omdat er in kolom D wordt begonnen waarna door de -2 de waarde vanaf kolom B wordt geselecteerd tot en met kolom D omdat daar de For i = 2 To 4 eindigt.

Met bovenstaande heb ik tevens geprobeerd mijn denkwijze over te brengen en die is op het moment chaotisch.

Ik ben wel een beetje met jouw code wezen spelen en deze ook ingevoerd in mijn code, dwz het msgbox gedeelte dan, maar dan blijf ik weer hangen op waarom kolom D als eerste wordt gekozen. Anders laat ik het maar zo en geef ik het op. Immers ik denk dat jij je tijd wel beter kan besteden.

Ik zie het verband niet. Ik haal zaken door elkaar waardoor het voor mij onsamenhangend wordt en ik ook nog eens hier de boel wellicht overbreng.
 
Laatst bewerkt:
Ik kom er even op terug. Ik heb even een bestandje gemaakt met daarin de code en ben het 1 en ander aan het proberen. Ik zie volgens mij een verband. Ik kom er later op terug.
 
Een array is eigenlijk een container waar je spullen in plaatst.
Code:
Sub hsv()
Dim sn
    sn = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
    Range("A1").Resize(, UBound(sn) + 1) = sn
    Range("A2").Resize(, LBound(sn) + 1) = sn(0)
    Range("A3").Resize(, 3) = Array("Masala", Format("09", "'00"), "arrayvraag")
    Range("A4") = UBound(sn) + 1
    Range("A5") = LBound(sn)
    Range("a6") = sn(UBound(sn))
    Range("A7") = sn(LBound(sn))
    Range("A8") = sn(4) + sn(7)   'som
End Sub

Kijk eens op de site van @snb (vba voor smarties).
 
HSV ik heb hem door. Dank je wel. Ik ben hem nu in een bestand aan het wegwerken. Nu zit ik enkel even met een nog klein dingetje. Ik heb het al eens gedaan, maar ik weet even niet meer hoe. Het bestand heb ik ook niet meer daar deze verloren is gegaan.

Kun jij mij vertellen met een simpele code hoe ik de gevonden rij bovenaan mijn pagina kan plaatsen. In de database kan ik zoeken op verschillende manieren. Artikelnummer, EAN Code en Productnummer van de leverancier. Bij deze wordt de rij waarin de gegevens staan getoond. De "it".

Maar wat ik voor elkaar wil krijgen is dat ik de rij "it" meteen boven aan de pagina plaats. Hoe ging dat ook al weer?

Code:
Private Sub CommandButton1_Click()
    If ComboBox1 = vbNullString Or TextBox1 = vbNullString Or TextBox1.Text = A Then GoTo Invoer
    
    With Me
        On Error GoTo Product
        
        Dim Kolnr, i As Long
        Dim it As Long
        Kolnr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
        it = WorksheetFunction.Match(TextBox1, Sheets("Materiaallijst").Columns(6), 0)
            
        TextBox2 = "Rij " & it
            
        For i = 3 To 3
        Me("TextBox" & i) = Cells(it, Kolnr(i) - 2)
        Next
        
   End With

   Cells(it, 1).Select

   Exit Sub
   
Verdere code verwijderd

Zelf dacht ik er aan om tussen de End With en Sub Exit de code: Cells(it, 1).Select, te plaatsen, maar dit werkt niet helemaal. De juiste rij wordt wel op kolom A geselecteerd, maar komt niet bovenaan.

In ieder geval alvast bedankt.
 
Laatst bewerkt:
Bv.
Code:
range("A1").resize(,10)=cells(it,1).resize(,10).value
 
HSV, Dat stukje had ik ook al bedacht, maar daarmee kopieer je de regel naar regel 1 beginnende vanaf kolom A.

Wat ik echt wil bereiken is dat de geselecteerde rij middels bijvoorbeeld scrollen boven aan get beeldscherm komt te staan. Rij 1 en 2 staan overigens geblokkeerd. Rij 3 en alles eronder kunnen enkel schuiven.
 
Schiet mij ineens wat te binnen. Hoewel het wel werkt toch even de bevestiging aub.

Code:
    Application.ActiveWindow.ScrollRow = it

Of is het beter een andere te gebruiken.
 
Die is prima toch?
Een ander methode is om de cel in de linker bovenhoek te krijgen.
Code:
application.goto cells(it,7),true
 
Ja die zou ook kunnen, maar daar bereik ik volgens mij bijna hetzelfde mee als Cells(it, 1).Select.

Tijd voor een slotje voor oplossing.

Ga ik nu een GUI maken. Kijken of dat lukt na de jaren hier en stoeien met VBA :thumb:

Bedankt voor de medewerking.
 
Laatst bewerkt:
HSV, Toch nog heel even snel een vergeten puntje.

Ik begrijp de code met array en die For Next. Toch merk ik iets op waar ik nu even aan wordt herinnert, omdat ik het van het formulier maar meteen een GUI maak. Anders moet ik weer onnodig een nieuw formulier aanmaken.

Ik heb 9 textboxen extra gemaakt die ik verder ga uitvullen met de gegevens uit de materiaallijst. Om dit werkend te krijgen heb ik de For Next veranderd in 3 To 12, maar dit werkte nog niet. Vervolgens om het werkend te maken heb de Array moeten uitbreiden met 11 en 12. Het aantal kolommen is slechts 10.

Waardoor komt dat eigenlijk? Heeft dat te maken met de array of met de -2 in For Next?

Al met al volgde daar onderstaand aangepaste en werkende code uit:

Code:
Kolnr = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
        it = WorksheetFunction.Match(TextBox1, Sheets("Materiaallijst").Columns(6), 0)
            
        TextBox2 = "Rij " & it
            
        For i = 3 To 12
        Me("TextBox" & i) = Cells(it, Kolnr(i) - 2)
        Next
 
Laatst bewerkt:
Code:
Me("TextBox" & i) = Cells(it, [COLOR=#FF0000]Kolnr(i- 2)[/COLOR])
 
Oke code jouw code ingevoerd en bij array 11 en 12 weer verwijderd.

Zo werkt deze inderdaad ook, maar wat heb ik nu eigenlijk dan gedaan. Wat is het verschil nu, want ik snap dan niet waarom mij eerder de andere code was gegeven met op het einde kolnr(i) -2). Of bereik ik eigenlijk met beide precies hetzelfde en was het een zeg maar verouderde code? Dit omdat VBA zelf ook verandert.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan