Teks via invoerscherm plaatsen in tabel in andere sheet.

Status
Niet open voor verdere reacties.

gib58

Gebruiker
Lid geworden
12 okt 2015
Berichten
12
Hallo,

Als ik tekst invoer met het invoerscherm dan plaatst hij deze op de sheet zelf. Bovendien wordt dan de tekst telkens overschreven.
De tekst moet eigenlijk in de tabel op de volgende sheet komen en ook niet overschrijven maar telkens een regel daar onder plaatsen.
Ben al een tijdje bezig om dit voor elkaar te krijgen en weet dat het met Offset (1) kan maar wie weet hoe dit moet?
Ik heb het bestandje bijgevoegd.

Alvast bedankt,

Gr. Gib58
 

Bijlagen

  • Adresgegevens.xlsm
    27,6 KB · Weergaven: 45
Code:
Private Sub cmdOK_Click()
    If txtNaam = "" Then
        MsgBox "Je moet je naam invoeren.", vbExclamation
        txtNaam.SetFocus
        GoTo Naam
    End If
   
Dim LastRow As Long, ws As Worksheet

Set ws = ThisWorkbook.Sheets("tbladresgegevens")
    
    
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1

    ws.Range("A" & LastRow).Value = txtNaam
    ws.Range("B" & LastRow).Value = txtAdres
    ws.Range("c" & LastRow).Value = txtPostcode
    ws.Range("d" & LastRow).Value = txtWoonplaats
    
    
   

    Unload Me
    
Naam:
End Sub
 
Code:
Private Sub cmdOK_Click()
    If txtNaam = "" Then
        MsgBox "Je moet je naam invoeren.", vbExclamation
        txtNaam.SetFocus
        Exit Sub
    End If
    Sheets("tbladresgegevens").ListObjects(1).ListRows.Add.Range.Value = Array(txtNaam, txtAdres, txtPostcode, txtWoonplaats)
   Unload Me
End Sub
 
Die is lekker kort Harry. Die ga ik ook gebruiken.

Is ie ook gelijk van de Goto Naam af.
 
@Harry,
Ik heb de gepubliceerde code uitgeprobeerd op een eigen project en wanneer ik de gegevenslijst wis, wordt een nieuwe dataregel weggeschreven onder de rij waar de gewiste lijst stopte. Enige verklaring voor dit verschijnsel? Hoe realiseer je het afwisselend inkleuren van een nieuwe dataregel?
 
Het wissen van een rij van een tabel <> het verwijderen van een rij van een tabel.
 
Het is een verschijnsel die ook nog niet had opgemerkt.
Als een listobject helemaal geen gegevens bevat dan heb je standaard de headerrowrange en een lege rij.
Als je de code laat lopen in een ander blad dan de activesheet, maakt het inderdaad een nieuwe lege regel aan.
De eerste rij is dus leeg en de gegevens staan in een nieuwe rij.

Doe ik dit met F8 in het activesheet, dan komen de gegevens in de eerste rij en de daaropvolgende eronder (vreemd).

Dus dan maar even zo tot ik iets beters kan verzinnen.
Hiermee maak ik het werkblad actief waar de listobject staat.
Code:
Private Sub cmdOK_Click()
    If txtNaam = "" Then
        MsgBox "Je moet je naam invoeren.", vbExclamation
        txtNaam.SetFocus
        Exit Sub
    End If
With Sheets("tbladresgegevens")
[COLOR=#0000ff] .Activate[/COLOR]
 .ListObjects(1).ListRows.Add.Range.Value = Array(txtNaam, txtAdres, txtPostcode, txtWoonplaats)
End With
   Unload Me
End Sub
 
het kan met

Code:
Sheets("tbladresgegevens").cells(rows.count,1).end(xlup).offset(1).resize(,4)=Array(txtNaam, txtAdres, txtPostcode, txtWoonplaats)
 
Mooi dat jij er ook eens naar wilt kijken @snb.

Heb je het vreemde verschijnsel opgemerkt?
Uiteraard kan het met de door jouw aangegeven methode, maar ik wilde eens kijken waarom dit zo gaat als dat het gaat in de listobject en de activesheet of niet activesheet.

Een listobject kan namelijk overal staan en dan is de code niet afhankelijk van een bepaalde kolom.

Wat ik vreemd vind is dat als ik een headerrowrange heb en een lege regel.
Dan is listrows.count = 0

Ik vul het met de array, de gegevens komen in de eerste rij.
Maak ik de regel leeg, dan is listrows.count = 1 bij de volgende uitvoering, en wordt een nieuwe regel gemaakt en de gegevens komen op de tweede rij.
Maak ik ze beiden weer leeg en maak de tabel kleiner met het pijltje in de rechterbenedenhoek, dan is listrowscount weer nul.

Als ik er tijd voor vind zal ik er nog eens naar kijken.

Edit; Ik heb het al gevonden.
Je moet de lege regel als er maar een regel is verwijderen met de rechtermuisknop.
Dan is Listrows.count weer nul, en hoef je het werkblad ook niet actief maken voor het wegschrijven van de gegevens.

Nu nog omzetten in code misschien.
 
Laatst bewerkt:
Zo kan het onafhankelijk van de plaats van de tabel:

Code:
Sub M_snb()
  Sheet2.ListObjects(1).DataBodyRange.Cells(1).End(xlDown).Offset(1).Resize(, 4) = Array(1, 2, 3, 4)
End Sub

of met:

Code:
Sub M_snb()
  With Sheet2.ListObjects(1).DataBodyRange
      .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(, 4) = Array(1, 2, 3, 4)
  End With
End Sub
 
Laatst bewerkt:
Beste,

Weer bijgeleerd, dankzij jullie vba-expertise. Ik sta versteld over jullie kennis. Twee vraagjes: hoelang programmeren jullie al en zijn jullie daar proffesioneel mee bezig?
 
@snb, Helaas werkt de eerste hier niet (fout 1004), en de tweede code overschrijft steeds de eerste rij.

Ik ben er inmiddels achter.
Bij een nieuwe tabel gaat alles goed, en dan komt jouw antwoord uit #6 wil je opnieuw beginnen om wat voor redenen.
Rechtermuisknop tabelrijen verwijderen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan