VBA, 'gegevens weg schrijven' automatisch onder elke cel

Status
Niet open voor verdere reacties.

JasperVBA

Gebruiker
Lid geworden
17 apr 2015
Berichten
26
Beste mensen,

Waarschijnlijk is de vraag al eens eerder gesteld, maar na 3 dagen fulltime op het internet zoeken kan ik het nog niet vinden.
Het is heel simpel.
Ik heb een formulierenblad met object gegevens opgezet.
Als ik op knop gegevens verwerken en nieuw object klik dan moet VBA de gegevens naar bijv B30 C30 D30 E30 F30 weg schrijven.
Vervolgens moeten de gegevens ook worden verwijderd als ik op die knop klik (is mij al gelukt).
Dan worden de gegevens verwijderd en kan ik nieuwe gegevens invoeren maar dan met knop gegevens verwerken en nieuw object moet VBA de gegevens onder de cellen B30 C30 D30 E30 F30 weg schrijven. Dus naar B31 C31 D31 E31 F31
Wie kan me helpen.

Zie bijlage.
 

Bijlagen

  • x.jpg
    x.jpg
    65,4 KB · Weergaven: 121
Probeer het maar eens Jasper.

Code:
cells(rows.count,2).end(xlup).offset(1).resize(,5) = array(textbox1,textbox2,textbox3,textbox4,textbox5)
 
Dank je, het is gelukt! Super bedankt!

Topic kan op slot.

Mvgr. Jasper
 
Laatst bewerkt:
Graag gedaan.
Deze topic kan je in je openingspost als opgelost markeren Jasper.
Bvd.
 
Hallo,

Het is nog niet voor 100% goed.
Situatie komt 2 keer voor dat VBA de gegevens in 2 verschillende tabellen in excel moet weg schrijven.
Maar dan gaat het niet goed met het weg schrijven. VBA schrijft de gegevens weg in beide tabellen als ik in tab 2 of tab 3 sta.
Voor tab 2 is een tabel en voor tab 3 is een tabel
Zie bijgevoegde afbeeldingen.
 

Bijlagen

  • Situatie 1.jpg
    Situatie 1.jpg
    77,6 KB · Weergaven: 86
  • Situatie 2.png
    Situatie 2.png
    13,2 KB · Weergaven: 67
  • Overzicht.jpg
    Overzicht.jpg
    61,1 KB · Weergaven: 76
Hallo,

Voeg je Excel-bestand toe, plaatjes kunnen we niets mee Jasper.
 
Dit moet je verwijderen voor tab2.
Code:
Range("Invulgegevens!B39") = txtnaamobject.Value
Range("Invulgegevens!C39") = txtlengte.Value
Range("Invulgegevens!D39") = txtbreedte.Value
Range("Invulgegevens!E39") = txthoogte.Value

Dit moet je aanpassen in tab2.
Code:
Cells(42, 2).End(xlUp).Offset(1).Resize(, 4) = Array(txtnaamobject, txtlengte, txtbreedte, txthoogte)

Dit moet je verwijderen in tab3.
Code:
'Range("Invulgegevens!B48") = txt2naamobject.Value
'Range("Invulgegevens!C48") = txt2lengte.Value
'Range("Invulgegevens!D48") = txt2breedte.Value
'Range("Invulgegevens!E48") = txt2hoogte.Value
Dit moet je aanpassen in tab3.
Code:
Cells(Rows.Count, 2).End(xlUp).Offset(1).Resize(, 4) = Array(txt2naamobject, txt2lengte, txt2breedte, txt2hoogte)
 
Dankje voor de snelle reactie.

Ik heb het aangepast.
Krijg wel een foutmelding. (fout 1004 tijdens uitvoering)
Waarschijnlijk een klein foutje.

Andere vragen.
Hoe weet VBA dat hij in tabel 2 vanaf rij 29 moet beginnen?
En hetzelfde geldt in tabel 3 vanaf rij 48?

Zie bijlage.
 

Bijlagen

Het foutje komt doordat "End Sub" op de tweede regel staat, en niet onderaan de code.
Met andere woorden, de code staat eronder i.p.v. er tussen.

Rij 48 wordt bepaald door:
'Rows.count.end(xlup)' tel de rijen vanaf onderen naar boven tot de laatst gevulde in kolom B.
Code:
[COLOR=#FF0000]Cells(Rows.Count, 2).End(xlUp).[/COLOR][COLOR=#FF0000][/COLOR]Offset(1).Resize(, 4) = Array(txt2naamobject, txt2lengte, txt2breedte, txt2hoogte)

Rij 29 wordt bepaald door:
'Rows.count.end(xlup)' tel de rijen vanaf rij 42 naar boven tot de laatst gevulde cel in kolom B.
Code:
[CODE]Cells([COLOR=#FF0000]42,[/COLOR] 2).End(xlUp).Offset(1).Resize(, 4) = Array(txtnaamobject, txtlengte, txtbreedte, txthoogte)
 
Oké bedankt.

Met die rijen is mij nog niet helemaal duidelijk.
Stel ik wil beginnen in tabel 1 op rij 30 (met 5 regels extra ruimte die automatisch er onder worden gevuld))
En in tabel 2 op rij 36 beginnen (met 5 regels extra ruimte die automatisch er onder worden gevuld)
En nog eens in tabel 3 op rij 42 beginnen (met 5 regels extra ruimte die automatisch er onder worden gevuld)

Hoe ziet dan de code er uit voor elke situatie? (3 situaties totaal).
Als ik dit weet dan kan ik het wel terug beredeneren hoe het is opgebouwd.

Mvgr Jasper
 
Situatie 1:
Er moet wat staan in B29.
Code:
cells(34,2).end(xlup).offset(1)
= cel B30

Situatie 2:
Er moet wat staan in B35.
Code:
cells(41,2).end(xlup).offset(1)
= cel B36

Situatie 3:
Als laatst gevulde cel moet er wat staan in B41.
Code:
cells(rows.count,2).end(xlup).offset(1)
= cel B42
 
Harry,

Nog een aanvullende vraag.

In de cellen B30 t/m E30 en G30 t/m I30 wil de gegevens weg schrijven. Let op, in kolom F30 niet, dus een kolom overslaan.
Hoe ziet dan mijn programmeercode er uit?
Ik dacht aan onderstaande, maar dat werkt niet.
2 = beginnen in cel B30?
7 = beginnen in cel G30?

Cells(83, 2).End(xlUp).Offset(1).Resize(, 4) = (txtbox1, txtbox3, txtbox3, txtbox4)
Cells(83, 7).End(xlUp).Offset(1).Resize(, 3) = (txtbox5, txtbox6, txtbox7)
 
hallo Jasper,

Code:
Cells(83, 2).End(xlUp).Offset(1).Resize(, 8) = array(txtbox1, txtbox2, txtbox3, txtbox4, "",textbox5,textbox6,textbox7)
 
Harry,

De gegevens in kolom F30 moet wel blijven staan. Met de code "" wordt deze kolom F30 automatisch leeg, dit moet niet gebeuren...
 
Laatst bewerkt:
Harry,

De gegevens in kolom F30 moet wel blijven staan. Met de code "" wordt deze kolom F30 automatisch leeg, dit moet niet gebeuren...
 
Code:
Cells(83, 2).End(xlUp).Offset(1).Resize(, 8) = array(txtbox1, txtbox2, txtbox3, txtbox4, [COLOR=#FF0000]range("f30").value[/COLOR],textbox5,textbox6,textbox7)
anders voor het rode gedeelte:
Code:
 cells(83, 2).end(xlup).offset(1, 4).value
 
Is nog niet helemaal gelukt. Het moet namelijk gelden voor F54 t/m F63
Ik heb het bestand in de bijlage toegevoegd.

Maar ik blijf vervelend doen.
Als ik de gegevens vanuit tab2 in VBA weg schrijf naar excel dan moet kolom F en kolom K automatisch geupdate/gefresht worden, aan de hand van de gegevens die ik vanuit VBA naar excel schrijf.
In kolom F en K zitten namelijk wat als functies.
Nu gebeurt er niks, of ik krijg de meldingen #N/B
Wellicht dat jij hier nog een handige truc voor weet?
 

Bijlagen

Als het te vervelend wordt, merk je vanzelf als ik niet meer reageer. ;)

Er stonden wat foutjes in je code.
De array had negen elementen, jij wil er tien wegschrijven "resize(,10)", dan krijg je #N/B in de laatste cel.
De naam van het blad waar het naar toe moet worden geschreven stond er niet in.

Code:
With Sheets("Invulgegevens").Cells(63, 2).End(xlUp)
  .Offset(1).Resize(, 4) = Array(txt2naamobject, txt2lengte, txt2breedte, txt2hoogte)
  .Offset(1, 5).Resize(, 4) = Array(Aantalopvangertab32, Hoogteopvangertab33, JaenNeetab34, JaenNeetab35)
End With
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan