[vbs+excel] nieuwe rij invoegen op bepaalde manier

Pagina: 1
Acties:
  • 153 views sinds 30-01-2008
  • Reageer

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Stel ik heb 2 bladen: blad1 en blad2 op blad1 bevind zich een cel bijv C5 Nu wil ik dat als ik op een knop druk op blad1 dat de waarde van C5 in blad2 komt te staan in cel D5 Als ik nu weer naar blad1 ga en ik verander het getal in C5 in een ander getal en ik druk weer op die knop op blad1 dan moet het nieuwe getal in C5 onder het getal in D5 komen. Dus op D6. Hoe kan ik dit in een macro maken?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 10:01

gorgi_19

Kruimeltjes zijn weer op :9

Je hebt toch een makro recorder? :?

Verder denk ik dat je meer zoekresultaten krijg in Google als je gaat zoeken op VBA in plaats van VBS.

[ Voor 66% gewijzigd door gorgi_19 op 25-01-2004 21:12 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Ja okee, maar die gaat niet 1 naar onder.. ik doe nu dit:

Sub Macro1()
Sheets("Blad2").Select
Range("C5:F5").Select
Selection.Copy
Range("C6:F6").Select
ActiveSheet.Paste
End Sub

Alleen nublijft hij in dezelfde cellen en hij moet dus 1 naar onder gaan en dat lukt niet! Waar moet ik opzoeken dan: add row of add cell of ?? Ik kan echt niks vinden.

[ Voor 17% gewijzigd door RSD op 25-01-2004 21:14 ]


  • Pink Panther
  • Registratie: Juni 2003
  • Laatst online: 23-05 23:18
Probeer onderstaande macro eens (hiervoor moet wel in sheet2 iets in cell C5 staan....

Sub test()
Sheets(1).Range("C5:F5").Copy Sheets(2).Range("C5").End(xlDown).Offset(1, 0)
End Sub

Nog even een kleine toevoeging.
Deze macro zal uiteindelijk na een kleine 65530 toevoegingen een fout melding genereren daar je dan de maximale row bereikt hebt. Maarja, 65000+ toevoegingen zijn er heel wat :)

[ Voor 41% gewijzigd door Pink Panther op 25-01-2004 21:42 ]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hmm, maar hij doet het niet, er staat : verwzcht: = als error.. ik dacht dus iets van

Sub Opslaan()


Sheets("Blad2").Select
Range("C5:F5").Select
Selection.Copy
Range("C5").End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste


End Sub

Maar die doet het ook niet

  • Pink Panther
  • Registratie: Juni 2003
  • Laatst online: 23-05 23:18
Sorry, ik had inderdaad een klein foutje erin.
Moet zijn:

Sub test()
Sheets(1).Range("C5:F5").Copy Sheets(2).Range("C3").End(xlDown).Offset(1, 0)
End Sub

Let wel, in cell C3 als in cell C4 op blad 2 MOET iets staan anders krijg je een foutmelding.

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hmm.. nu doet hij het wel, maar nu paste hij de formules, het moeten eigenlijk de waardes zijn van die cellen .. iemand een idee?

Waarom staat die spatie er eigenlijk tussen en niet gewoon een enter?

[ Voor 22% gewijzigd door RSD op 25-01-2004 22:31 ]


  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

Vraag:
RSD schreef op 25 januari 2004 @ 22:29:
Waarom staat die spatie er eigenlijk tussen en niet gewoon een enter?
Antwoord:
Copy method as it applies to the Range object.

Copies the range to the specified range or to the Clipboard.

expression.Copy(Destination)

expression Required. An expression that returns a Range object.

Destination Optional Variant. Specifies the new range to which the specified range will be copied. If this argument is omitted, Microsoft Excel copies the range to the Clipboard.

Bron: [Excel 2002 EN VBA online help]
Met andere woorden: als je met VBA werkt, is het absoluut noodzakelijk dat je de volgende reflex leert:
Nog voordat je je bewust bent van het feit dat je iets niet weet, heeft je linker wijsvinger al op F1 gedrukt. ;)

Hoe je de waardes plakt en niet de formules had je ook uit de help kunnen halen, maar voor het gemak..:
Visual Basic:
1
2
3
Sheets(1).Range("C5:F5").Copy
Sheets(2).Range("C3").End(xlDown).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hij werkt wel, maar als ik mn muis ergens anders neerzet, dan geeft ie weer een error.. terwijl volgens mij wel gewoon geselecteerd wordt. Is hiernog wat aan te doen?

  • Boss
  • Registratie: September 1999
  • Laatst online: 06:28

Boss

+1 Overgewaardeerd

Wat voor een error krijg je, en wat is je volledige code inmiddels geworden? Dan is het waarschijnlijk wel snel te vinden. Ze moeilijk is het tenslotte allemaal niet.

[offtopic]
Heb je het hier ook al gepost... heb je ondertussen al IETS zelf geprobeerd? Heb je al 1x op de F1 toets gedrukt? Heb je 1x zelf nagedacht voordat je hier met je probleem komt?
[/offtopic]

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Pink Panther
  • Registratie: Juni 2003
  • Laatst online: 23-05 23:18
Voor TS, wat is nu de code die je gebruikt :?

De macro zou namelijk onafhankelijk moeten zijn van de plaast waar je muis zet (ofwel welke cell je geselecteerd hebt).

Indien de macro dat wel is, kan ik je niet helpen, maar dan denk ik dat je probleem is dat je geen tekst kunt overtypen van....... 8)7

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Sub Opslaan()

' factuurnummer ophogen en kopieren
Sheets(2).Range("C3").Copy Sheets(2).Range("C1").End(xlDown).Offset(1, 0)

' Winst
Sheets(1).Select
Range("L29").Select
Selection.Copy
Sheets(2).Select
Range("D1").End(xlDown).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues

' totaal inkoop
Sheets(1).Select
Range("L26").Select
Selection.Copy
Sheets(2).Select
Range("E1").End(xlDown).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues

' contant
Sheets(1).Select
Range("H31").Select
Selection.Copy
Sheets(2).Select
Range("F1").End(xlDown).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues

' teruig naar sheet 1
Sheets(1).Select

' printen
Range("A1:H31").Select
Range("H31").Activate
ActiveWindow.SelectedSheets.PrintOut Copies:=2

' leeg maken
Range("A4:G24,J4:J24,K4:K24,G28,H27").Select
Range("G28").Activate
Selection.ClearContents
Range("A4").Select

' opslaan
ActiveWorkbook.Save

End Sub
Sub Ongedaanmaken()
Range("A4:G24,J4:J24,K4:K24,G28,H27").Select
Range("G28").Activate
Selection.ClearContents
End Sub

Deze code heb ik nu en het werkt :-) Bedankt allemaal!

Ik zit nu alleen met nog een klein probleempje. Ik moet ook een offerte programmaatje maken. Deze is hetzelfde als de factuur programma. Maar als ik nu op de button opslaan klik, moet hij die offerte opslaan in de map c:\offerte\ met als naam : %factuurnr%%bedrijfsnaam%.xls . Hierin %factuurnr% een cel met een naam en %bedrijfsnaam% ook een cel met een naam. Als ik dit heb, ben ik klaar. Ik heb al gezocht op het beforesave event , maar de vb editor zegt dat hij dat niet kent :? misschien komt het omdat het voor excel 97 is?

Iemand een idee hoe dit te doen?

  • KingRichard
  • Registratie: September 2002
  • Laatst online: 21-03-2025

KingRichard

former Duke of Gloucester

:O
Visual Basic:
1
2
3
Private Sub Workbook_BeforeSave()
   '[vul hier uw code in...]'
End Sub
En als je het niet met F1 kunt vinden, kun je altijd nog Google proberen... Kom op, RSD, een bééétje meer je best doen! ;)

[ Voor 13% gewijzigd door KingRichard op 26-01-2004 17:12 ]

a horse! a horse! my kingdom for a horse! (exeunt)
[got.profile] | [t.net.profile] | [specs]


  • Pink Panther
  • Registratie: Juni 2003
  • Laatst online: 23-05 23:18
@ TS:

Die macro zal wel een leuk flikkerbeeld geven. 8)
Doordat je telkens een cell / worksheet selecteert, gaat de macro natuurlijk constant omschakelen tussen de twee sheets. In principe moet je dit voor twee redenen voorkomen.

Ten eerste, je krijgt door de select het telkens wisselen van sheet1 -> sheet2 en weer naar sheet waardoor er een flikker effect ontstaat.

Ten tweede omdat het relatief langzaam is. Nu zal dit voor jou niet zo'n probleem zijn, maar als je bij wijze van spreke ettelijke duizende toevoegingen in een paar minuten zou doen (bijvoorbeeld middels een ander uit te voeren macro), dan zou jouw macro veel te traag worden.

Maar dit even terzijde.
Ik begrijp nu in ieder geval dat de bedoeling is dat je hiermee facturen gaat maken. Waarom download je niet gewoon ergens zoiets. Als je eens googled zul je zien dat hiervoor reeds menig workbook gemaakt is en daarin zitten al je opties verwerkt of zijn met kleine aanpassingen erin te krijgen. Dit is dan natuurlijk wel niet je eigen programma, maar waarom het wiel opnieuw uitvinden als het al tig duizend jaar geleden uitgevonden is :?
Pagina: 1