Rijnummer vinden met Match

Status
Niet open voor verdere reacties.

masala09

Gebruiker
Lid geworden
6 aug 2012
Berichten
886
Even een snelle vraag.

Ik wil het rijnummer weten bij de gegevens die ik opvraag. Nu ben ik op de volgende uitbreiding gekomen, maar ik heb eerlijk gezegd geen idee hoe dit in elkaar zit en waarom ik met enkel it het rijnummer zie.

Code:
it = Application.WorksheetFunction.Match(ComboBox1, Sheets("Debiteuren").Columns(1), 0)
        Kolnr = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
        Msgbox("Het rijnummer waarin de gegevens staan is: " & it)

Dit is even een uitprobeersel geweest, maar wat wel werkt. Nu krijg ik het rijnummer te zien waar de gegevens in staan, maar ik vraag mij dan af waarom ik enkel met dit enkel het rijnummer al vind. Wat ik straks wil bereiken is dat ik de gegevens kan opvragen en dat ik dan middels het rijnummer de rij in de tabel ook kan aanpassen.

Dus met andere woorden, alleen is niet de gehele code hier geplaatst, er worden textboxen gevuld met gegevens die gevonden zijn en ook het rijnummer wordt weergegeven. Nu is het nog even in een msgbox. Straks wordt dat met een textbox. Daarna wil ik dan die gegevens aan kunnen passen en opnieuw wegschrijven naar dezelfde tabel en zelfde rijnummer. Dus feitelijk wordt de volledige rij dan herschreven.

Gaat dat lukken op deze manier. Echter ik moet dan enkel nog een manier hebben om naar de rij weg te schrijven.
 
Code:
set c = columns(1).find(combobox1.value,,xlvalues,xlwhole)
if not c is nothing then
msgbox c.address
msgbox c.offset(,1) = "hallo, ik ben de cel rechts van jou"
 
HSV dank je wel. Echter het rijnummer en de gegevens die daarin staan die vind ik al. Daar ligt geen probleem. Feitelijk is er ook geen probleem.

Ik vraag mij enkel af waarom via: it het rijnummer al getoond krijg. Ik heb het al omgezet naar een textbox in het userform. De msgbox is nu dus weg. Via de coderegel: it vind ik namelijk ook de gegevens. Per toeval kwam ik erachter dat ik hiermee dus ook het rijnummer kan zien. Dat snap ik niet.

Wat er nu gebeurd is dat ik dus alle benodigde gegevens opvraag en laat wegschrijven naar verschillende textboxen. Daarna kan ik 1 of meerdere gegevens in die textboxen veranderen en dan wil ik het opnieuw op dezelfde regel opslaan. Ik weet dat dit via het rijnummer moet kunnen. Alleen hoe dat ben ik nog aan het uitzoeken.
 
Het is te vergelijken met de Excel formule "Vergelijken". :D
 
Ja nee tuurlijk hihi. Je bedoelt vergelijken en bij een wijziging aanpassen met de juiste gegevens?

Ja helaas heb ik vergelijken nog nooit gebruikt en al helemaal niet in VBA. Ik dacht meer aan iets in de trend van:

De code waar ik nu eerst mee wegschrijf is:

Code:
.Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(, 6) = Array(ComboBox1, TextBox1, TextBox2, TextBox3, ComboBox2, TextBox4, TextBox5, TextBox6)

Zodra ik dan deze gegevens ophaal dan komen zij weer in textboxen te staan en in een andere textbox zie ik ook het rijnummer.

Dan pas ik de gegevens aan en dacht ik aan iets van:

( De rijgegevens staan in textbox 31.)

Code:
Row(TextBox31.Value).Resize(, 6) = Array(ComboBox1, TextBox1, TextBox2, TextBox3, ComboBox2, TextBox4, TextBox5, TextBox6)

Maar je raadt het al.... het werkt niet.
 
Laatst bewerkt:
Dan was het geworden in mijn vorig schrijven:
c.resize(,6) = array(.......

Maar zoals je wilt.
Cells(textbox31.value,1).resize(,6) = array(......
 
Laatst bewerkt:
moet het niet zijn ?
Cells(textbox31.value,1).resize(,6) = array(......

In jou array heb je 8 elementen en je hebt een resize van 6 ??
 
Tuurlijk. :thumb:
 
Sorry pasan dank je moet resize 8 zijn.

Maar HSV of Pasan ( Mag ook).

Code:
Cells(textbox31.value,1).resize(,6) = array(......

kan ik dus gebruiken om de regel te herschrijven?
 
Heb je niet getest?
 
Verpak het dan wel in zoiets
Code:
it = Application.WorksheetFunction.Match(ComboBox1, Sheets("Debiteuren").Columns(1), 0)
if not iserror(it) then Textbox31.value = it
want als Match geen overeenkomst vind vlieg je eruit.
 
Zat ik toch aardig in de goede richting. :D

Rudi, dank je. Ja HSV ik had hem wel getest, maar schoot er dus uit. Volgens mij als ik nu zo kijk en ik de zaak heb aangepast met de code van Rudi erbij, gaat het wel goed. Ga hem zo verder testen.

Bedankt zover. Als het 100% werkt dan sluit ik het topic.
 
Laatst bewerkt:
Kom toch nog even terug.

Ik merk dat ik bij het wegschrijven naar het werkblad, ondanks dat de cellen daar op eigenschappen: financieel zijn ingesteld, geen Euroteken krijg. Ik heb dit bewust niet meegenomen in de Format, omdat ik anders de Euro tekens niet netjes onder elkaar krijg. Zodoende wil ik de eigenschappen van de cel zelf gebruiken. Echter dit werkt niet. De waarden worden kennelijk weggeschreven als zijnde tekst.

Kan ik dit oplossen met numberformat?

Code:
Private Sub ComboBox2_Change()

    Select Case ComboBox2
        Case Is = "Geen"
            TextBox4 = " 0,00"
        Case Else
            TextBox4 = Format(CDbl(TextBox3 * ComboBox2), " 0.00")
        End Select

End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    TextBox2 = Format(TextBox2, " 0.00")
    If TextBox3 <> vbNullString Then TextBox3 = Format(CDbl(TextBox1 * TextBox2), " 0.00")
    ComboBox2.SetFocus
    
End Sub

Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    TextBox2 = Format(TextBox2, " 0.00")
    TextBox3 = Format(CDbl(TextBox1 * TextBox2), " 0.00")
    ComboBox2.SetFocus
    
End Sub

Met deze code reken ik de cellen uit en maak ik de format voor in de textboxen.

Zodra ik dan wegschrijf naar het tabblad dan worden alle cellen exact zo gevuld als in de textboxen. Eigenschappen: Financieel werkt nu dus niet. Wel als ik de boel converteer naar getal en dan weer omzet naar financieel. Dit doe ik dan handmatig en via het werkblad.
 
Had ik ook al geprobeerd. Werkt niet.

Wat ik wil bereiken is volgens afbeelding.

Nu worden de getallen opgeslagen als tekst. Vandaar dat de celeigenschappen niet werkt.

In jouw code wordt er vanuit VBA een euroteken voorgeplaatst en komen de bedragen niet zoals afbeelding netjes onder elkaar... euro teken links van cel en bedrag rechts van cel.

Voorbeeld.JPG
 
Wat ik me eigenlijk afvraag waarom je dit met 'Match' wilt doen.
Je wil iets veranderen in de gegevens, en zoekt het rijnummer die je opvraagt dmv een combobox.
Als je de combobox zo maakt dat het alleen de gegevens kan bevatten van het gezochte, is het niet zo moeilijk om de juiste rij te pakken, en vlieg je er ook niet uit.
Code:
msgbox combobox1.listindex + 1
 
HSV dat mag je vragen en wil ik best vertellen in het kort.

Ik had mijzelf net de V-LookUp aangeleerd in gebruik. Later vroeg ik hier op dit forum een kortere code voor dit. Toen kwam iemand eerst met .match. Dit ben ik mijzelf ook gaan aanleren en ben ik nog niet helemaal uit. In dat zelfde topic kwam iemand anders weer met listindex. Ik ben er nog niet aan toegekomen om dit toe te passen. Als ik dit allemaal door elkaar ga leren, dan zie ik door het bomen het bos al helemaal niet meer. Er komt dan zoveel informatie op mij af dat het gaat duizelen. Vandaar dat ik eerst het ene uitpluis, voordat ik met het andere begin. De combobox haalt enkel gegevens uit een lijst. Ik kan geen waarde invullen die er niet zijn. Als de eerste letter niet overeenkomt dan wordt de eerste letter van het daarop volgende item gebruikt die in wel in de lijst voorkomt. Dus als ik bij wijze van Berentse heb staan en ik zou de letter A intikken dan is de eerst mogelijkheid volgens lijst Berentse. Ik heb dat via Style en dan de 2e keuze in de eigenschappen gekozen. Style: 2- frmStyleDropDownList.

Ik ga nu enkel pas schakelen als er reden voor is. Ik vind via match de gegevens, het rijnummer en daarop verander ik de gegevens in diezelfde rij als dat nodig is. Bijvoorbeeld... factuur: Openstaand-----> Gesloten. Dit enige zou bijvoorbeeld dan veranderd moeten worden in de rij. De rest blijft dan gewoon voor wat het is. Zo kunnen er ook meer gegevens zijn die aangepast moeten worden. Bijvoorbeeld bij het aanpassen van klantgegevens.

Het is nu 1 lijst met allerlei codes die ik her en der ook moet gaan inpassen. Zodoende dat ik soms nog wel vooruit denk. Dit plaats ik allemaal in een test bestand en daarna zodra het werkt, ga ik het inpassen in het werkelijke programma.
 
Laatst bewerkt:
Nader inzien was de code van Rudi feitelijk dus niet eens nodig geweest. Ik heb hem er voor just in case, wel in de code laten staan en de apostrof weer verwijderd.

Maar voor wat betreft de instelling van celeigenschappen na het wegschrijven. De getallen in de textboxen met format: , " € 0.00" worden als tekst gekopieerd naar het werkblad. Vandaar dat de eigenschap: financieel met het € teken op het werkblad niet werkt. er komt ook op het werkblad bij de cel een ruitje te staan met een uitroepteken erin. Bij het erop klikken komt er een dropdownlist waarin staat dat de getallen als tekst zijn. Als ik dan wil converteren dan kan ik dat ook middels deze dropdownlist doen waarna ik dan vervolgens de eigenschap financieel wel kan uitvoeren. Dit stukje wil ik dus direct middels VBA laten gebeuren.

De numberformat als hoe ik hem heb gemaakt werkt niet op het blad, werkt niet in de macro voor het wegschrijven en ook niet na het wegschrijven.

Code:
    Range("C2:D9").Select
    Selection.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* ""-""??_);_(@_)"
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan