• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Schrijft weg naar verkeerd blad

Status
Niet open voor verdere reacties.

wieter

Terugkerende gebruiker
Lid geworden
26 jun 2009
Berichten
1.128
Hallo,
Op het usersform "zoeken" staat de knop wijzigen.
Ondanks de code
Code:
With sheets("Blad2")
worden de wijzigingen weggeschreven naar blad1
Kan iemand dit voor me oplossen?
mgv Wieter
 
Wieter, bij mij is er niets aan de hand. Via de knop "Invulformulier" verschijnt de Userform.

En de Userform invullen en Opslaan kiezen leidt er toe dat het ingevulde record keurig op blad 2 wordt toegevoegd.
 
Hallo Wieter,;)

Probeer het eens met deze code.
Code:
Private Sub CommandButton1_Click()
 Worksheets("Blad2").[A2:A1500].Find(What:=cb_Factuurnummer.Value, LookIn:=xlValues).Offset(, 1).Resize(, 7) = Split(tb_Crediteur.Text & "|" & Format(tb_Factuurdat.Text, "dd/mm/yyyy") & "|" & Format(tb_Vervaldat.Text, "dd/mm/yyyy") & "|" & tb_Bedragexcl.Text & "|" & tb_Bedragincl.Text & "|" & tb_Factuurstatus.Text & "|" & Format(tb_Betaaldat.Text, "dd/mm/yyyy"), "|")
 MsgBox ("Gegevens van Factuurnummer: " & cb_Factuurnummer & " zijn gewijzigd")
End Sub
Met vr gr
Jack
 
Laatst bewerkt:
Kan iemand dit voor me oplossen?
Ja hoor...:D
Het verschil zit 'm soms in een klein puntje. DAT moet je in dit geval héél letterlijk nemen. Zet voor elke 'Cells' in je blokje 'Private Sub CommandButton1_Click()' maar eens een punt. Dan worden ze namelijk wel gezien als onderdeel van je With...End With selectie. Doe je dit niet, dan zal 'cells' gewoon worden gezien als een object van het zichtbare (dus actieve) werkblad en dáár je gewijzigde data wegschrijven.

Groet, Leo
 
Bedankt Ginger.
Het zat hem in dat kleine puntje
Bedankt Jack voor de code, maar die "split" is nog boven mijn petje
MGV Wieter
 
Ben nog rap even terug.
Ginger het heeft toch niet aan dat puntje gelegen, de wijziging op blad2 wordt niet uitgevoerd.
Met de code van Jack lukt het perfect, maar ik snap heel dat "split"-gedoe niet
Nogmaals dank
 
het heeft toch niet aan dat puntje gelegen
Jawel, het lag WEL aan het puntje, maar je had nog iets kroms in je code!
Ken je de 'Step Into' functionaliteit in VBA? Hiermee kan je regel voor regel door je code lopen om te kijken wat er gebeurt. Dit is een belangrijke tool voor een programmeur om de zo op het eerste gezicht onverklaarbare 'fouten' te tackelen. Als je dus via de F8-toets of op het knopje op de werkbalk Debug door je code was gelopen - ná het aanpassen van de missende puntjes - had je gezien dat je iedere keer het Change_Event van je combobox aanroept. In dit codeblokje vraag je steeds de waardes op die staan weggeschreven op het 2e blad en plaats je die weer in je textboxen op je formulier. Daarom lukt het je nog wel om de 'crediteur' aan te passen (want pas dáárna worden de 'oude' waarden opgehaald) en lijkt het of je met de overige velden geen aanpassingen maakt.
Verander dus het change-event in zoiets Private Sub cb_Factuurnummer_AfterUpdate(). Dan gaat het wel.

Groet, Leo
 
Hey Leo,
Na het uitvoeren van je aanwijzingen, blijft de foutopsporing melden
"Geen uitvoerbare instructie" bij
Code:
Dim code As Range
??????????????
Groeten Wieter
 
wieter, Plaats je bestandje maar ff waar je mijn voorgestelde wijzigingen in hebt aangebracht. Ik kan die fout zo niet herleiden.

Groet, Leo
 
Leo, ik heb na het ingeven van je suggestie nog aan de code nog zitten prutsen, en ik weet ondertussen niet meer wat ik allemaal heb gewijzigd.
Bijgevoegd het bestandje zoals het nu is (wijzigen werkt nu helemaal niet meer)
Groeten Wieter
 
Voor het 'invulformulier' (een pleonasme ?) is deze code voldoende
Als je de naamgeving wat systematischer maakt kan choose(...) vervallen.

Code:
Private Sub btt_Annuleren_Click()
    Hide
End Sub

Private Sub CommandButton1_Click()
  With Sheets("Blad2").Cells(Rows.Count, 1).End(xlUp)
    For j = 1 To 8
      .Offset(1, j) = Me("TextBox" & j + Choose(j, 12, 0, 0, 0, 0, 0, 1, 3)).Text
      Me("TextBox" & j + Choose(j, 12, 0, 0, 0, 0, 0, 1, 3)).Text = ""
    Next
  End With
End Sub

Voor het zoekformulier is deze code voldoende
Code:
Private Sub Userform_Initialize()
  With Sheets("Blad2")
    cb_Factuurnummer.RowSource = .Name & "!" & .Cells(2, 1).CurrentRegion.Address
  End With
End Sub

Private Sub cb_Factuurnummer_Change()
  With cb_Factuurnummer
    tb_Crediteur.Text = .List(.ListIndex, 1)
    tb_Factuurdat = .List(.ListIndex, 2)
    tb_Vervaldat.Text = .List(.ListIndex, 3)
    tb_Bedragexcl.Text = .List(.ListIndex, 4)
    tb_Bedragincl.Text = .List(.ListIndex, 5)
    tb_Factuurstatus.Text = .List(.ListIndex, 6)
    tb_Betaaldat.Text = .List(.ListIndex, 7)
  End With
End Sub

Private Sub CommandButton1_Click()
  With Worksheets("Blad2").Range("A2:A1500").Find(cb_Factuurnummer.Value, LookIn:=xlValues, LookAt:=xlWhole)
    For j = 1 To 7
      .Offset(, j) = Me("Tb_" & Choose(j, "Crediteur", "Factuurdat", "Vervaldat", "Bedragexcl", "Bedragincl", "Factuurstatus", "Betaaldat")).Text
    Next
  End With
End Sub

Private Sub btt_Annuleren_Click()
  cb_Factuurnummer.ListIndex = -1
  Hide
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  btt_Annuleren = True
End Sub

Als je de naamgeving van de tekstvakken systematischer zou aanpakken zou de code korter kunnen (geen choose(....) e een lus in _change).
Het gebruik van MsgBox in een userform is absurd, omdat je in een userform allerlei objekten hebt waarmee je de gebruiker kunt informeren (Labels, caption van het userform, kleuren/grootte/zichtbaarheid van objekten.
Kijk ook eens naar de eenvoud van Query_close. Overigens gaat er niets mis als de gebruiker met het kruisje afsluit; dus deze aktie lijkt me overbodig.
Communiceer tijdens het gebruik van een userform zo min mogelijk met het werkblad.
Verdiep je nog eens in het laden van een combobox die een meerdimensionele arrray bevat.
 
Laatst bewerkt:
@snb. Bedankt voor de super code
Als ik "invulformulier" vervang door "vulformulier" Is ook dat pleonasme opgelost
Zowel mijn VBA-kennis als mijn taal-kennis is niet van topniveau
 
Hallo snb,
Ik heb je code eens geprobeerd
Het invulformulier schrijft niet in de juiste kolommen op Blad2
Het zoekformulier geeft bij "wijzigen" een fout
Je code is echter van zo'n hoog niveau, dat ik met m'n beperkte kennis .................
groeten Wieter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan