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

Velden doorkopiëren mbv een macro

Status
Niet open voor verdere reacties.

Revolutionary

Gebruiker
Lid geworden
1 apr 2009
Berichten
183
Beste helpers,

Ik zit met het volgende: ik heb een tabel met daarin een aantal voorwaardelijke beursorders. Zodra een voorwaarde (een bepaald koersniveau) wordt bereikt wordt er een order uitgevoerd. Zodra een voorwaarde niet wordt bereikt wordt de order geannuleerd. Nu zou ik graag in twee aparte tabellen willen hebben die de uitgevoerde en de geannuleerde orders verzamelen. Ik heb daarvoor 2 buttons met een macro opgesteld, die als volgt werken: selecteer de gehele orderregel en druk op de button, de geselecteerde orderregel wordt nu uit de tabel gehaald en gekopieerd naar de tabel waar de geannuleerde of de uitgevoerde orders worden verzameld. Het probleem is echter dat het mij niet lukt om deze orders onder elkaar te krijgen, de macro is blijkbaar zo opgesteld dat alleen de eerste regel van de tabel steeds wordt gevuld.

Daarnaast ben ik er achter gekomen dat je een uitgevoerde macro niet ongedaan kan maken met CTRL+Z, daarom zou ik graag een button met een macro willen ontwikkelen die steeds de laatste actie ongedaan kan maken, maar ik heb geen idee hoe...

Ik heb een klein voorbeeldje toegevoegd om een en ander te verduidelijken.

Ik hoop dat iemand mij in de goede richting kan wijzen!

Alvast heel erg bedankt!

Groeten,
Tim
 

Bijlagen

Selecteer in kolom A de cel van de regel die verplaatst moet worden
Code:
Sub Macro1_Geannuleerd()
    ['Geannuleerde orders'!A65536].End(xlUp).Offset(1).Resize(, 8) = ActiveCell.Resize(, 8).Value
    ActiveCell.EntireRow.Delete
End Sub

Sub Macro2_Uitgevoerd()
    ['Uitgevoerde orders'!A65536].End(xlUp).Offset(1).Resize(, 8) = ActiveCell.Resize(, 8).Value
    ActiveCell.EntireRow.Delete
End Sub
 
Laatst bewerkt:
Bedankt Rudi:thumb:

Nu kom ik op de volgende vraag: zodra een order wordt overgeplaats naar een andere tabel verdwijnt er een regel uit de eerste tabel, waardoor alle regels steeds 1 plaatsje omhoog gaan. Wat ik eigenlijk zou willen is dat de regel waar de voorwaardelijke order stond leeg blijft en dat de opmaak en formules in die regel onveranderd blijven. Daartoe heb ik de VBA-code iets aangepast tot:

Code:
Sub Macro1_Geannuleerd()
    ['Geannuleerde orders'!A65536].End(xlUp).Offset(1).Resize(, 8) = ActiveCell.Resize(, 8).Value
    ActiveCell.EntireRow.Clear
End Sub

Er blijft nu wel een lege regel over, maar het probleem is echter dat de opmaak en de formules toch worden gewist, heb je daar misschien een oplossing voor?

Groeten,
Tim
 
Volgens mij moet je dan ClearContents gebruiken.
Code:
Sub Macro1_Geannuleerd()
    ['Geannuleerde orders'!A65536].End(xlUp).Offset(1).Resize(, 8) = ActiveCell.Resize(, 8).Value
    ActiveCell.EntireRow.Clear[B][COLOR="Red"]Contents[/COLOR][/B]
End Sub

De cellen worden leeggemaakt maar de opmaak en formules blijven.

Met vriendelijke groet,


Roncancio
 
Ik heb het even getest en je hebt gelijk wat betreft de opmaak, alleen de formules worden wel gewist helaas.

Groeten,
Tim
 
Ik heb gister en vandaag nog even lopen sleutelen aan de vba-code, maar ik kom er helaas niet uit. Om de een of andere reden worden de formules steeds gewist. Heeft iemand een idee hoe ik dat kan voorkomen?

Groeten,
Tim
 
Laatst bewerkt:
Ik heb opeens een idee, maar ik weet niet hoe ik dat naar een VBA-code moet vertalen...
In een regel (bijvoorbeeld regel 20 in het eerste werkblad) die verder niet gebruikt zal worden om voorwaardelijke orders in te voeren, vul ik de formules in. De macro kopieert vervolgens die formules naar de regel die zojuist overgezet is naar een ander werkblad.

Wie kan mij helpen om deze opdracht in een VBA-code te zetten?

Alvast bedankt!
 
Aangezien het volgens jouw vb slechts om 2 formules gaat
Code:
Sub Macro1_Geannuleerd()
    With ActiveCell
        ['Geannuleerde orders'!A65536].End(xlUp).Offset(1).Resize(, 8) = .Resize(, 8).Value
        .EntireRow.ClearContents
        .Offset(, 5) = "=ABS(RC[-3]-RC[-2])"
        .Offset(, 7) = "=RC[-2]*RC[-1]"
    End With
End Sub
 
Beste Rudi,

Heel erg bedankt!:thumb:
Dit is exact wat ik bedoelde:)

Nu moet ik deze VBA-code nog los laten op het werkelijke bestandje, dat complexere formules bevat dan dit voorbeeld bestandje. Ik ga mijn best doen:)

Deze topic zal ik op opgelost zetten.

Groeten,
Tim
 
Beste helpers,

Ik heb de status van deze topic toch weer op onopgelost gezet, want het lukt mij niet om de code van Rudy om te vormen op basis van de formules in het werkelijke bestandje. Zoals ik in het vorige bericht al aangaf zijn de formules in het echte bestand complexer (althans voor een beginner als ik) dan de formules die ik in het voorbeeld bestandje heb gebruikt. Onderstaande formule staat bijvoorbeeld in kolom P:

Code:
=ALS(EN(N8="yes";F8="long");O8*G8*$I$10*'Tickvalue'!$B$4;ALS(EN(N8="yes";F8="short");O8*H8*$I$10*'Tickvalue'!$B$4;0))

Dus ik vroeg mij af of het toch niet mogelijk is om met behulp van een VBA-code een regel te selecteren waarin alle formules staan en deze regel over te kopiëren?

Ik hoop dat jullie begrijpen wat ik bedoel en zo niet dan hoor ik het wel.

Groeten,
Tim
 
Na een hoop gepuzzel ben ik er toch achtergekomen hoe ik mijn formules moet omzetten in vba-code. Voor diegene die tegen een zelfde probleem aanlopen: zet de macro-recorder aan, kopieer uit een cel de formule die je wilt omzetten in een vba-code en plak deze in een andere cel, stop de macro-recorder, ga naar visual basic en zoek de macro op die je net hebt gemaakt, daar vindt je de vba-code van je formule. De VBA-code van de formule die in mijn vorige post staat is bijvoorbeeld:

Code:
"=IF(AND(RC[-2]=""yes"",RC[-10]=""long""),RC[-1]*RC[-9]*R10C10*Tickvalue!R4C2,IF(AND(RC[-2]=""yes"",RC[-10]=""short""),RC[-1]*RC[-8]*R10C10*Tickvalue!R4C2,0))"

Deze topic zet ik weer op opgelost.

Tim
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan