• 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.

gegevens uit UserForm wegschrijven

Status
Niet open voor verdere reacties.

bowlingman

Gebruiker
Lid geworden
17 okt 2007
Berichten
433
Hallo Bollebozen,
Ik wil in mijn sheet "Leden" de gegevens van onze leden wegschrijven met een Userform.
Op de sheet heb ik de iDnrs. van de leden gezet in kolom A te startend vanaf rij 2 tot 151.
Op het Userform staat een combobox en 9 textboxen.
Met de volgende code probeer ik de gegevens weg te schrijven, maar om de een of andere reden gebeurd dit niet
Code:
Private Sub cboID_Change()
    On Error Resume Next
    Set oRng = Sheets("Leden").Cells.Find(what:=cboID.Value, lookat:=xlWhole)
        For i = 1 To 9
            Me("Textbox" & i).Value = oRng.Offset(0, i).Value
        Next
End Sub

Private Sub cmbSluiten_Click()
    Unload Me
End Sub

Private Sub cmbWegschrijven_Click()
Application.ScreenUpdating = False
    For Each c In Sheets("Leden").Range("A2:A151")
        If c.Value = cboID.Value Then
            For i = 1 To 9
                c.Offset(, 1) = Me("TextBox" & i).Text
            Next
        End If
    Next
cboID.Value = ""
Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Initialize()
    EndRow = Sheets("Leden").Cells(Rows.Count, 1).End(xlUp).Row
        Set oC = Sheets("Leden").Cells
            For r = 2 To EndRow
                If oC(r, 1).Value <> "" Then
                cboID.AddItem oC(r, 1).Value
                End If
            Next
End Sub
Er zal ergens wel een fout in staan, maar kan ze nergens vinden
Grtjs.
Armand
 
bowlingman,

Als je de zoekmachine van "Helpmij" had gebruikt was je dit wel tegengekomen.

Kijk eens hier.
 
Cel 'c.offset(,1)' zal steeds overschreven worden door 'Me("Textbox"& i)', en uiteindelijk de waarde krijgen van Textbox 9.
Code:
c.Offset(, 1) = Me("TextBox" & i).Text
Zou mijn inziens veranderd moeten worden in.
Code:
 c.Offset(,[COLOR="#FF0000"] i[/COLOR]) = Me("TextBox" & i).Text
 
Laatst bewerkt:
ExcelAmateur en Harry,
Bedankt voor jullie snelle reactie
Harry dit was dus het foutje waar ik blijkbaar bleef overzien.
Nu stuit ik echter op een ander probleem
De "iD's" van de leden (in kolom A) worden opgehaald in de combobox (lukt perfect), maar
Als ik in kolom A als "iD" een getal heb staan wordt er niets weggeschreven en als ik bij de "iD's" de getallen vervang door letters wordt alles wel netjes op zijn plaats weggeschreven.

@ExcelAmateur
De code die ik geplaatst heb, gebruikte ik reeds in een andere file van mij, maar had helaas bij het herschrijven ervan dat foutje gezet.

Grtjs.
Armand
 
Maak van:
Code:
 c.Offset(, i) = Me("TextBox" & i).[COLOR="#FF0000"]Text[/COLOR]
eens
Code:
c.Offset(, i) = Me("TextBox" & i).[COLOR="#FF0000"]value[/COLOR]
 
Doe je bestand er eens bij Armand.
Uiteraard zonder gevoelige info.
 
Hallo Harry,

Dit is mijn file.
Het opstarten gebeurd automatisch met het eerste UserForm (UserForm1), dit kan je gewoon afsluiten en dan kan je bij het tweede Userform ("Leden")

Grtjs.
Armand
Bekijk bijlage Test4.xlsm
 
Test dit eens.
Code:
Private Sub cmbWegschrijven_Click()
 Application.ScreenUpdating = False
    Set c = Columns(1).Find(cboID.Value, , xlValues, xlWhole)
       If Not c Is Nothing Then
            For i = 1 To 9
                c.Offset(, i) = Me("TextBox" & i).Text
            Next
        End If
   cboID.Value = ""
Application.ScreenUpdating = True
End Sub
 
Bedankt Harry,
Werkt perfect, maar heb toch nog een vraagje.
Als ik het goed begrijp "Set c = Columns(1).Find(cboID.Value, , xlValues, xlWhole)" zorgt ervoor dat de cboID gewoon geen rekening houd wat er in kolom "A" staat (een getal of een letter) en dat
"If Not c Is Nothing Then" gewoon kijkt of de achterliggende cellen leeg zijn.
Maar wat ik niet begrijp is dat er in gans de code voor het wegschrijven geen sheet wordt vermeld op de welke alles moet weggeschreven worden of gebeurd dit door de "Initialize"

Grtjs.
Armand
 
Sheets("Leden") was toevallig het active werkblad.
Beter is natuurlijk het blad benoemen.
Code:
Set c = Sheets("Leden").Columns(1).Find(cboID.Value, , xlValues, xlWhole)
Code:
If not c is nothing then
Als het gezochte niet wordt gevonden geeft Set c 'Nothing' als resultaat met een error als gevolg.
In jouw geval zou dat niet kunnen, want de combobox wordt gevoed door kolom 1.
Dus de regels
Code:
If not c is nothing then
en
Code:
end if
mag je verwijderen in de code.

Onderstaande code moet je ook even aanpassen.
Code:
Private Sub cboID_Change()
   'On Error Resume Next
    Set oRng = Sheets("Leden").Columns(1).Find(what:=cboID.Value, lookat:=xlWhole)
        For i = 1 To 9
            Me("TextBox" & i).Value = oRng.Offset(0, i).Value
        Next
End Sub

Om de Combobox te vullen is onderstaande code stukken sneller.
Code:
Private Sub UserForm_Initialize()
With Sheets("Leden")
     Endrow = .Cells(Rows.Count, 1).End(xlUp).Row
    cboID.List = .Range("A2:A" & Endrow).Value
  End With
End Sub
 
Laatst bewerkt:
Bedankt Harry voor het woordje uitleg, maar kan het zijn dat er in je code voor de cbo te vullen nog een foutje zit of iets ontbreekt want als ik die gebruik werkt deze alleen als de sheet "Leden" de actieve sheet is en met de code die ik gebruik speelt het geen rol welke sheet actief is (de sheet "Leden" mag zelfs verborgen zijn) voor de rest werkt alles perfect.

Grtjs.
Armand
 
bowlingman,

Kijk of je hier wat mee kunt, is van snb
Code:
Private Sub Userform_initialize()
  ComboBox1.List = Sheets("Blad1").Columns(1).SpecialCells(2).Value
End Sub
 
Bedankt Harry voor het woordje uitleg, maar kan het zijn dat er in je code voor de cbo te vullen nog een foutje zit of iets ontbreekt want als ik die gebruik werkt deze alleen als de sheet "Leden" de actieve sheet is en met de code die ik gebruik speelt het geen rol welke sheet actief is (de sheet "Leden" mag zelfs verborgen zijn) voor de rest werkt alles perfect.

Grtjs.
Armand
Aangepast in vorig bericht.
 
Bedankt Harry en ExcelAmateur.

Alles werkt nu perfect. Jullie zijn gewoon super.
Kan nu verder proberen om mijn file nog uit te breiden, zo blijven we bezig hé en leren we steeds wat meer bij. Oefening baart kunst.
Zal de vraag opgelost zetten en uiteraard kijk ik ook nog regelmatig mee op het forum of ik eventueel ook antwoorden kan geven op vragen van andere gebruikers.

Grtjs.
Armand
 
Oeps toch nog een vraagje,

Voor wat staat "SpecialCells" en hoe kan ik ervoor zorgen dat in de cbo de eerste rij niet verschijnt, want dat zijn de benamingen van de gegevens ("iD, Naam, Voornaam, enz......")
Nu verschijnt in de cbo dus ID, 1, 2, 3, 4, enz...... en eigenlijk zou "ID" daar niet moeten instaan.

Grtjs.
Armand
 
Code:
Columns(1).Specialcells(2)
staat voor
Code:
Columns(1).SpecialCells(xlCellTypeConstants)
Alle niet lege cellen worden opgenomen van kolom1; incl. A1 dus.
Vandaar mijn aanpassing om A1 niet mee te nemen in de Combobox.
 
Hallo Harry,
Toch nog even reageren.
Ik heb de code aangepast zoals je meld, maar de cel A1 wordt nog steeds mee in de combobox genomen.

Grtjs.
Armand
 
Bedoel je deze code Armand?
Code:
Private Sub UserForm_Initialize()
With Sheets("Leden")
     Endrow = .Cells(Rows.Count, 1).End(xlUp).Row
    cboID.List = .Range("A2:A" & Endrow).Value
  End With
End Sub
Dan zal cel A1 de enige gevulde cel moeten zijn in kolom A.
 
Nee Harry,
Ik bedoel de laatste code die je gewijzigd hebt.
Code:
Columns(1).Specialcells(2)
in
Code:
Columns(1).SpecialCells(xlCellTypeConstants)

Momenteel is de volledige dus :
Code:
Private Sub cboID_Change()
    Set oRng = Sheets("Leden").Columns(1).Find(what:=cboID.Value, lookat:=xlWhole)
        For i = 1 To 9
            Me("TextBox" & i).Value = oRng.Offset(0, i).Value
        Next
End Sub

Private Sub cmbSluiten_Click()
    Unload Me
End Sub

Private Sub cmbWegschrijven_Click()
Application.ScreenUpdating = False
    Set c = Sheets("Leden").Columns(1).Find(cboID.Value, , xlValues, xlWhole)
            For i = 1 To 9
                c.Offset(, i) = Me("TextBox" & i).Text
            Next
cboID.Value = ""
Application.ScreenUpdating = True
End Sub

Private Sub Userform_initialize()
  cboID.List = Sheets("Leden").Columns(1).SpecialCells(xlCellTypeConstants).Value
End Sub

Grtjs.
Armand
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan