Gegevens UserForm wegschrijven naar Specifieke Worksheet

  • Onderwerp starter Onderwerp starter MD29
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

MD29

Gebruiker
Lid geworden
7 nov 2012
Berichten
6
Hallo,

Het lukt me om de gegevens weg te schrijven naar de eerste lege rij. Ik blij.
Helaas blijkt de verwijzing naar de specifieke worksheet niet goed te gaan.

De gegevens ingegeven in UserForm komen altijd op de sheet waarop ook de commandbutton staat waarmee het userform in eerste instantie opgeroepen wordt.

Code:
Private Sub CBToevoegen_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("OutputForm")
iRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row

Help! Wat doe ik fout?

Uiteindelijk wil ik ook een 2e form maken om de gegevens die de eerste keer zijn ingevoerd te kunnen wijzigen. Het lukt om bij het openen van een userform de reeds bekende gegevens in te vullen in het UF vanuit de worksheet. (althans de textboxes, met de listboxes en optionbuttons moet ik nog even stoeien).
UserForm opent (show) dan na het aanklikken van een specifieke cel van de rij waarin de gegevens staan. De code is dus ook redelijk recht toe recht aan.

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    
    If (Target.Column = 6) And (ActiveSheet.Name = "Blad1") Then
        UserForm1.Show
    End If
    
End Sub

Het liefst zou ik een listbox maken met unieke nummers waarbij op basis van het gekozen nummer de overige date wordt ingevuld in het UserForm.
Dus eigenlijk een soort van Lookup functie. Kan dit? & Hoe dan? Ik heb me een slag in de rondte gezocht naar specifieke voorbeelden maar heb het niet gevonden.
En dan laat het laatste zich al raden. De aangepaste gegevens wil ik over de oorspronkelijk ingevoerde gegevens heen plaatsen. De verwijzing naar het specifieke worksheet (zie 1e alinea) lukt me al niet. Laat staan een verwijzing naar een specifieke rij op deze sheet waarbij het unieke nummer het gegeven is om de juiste rij te selecteren.

Alvast ontzettend bedankt.
 
Laatst bewerkt door een moderator:
Wat doe je fout?
Is niks over te zeggen want je geeft je macro niet waarin staat dat je de info wegschrijft. maar ik zou het zo doen.

Code:
Private Sub CBToevoegen_Click()
Dim iRow As Long
With Worksheets("outputform")
 iRow = .Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
 .Cells(iRow, 2).Value = "x"
End With
End Sub

Bijgaande een simpel voorbeeldje met een userform, graag volgende keer een voorbeeld bestandje er bij plaatsen dan hoef ik het niet te maken.

zoek een nummer op en verander de waarde in de textbox en druk op de knop.

Bekijk bijlage zoeken MD29 .xlsm

PS macro codes tussen de codetags plaatsen (# , boven in beeld)

Niels
 
Niels bedankt voor het stukje code en je werk om een voorbeeldje te maken en excuus dat ik de code niet goed geplaatst had. (ik had vierkante oogjes gisteravond)

Het werkt deels. Nou ja het werkt goed voor wat ik vroeg, maar het reageert anders dan dat ik hoopte op data uit optionbutton en checkboxes. Ik had verwacht dat dit niet zo moeilijk zou zijn wanneer de verwijzing er eenmaal in zat. De gegevens die in de Textboxes en listboxes worden geplaatst komen op de juiste worksheet maar de optionbuttons en checkboxes (hier had ik inderdaad niks over gezegd) die alleen onder bepaalde voorwaarde getoond worden (If) komen op de sheet waarop het laatst een handeling is verricht. Bijvoorbeeld die waarop de actionbutton naar het form staat.
Ik hoop dat de oplossing simpel is

Helaas zit ik momenteel op het werk. Hier draait 2003 en alles is dichtgetimmerd qua het installeren van compatibilitypacks etc. Kortom. krijg het bestand niet geopend.
Ik ben benieuwd wat je gestuurd hebt.

Ik ben op zoek naar iets eenvoudigs.

snb ook jij bedankt voor de hulp. Erg interessante link maar ik merk dat ik niet goed snap wat er staat. Ik heb liever iets meer code staan maar wat vrij recht toe recht aan is zodat ik snap wat ik heb gedaan dan dat het 'gevoelsmatig' zo gecomprimeerd is.

Ook is dat wat het doet niet precies wat ik zoek.

Ik heb het bestandje bijgevoegd. het is een bestand met 'onzin'data maar de bedoeling is hetzelfde.

Er komt een set data uit een query (externe bron). De eerste kolom bevat unieke nummers. Ik heb deze kolom een naam gegeven met dynamisch bereik middels verschuiving. Zo zijn alle nummers ook in de listbox te selecteren maar een combobox is niet nodig want het zelf toevoegen van een unieknummer is niet nodig en moet ook niet mogelijk zijn.

Ik wil dat de selectie van een nummer in het formulier de gebruiker direct voorziet van informatie die al in een eerder stadium toegevoegd is. Het gaat dus niet om de informatie die ook uit de query komt maar alleen de eerder handmatig ingevoerde informatie. Deze informatie/kolommen die overeenkomen met de velden op het formulier staan op worksheet "Toevoeging_Userform". Dit dus het tabblad dat gevuld dient te worden, en waar de aanpassingen oude data moeten overschrijven.

Ik wil de beide worksheets bewust gescheiden houden.

Mogelijk Niels staat het dus al in het voorbeeld dat je gestuurd hebt maar wat ik niet kan openen. Wat is nu de eenvoudigste manier om het formulier de juiste informatie uit de velden op te laten halen en is het dan ook nog mogelijk om de Optionbuttons en Listbox vinkjes te plaatsen met de waarden die eerder gegeven zijn?

[overigens waren de namen van de sheets van mn eerste bericht/vraag anders. ik heb besloten opnieuw te starten in een test bestand zodat ik eerst wat kan prutsen en het dan toepassen in het originele doc. Vandaar geen outputform meer.]
 

Bijlagen

Laatst bewerkt:
Ik wacht even af tot je het bestand hebt bekeken.
voor de juiste bladen kijk naar de opbouw van de macro die ik heb gegeven,
het stukje with sheets("blabla") geeft aan op welk blad,
door en . (punt) voor range te zetten (dus .rang("A1"))
geef je aan dat het op blad "blabla" weggeschreven moet worden.

Niels
 
Ja, dat is wat ik bedoel. En ik snap ook wat er staat (i.t.t. het mooie voorbeeld dat ik vanochtend ook kreeg toegestuurd op mn vraag).
Morgen ga ik er verder mee. Is er vooraf (vist naar een tip ;)) nog een let op voor deze manier van data ophalen voor checkboxes en optionbuttons?

Is er overigens een reden specifiek waarom het een combobox is ipv een listbox?
Heb altijd begrepen dat het verschil het kunnen toevoegen van nieuwe waarden is of is er ook een verschil bij gebruik zoals dit?

Dat stukje code is trouwens ook gelukt.
Had eerst geprobeerd de volgorde om te draaien en een . voor If te plaatsen maar dan haakt ie natuurlijk af bij het eerst volgende commando. Ook had ik geprobeerd de functie andersom te redeneren... maar het werkt heel simpel gewoon door het voor cell te zetten zonder de rest aan te passen middenin de regel. Dat had ik niet verwacht. En ook niet geprobeerd. :o

Wederom bedankt.
 
De optionbuttons zou ik op de volgende manier inlezen:

Code:
With Sheets("Toevoeging_Userform")
If UCase(.Cells(iRow, 3).Value) = "JA" Or UCase(.Cells(iRow, 3).Value) = "NEE" Or UCase(.Cells(iRow, 3).Value) = "ONBEKEND" Then
Me("optionbutton_" & .Cells(iRow, 3).Value) = True
end if 
end with
End If

Checkboxen moet je 1 voor een controleren omdat er meerdere aangevinkt kunnen zijn.
Het makkelijkste is als je dan een 1 of 0 in de cel hebt staan. dan kan het met bv:

Code:
With Sheets("Toevoeging_Userform")
Me.CheckBox_Bezoek = .Cells(iRow, 5).Value
Me.CheckBox_Mail = .Cells(iRow, 6).Value
Me.CheckBox_Telefoon = .Cells(iRow, 7).Value
End With


Het verschil tussen listbox en combobox is dat de LB een lijst weergeeft en de CB maar 1 regel.
Bij een LB heb je geen invulveld , bij een CB wel.
Ik werk zelf meestal met een CB omdat ik dat makkelijker vind en neem minder ruimte in beslag op het userform.
Bij een CB kun je de invoer blokkeren, dat doe je door de style te veranderen in de eigenschappen.
Deze zet je dan op 2-fmstyledropdownlist

Niels
 
aaarghh

Niels, wederom bedankt voor je hulp maar het lukt me niet om het werkend te krijgen.

Bij het controleren van de macro achter het userform volgt de ene fout na de andere.
Los van elkaar doen de ophaal en wegschrijf onderdelen het wel maar het samenvoegen wordt niet begrepen.

Kan iemand me nog 1x helpen?

Code:
Private Sub ComboBox_Sleutel_Change()
If ComboBox_Sleutel.ListIndex = -1 Then Exit Sub
With Sheets("Informatie")
Set r = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp)).Find(ComboBox_Sleutel.Value)
TextBox_Toevoeging.Value = .Cells(r.Row, 2)
TextBox_Dossier.Value = .Cells(r.Row, 3)
TextBox_Team.Value = .Cells(r.Row, 4)
ComboBox_Object.Value = .Cells(r.Row, 5)
ComboBox_Subgroep.Value = .Cells(r.Row, 6)
TextBox_Naam.Value = .Cells(r.Row, 7)
TextBox_Benadeelde.Value = .Cells(r.Row, 8)
ComboBox_Poging.Value = .Cells(r.Row, 9)
TextBox_Maand.Value = .Cells(r.Row, 10)
TextBox_Jaar.Value = .Cells(r.Row, 11)
ComboBox_Opgelost.Value = .Cells(r.Row, 12)
TextBox_Cluster.Value = .Cells(r.Row, 13)
Me.CheckBox_Keuze1 = .Cells(r.Row, 14)
Me.CheckBox_Keuze2 = .Cells(r.Row, 15)
Me.CheckBox_Keuze3 = .Cells(r.Row, 16)
ComboBox_Categorie.Value = .Cells(r.Row, 17)
ComboBox_Regionaal.Value = .Cells(r.Row, 18)
TextBox_Samenvatting.Value = .Cells(r.Row, 19)
TextBox_Bijzonderheden.Value = .Cells(r.Row, 20)
End With

End Sub


Private Sub CommandButton_Cancel_Click()
Hide
End Sub

Private Sub CommandButton_Veredelen_Click()
If ComboBox_Sleutel.ListIndex = -1 Then Exit Sub
Set r = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp)).Find(ComboBox_Sleutel.Value)
.Cells(r.Row, 2) = TextBox_Toevoeging.Value
.Cells(r.Row, 3) = TextBox_Dossier.Value
.Cells(r.Row, 4) = TextBox_Team.Value
.Cells(r.Row, 5) = ComboBox_Object.Value
.Cells(r.Row, 6) = ComboBox_Subgroep.Value
.Cells(r.Row, 7) = TextBox_Naam.Value
.Cells(r.Row, 8) = TextBox_Benadeelde.Value
.Cells(r.Row, 9) = ComboBox_Poging.Value
.Cells(r.Row, 10) = TextBox_Maand.Value
.Cells(r.Row, 11) = TextBox_Jaar.Value
.Cells(r.Row, 12) = ComboBox_Opgelost.Value
.Cells(r.Row, 13) = TextBox_Cluster.Value

If CheckBox_Keuze1.Value = True Then .Cells(r.Row, 14).Value = 1
If CheckBox_Keuze1.Value = False Then .Cells(r.Row, 14).Value = 0
If CheckBox_Keuze2.Value = True Then .Cells(r.Row, 15).Value = 1
If CheckBox_Keuze2.Value = False Then .Cells(r.Row, 15).Value = 0
If CheckBox_Keuze3.Value = True Then .Cells(r.Row, 16).Value = 1
If CheckBox_Keuze3.Value = False Then .Cells(r.Row, 16).Value = 0

.Cells(r.Row, 17) = ComboBox_Categorie.Value
.Cells(r.Row, 18) = ComboBox_Regionaal.Value
.Cells(r.Row, 19) = TextBox_Samenvatting.Value
.Cells(r.Row, 20) = TextBox_Bijzonderheden.Value
End With

End Sub

Private Sub UserForm_Initialize()
With Sheets("Lijsten")
ComboBox_Sleutel.List = .Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp)).Value
End With
End Sub
Bekijk bijlage testbestand.xls
 
Laatst bewerkt:
Wederom bedankt. (wat slordig van mij)
Heb je opmerkingen gelezen en 'de inhoud' opgeschoond. Ook de definiering van de namen gecheckt en die van de comboboxen.
Maar het werkt niet...
Krijg Fout 380. Kan de eigenschap Value niet instellen. Verwijzend naar de eerste op te halen combobox

Kan het zijn dat het niet werkt omdat de kolomheader niet in de lijst van de combobox voorkomt? Heb al geprobeerd de range vanaf A2 te laten starten maar dit haalt de foutmelding niet weg (de lijst met nr's in de eerste combobox laat nu wel alleen de nr's zien en niet de kolomheader.)

Of kan het zijn dat .Value niet een juiste manier is om te vragen de waarde van de ComboBox te tonen.

Heb ook al geprobeerd de lijsten achter de comboboxen (gedef met namen) uit te breiden met een lege waarde. Immers de lege waarde wordt wel gevonden door de macro maar kwam niet voor in de lijst. Dit lost het ook niet op.
 
Laatst bewerkt:
Kijk in mijn voorbeeld, daar werkt het wel,
Je moet zorgen dat de waardes voorkomen in de lijst van de combobox.
De fout 380 geeft aan dat je de combobox een waarde wilt geven die niet in de lijst voorkomt.

Een leeg waarde toevoegen werkt ook voeg maar eens een lege regel in rij 3 in op blad lijsten in mijn voorbeeld.

PS ik zag dat je bij de veredelen macro with sheets("blablabla") bent vergeten.

Niels
 
Laatst bewerkt:
Die lege rij werkte ook nog niet. Maar in combinatie met onderstaande wel.

Code:
If .Cells(r.Row, 5) = "" Then ComboBox_Object.Value = "" Else ComboBox_Object.Value = .Cells(r.Row, 5)

Ik ga nog even kijken naar het blablabla... :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan