Is het mogelijk?

Status
Niet open voor verdere reacties.

Martijn Kist

Gebruiker
Lid geworden
3 jan 2010
Berichten
33
Hallo VBA liefhebbers,

Ik ben momenteel bezig met het opzetten van een sheet met vaste gegevens en heb daar al het nodige werk voor verricht.

Het gaat om een Excel "programma" waarin ik in eerste instantie op een form. gegevens invoer die dan onder een uniek nummer op een Excel datasheet geplaatst worden. Deze verwerkingen verlopen vlekkeloos.
Na het invoeren kan het wel eens voorkomen dat bepaalde gegevens veranderd en aangepast moeten worden, waarvoor ik een form. heb gemaakt. Op dit form. krijg ik de gegevens te zien die op dat moment aan het nummer gekoppeld zijn dat ingevoerd (opgezocht) is. So far so good!!
Nu wil ik het zo maken dat ik in dit formulier aanpassingen kan maken in de textboxen, die dan verwerkt worden op de lokatie van het unieke nummer door op een commandknop te drukken.

Ten eerste vroeg ik mij af of dit �berhaupt mogelijk is en ook wat voor code ik moet gebruiken!

De code moet eerst het unieke nummer opzoeken en daarna in de cellen er naast gegevens gaan vervangen.
Het formulier dat mij alle gegevens van het opgevraagde unieke nummer in textboxen laat zien bevat alle gegevens, dus het lijkt mij het makkelijkste om dan ook alle gegevens te vervangen die naast dat unieke nummer staan. Op die manier vermijdt je het vergelijken van de gegevens en houdt je gewoon de meest recente aanpassing.

Heeft iemand een idee, want ik heb dit leuks bedacht zonder te weten (wel een vermoeden) of het kan.

Alvast bedankt voor het meedenken.

Mvrgr Martijn
 
kijk even of je hier iets mee kunt. is uit de losse pols een zonder voorbeeld lastig aan te geven.

voor te zoeken en textboxen te vullen.
Code:
With Sheets("blad1").Range("A:A").SpecialCells(2)
Set c = .Find(textbox1.Value, XlLookAt:=xlWhole)
textbox2.Value = c.Offset(0, 1).Value
End With

voor gezochte een aangepaste info in juiste regel weg te schrijven
Code:
With Sheets("blad1").Range("A:A").SpecialCells(2)
Set c = .Find(textbox1.Value, XlLookAt:=xlWhole)
c.Value = textbox1.Value
c.Offset(0, 1).Value = textbox2.Value
End With

Kijk ander in help van VBA bij range.find

Niels
 
Alvast bedankt Niels. Ik ga het zo proberen. Als ik het zo lees lijkt het wel op iets dat ik kan gebruiken, Top!!

Ik begrijp het meeste van wat deze code moet doen, maar heb nog een vraag over het rood gekleurde gedeelte:
- Ik wil weten of als ik van ".Offset(0, 1)." de 1 verander in een 2, deze code dan de tweede cel rechts van de gevonden cel veranderd??

Code:
With Sheets("blad1").Range("A:A").SpecialCells(2)
Set c = .Find(textbox1.Value, XlLookAt:=xlWhole)
c.Value = textbox1.Value
[COLOR="#FF0000"]c.Offset(0, 1).Value = textbox2.Value[/COLOR]
End With

Alvast bedankt, weer.
 
Testen ............... en je zult er achter komen dat het antwoord ja is.

Niels
 
ik was er eigenlijk al een beetje van uit gegaan dat het zo was. De volgende code had ik ingetypt, maar geeft de volgende melding op de rode regel.

Melding:
Run-time error '448':
Named argument not found

Code:
Private Sub cmdaanpassing_Click()

With Workbooks("Tijdelijkeinstructie Randstad.xlsm").Worksheets("database instructies").Range("B:B").SpecialCells(2)
[COLOR="#FF0000"]Set c = .Find(txtinstructienummer.Value, XlLookAt:=xlWhole)[/COLOR]
c.Value = txtinstructienummer.Value
c.Offset(0, 1).Value = txtdatum.Value
c.Offset(0, 2).Value = txtnaam.Value
c.Offset(0, 3).Value = txtbetreft.Value
c.Offset(0, 4).Value = txtinstructie.Value
c.Offset(0, 5).Value = txt1.Value
c.Offset(0, 6).Value = txt2.Value
c.Offset(0, 7).Value = txt3.Value
c.Offset(0, 8).Value = txt4.Value
c.Offset(0, 9).Value = txt5.Value
c.Offset(0, 10).Value = txt6.Value
c.Offset(0, 11).Value = txt7.Value
c.Offset(0, 12).Value = txt8.Value
c.Offset(0, 13).Value = txt9.Value
c.Offset(0, 14).Value = txt10.Value

End With
End Sub

Ik begrijp dat de melding aangeeft dat het de waarde uit txtinstructienummer niet kan vinden, maar ik snap niet waarom niet. De waarde staat echt in de kolom ("B:B") waar het in moet zoeken.
Is het misschien omdat het de celinhoud niet ziet als value maar als text???

Mvrgr Martijn
 
Code:
Set c = .Find(txtinstructienummer.Value, lookAt:=xlWhole)


het onderste stuk van je macro kan mbv een loop

Code:
for i = 1 to 10
c.Offset(0, 4+i).Value = controls("txt" & i).Value
next

Niels
 
Laatst bewerkt:
Niels, je bent een VBA geweldenaar!!

Helemaal top, het werkt!!!! Dit is echt tof, dat VBA!!

Het mooie is dat ik voor een soortgelijk probleem in een ander "programmaatje" dit ook kan gebruiken.
Twee vliegen, 1 klap!! Nogmaals bedankt!!:d
 
Het kan zelfs in 1 schrijfbewerking.
Code:
Private Sub cmdaanpassing_Click()
Dim data(15)
With Workbooks("Tijdelijkeinstructie Randstad.xlsm").Worksheets("database instructies").Range("B:B").SpecialCells(2)
    Set c = .Find(txtinstructienummer.Value, , , xlWhole)
    data(0) = txtinstructienummer.Value
    data(1) = txtdatum.Value
    data(2) = txtnaam.Value
    data(3) = txtbetreft.Value
    data(4) = txtinstructie.Value
    For i = 5 To 14
        data(i) = Controls("txt" & i - 4).Value
    Next
    c.Resize(, 15) = data
End With
End Sub
 
Laatst bewerkt:
Kan dat niet simpeler ?
Code:
Private Sub cmd_aanpassing_Click()
  redim sn(15)
    
  for j=1 to 15
    sn(j)=Me("txt"& j).text
  next
  Workbooks("Tijdelijkeinstructie Randstad.xlsm").sheets("database instructies").columns(2).Find(txtinstructienummer.Value, , , xlWhole).Resize(, 15) = sn
End Sub

Het veronderstelt dat je alle relevante tekstvakken een volgordelijke naam geeft: 'txt1' t/m 'txt15'
Hoe beter je een userform en de naamgeving van de elementen in het userform structureert hoe eenvoudiger de code die je nodig hebt, hoe gemakkelijker te onderhouden of vaker te gebruiken.


PS. Voor alle toekomstige bezoekers van het forum is het handiger als de titel meer overeenkomt met de inhoud van de vraag.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan