celwaarde wijzigen na wijziging

Status
Niet open voor verdere reacties.

beer58

Gebruiker
Lid geworden
23 sep 2009
Berichten
27
ik heb een macro om een klant op te zoeken,
dmv
Private Sub klant_naam_Change()
Dim myrange As Variant
Dim i As Long

Set myrange = Worksheets("Klantnieuw")
If klant_naam <> "" Then
With myrange.Range("A:Z")
Set c = .Find(klant_naam)
If Not c Is Nothing Then
nummer = myrange.Range("A" & c.Row)
Naam_oud = myrange.Range("B" & c.Row)
Voornaam_oud = myrange.Range("C" & c.Row)


ik krijg dan netjes de gegevens te zien

Ik kan dan in de rechter kolom de gewijzigde gegevens vermelden.
Op het moment van dat ik op de knop gegevens opslaan, dan zou ik verwachten dat de oude gegevens vervangen worden indien er een wijziging plaat heeft gevonden.

dit door middel van onderstaande

Dim myrange As Variant
Dim i As Long
Set myrange = Worksheets("Klantnieuw")
If klant_naam <> "" Then
With myrange.Range("A:Z")
Set c = .Find(Naam_oud)
If Not c Is Nothing Then
If Voornaam_nw <> "" Then Range("C" & c.Row).Value = Voornaam_nw


maar er wordt niets gewijzigd
 

Bijlagen

  • Knipsel.JPG
    Knipsel.JPG
    36,4 KB · Weergaven: 28
En wat moeten wij met een plaatje? Of met code die niet in CODE tags staat? (Dat laatste is uiteraard minder 'fout', want nog steeds code)
 
Het rechter gedeelte van Voornaam = een tekstbox die ik kan invullen

Ik weet niet of dit het antwoord is wat u nodig heeft, anders begrijp ik uw antwoord niet, sorry
 
@AccessGuru bedoelt dus om een Excel-bestand te plaatsen incl. je code die niet werkt.

De meeste helpers laten vragen met een plaatje en een code die niet tussen
Code:
 codetags
staat links liggen.
 
Ik heb een bestand toegevoegd. als u naar wijzigen klant gaat, in visual basicklant wijzigen. komt u in het programma

Ik hoop dat u mij kunt helpen

Robert de Beer
 

Bijlagen

  • helpmij.xlsm
    480,1 KB · Weergaven: 11
Ik wil niet al te hard overkomen, maar je code barst van de fouten.
Veel syntaxfouten, wel eens "Foutopsporing", "VBA Project compileren" uitgevoerd?
Verwijzingen naar werkbladen die niet bestaan, forms die niet bestaan, een verwijzing naar een control die niet gebruikt wordt "Microsoft Windows Common Controls-2 6.0 (SP6)", veel opgenomen macro's waarin niets gebeurt, verwijzingen naar niet bestaande textboxen op forms, lege modules en zo kan ik nog wel even doorgaan.

Ik ben niet echt gemotiveerd om hier iets mee te ondernemen, sorry.
 
Het spijt mij ook,

Ik wilde eigenlijk het gehele bestand uploaden, maar dat is 11 mb. je kunt maximaal maar 2 mb uploaden.
Dus ik heb een groot aantal bladen verwijderd, zodat het bestand een stuk kleiner wordt. Hierdoor zullen een aantal macro;s niet meer werken.

Ik ga proberen om een excelsheet te maken waar alleen de klant en de macro voor deze gaat werken (hoop ik )

Misschien wilt u daar wel naar kijken.

Alvast bedankt.

Ik ga proberen de meldingen die u voorstelt in het originele bestand aan te passen
 

Bijlagen

  • wijzigen.xlsm
    38,4 KB · Weergaven: 8
De tientallen variabelen die je in Sub userform_Initialize declareert zijn alleen in die Subroutine bruikbaar, maar ze worden daar helemaal niet gebruikt.
Als je zo
Code:
Dim Achternaan_oud, Achternaam_nw As String
variabelen declareert dan is alleen Achternaam_nw een String, Achternaam_oud heeft geen type meegekregen en is dan automatisch een variant.
Beter dus
Code:
Dim Achternaan_oud as string, Achternaam_nw As String

En even later staat er Achternaam_oud = ""

Maar is je die tikfout in Achternaan_oud opgevallen? Option Explicit kan helpen die tikfouten te verhelpen.

Waarom zou je niet rechtstreeks de bestaande gegevens in je userform wijzigen in plaats van ingewikkeld te doen met oude- en nieuwe gegevens?

In gegevens_opslaan_Click ga je weer de klantnaam opzoeken, dat is niet nodig, want de klantgegevens worden in dezelfde rij opgeslagen als waar ze uit gehaald zijn. Het is dus voldoende om het rijnummer bij het ophalen te bewaren (zie hidden textbox txtRij) en bij het opslaan deze rij weer te gebruiken. Als de klantnaam gewijzigd wordt ga je die trouwens toch niet vinden.

In Sub gegevens_opslaan_Click moet je ongeveer het omgekeerde doen als bij het ophalen van de gegevens, ik heb een heel klein voorzetje gegeven.
Zie bij "etc." in de broncode waar je zelf nog e.e.a. moet toevoegen.

Controle op geldigheid van de gegevens en foutafhandeling zit er nog helemaal niet in.

Succes.
 

Bijlagen

  • klantwijzigen.xlsm
    45,8 KB · Weergaven: 12
Dat kan veel eenvoudiger.

Je hebt helemaal geen zoekfunctie nodig.

Zet de gehele range in de combobox.
Om de gegevens op te halen doe je dan met .columns(j).

Ga het wiel ook niet opnieuw uitvinden, er staan voorbeelden zat over de jaren heen dat ik hier rondhang.
 
Bijgaand een voorbeeld.
Zou het de goedkeuring van HSV kunnen wegdragen? ;-)
 

Bijlagen

  • klantwijzigen2.xlsm
    57 KB · Weergaven: 14
Ahulpje

Die van u werkt uitstekend. Ik wil de andere personen ook bedanken voor de hulp
 
Code:
            Application.EnableEvents = False
speelt geen rol in een Userform zonder interaktie met een werkblad.

Probeer via de struktuur van het Userform een loop te maken:

Code:
Private Sub cboKlantnaam_Change()
  With cboKlantnaam
    If .listindex>-1 Then 
      For Each it In Controls
        it = .Column(it.TabIndex)
      Next
    End If
  End With
End Sub
 
Laatst bewerkt:
@snb
Klopt, maar ik "misbruik" Application.EnableEvents in Function Update.


For Each loopje is best handig, maar dan moet nog gefilterd worden op alleen Textbox en Combobox en moet de juiste tabindex ingesteld worden, daar had ik geen zin in. En via Notepad++ is het heel snel geprogrammeerd.
En ach, er leiden vele wegen naar Rome, ik neem de toeristische...


Ben trouwens onder de indruk van je uitleg over Application.OnTime


https://www.snb-vba.eu/VBA_Application.OnTime.html
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan