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

Copy met behoud van format / eigenschappen

Status
Niet open voor verdere reacties.

Stone52

Gebruiker
Lid geworden
11 dec 2004
Berichten
320
Forummers,

Bij het -via VBA- kopieren van een kolom met datums (opmaak dd-mm-jjjj) krijg ik in de nieuwe kolom de seriele opmaak van de datums te zien. Hoe kan ik met de VBA-kopieer-actie de opmaak van de oude kolom behouden ?
 
Werk je wel eens met de macro-recorder ? Handige tool waarmee je snel de basis voor een VBA script in Excel opzet.

Macro opnemen starten, handelingen uitvoeren in Excel, Macro opname stoppen en vervolgens eventuele logics toevoegen.
 
Laatst bewerkt:
Je moet toch maar gewoon .Copy gebruiken om de opmaak mee te geven?

Zoiets als dit is de basis van de code:

Code:
Sub test()
    Range("C1").Copy Range("D1")
End Sub

C1 wordt naar D1 gekopieerd.

Wigi
 
Hallo WiGi,

Dit principe gebruik ik ook, de opmaak (dd-mm-jjjj) gaat daarbij verloren, waarbij de datum naar een serieel getal wordt omgezet. Ik meen ooit eens gezien te hebben dat je voor de opmaak een extra parameter mee kon geven. Nog een idee ?
 
Waarom niet je celeigenschappen veranderen mbv vba:
Code:
Sub test()

Set MyRange = Range("D1")

    Range("C1").Copy MyRange
    
    With MyRange
        .NumberFormat = "dd-mm-yyyy"
    End With
    
End Sub

Of ben ik nu erg kort door de bocht?

Groet,
Ferenc
 
Hallo Wigi en Demeter,

Ik heb ondertussen een alternatief gevonden door bij de copy-opdracht het volgende mee te geven: Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
Dit

Operation:=xlNone, SkipBlanks:=False, Transpose:=False

mag je gerust deleten. Onnodig.
 
Was zelf ook al aan het stoeien gegaan met de functie PasteSpecial.
Bedankt voor je feedback.


Groet,
Ferenc
 
Wigi,


Jouw opmerking bij post #7
Dit

Operation:=xlNone, SkipBlanks:=False, Transpose:=False

mag je gerust deleten. Onnodig.
lijkt wat voorbarig.

De betreffende code (zonder: Operation:=xlNone, SkipBlanks:=False, Transpose:=False) geeft de meldig:
Runtime error 1004 - PasteSpecial method of class range failed.

Deze melding wordt niet altijd gegeven: op dezelfde PC de ene keer wel, de andere keer niet (= Excel 2002); op een andere PC (= Excel 2003) idem.

Na toevoeging van de parameter Operation:=xlNone bij de PasteSpecial lijkt het probleem verholpen.
 
Ik wist niet dat dat versie afhankelijk was. Mmm moet ik misschien later eens opsnorren op internet. Bedankt.
 
Mmmmmmmm, raar bij mij werk het wel de gehele tijd. Office 2003 met laatste updates.

Uit de helpfile van de vb-editor:
PasteSpecial, methode
Zie ookIs van toepassing op VoorbeeldSpecificatiesDe methode PasteSpecial bij toepassing op het Range-object

Deze methode plakt een Range-object uit het Klembord in het opgegeven bereik.

expressie.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
expressie Vereist. Een expressie die een Range-object als resultaat geeft.

Paste XlPasteType, optioneel. Het deel van het bereik dat moet worden geplakt.

XlPasteType kan een van de volgende XlPasteType-constanten zijn.
xlPasteAll standaard
xlPasteAllExceptBorders
xlPasteColumnWidths
xlPasteComments
xlPasteFormats
xlPasteFormulas
xlPasteFormulasAndNumberFormats
xlPasteValidation
xlPasteValues
xlPasteValuesAndNumberFormats

Operation XlPasteSpecialOperation, optioneel. De plakbewerking.

XlPasteSpecialOperation kan een van de volgende XlPasteSpecialOperation-constanten zijn.
xlPasteSpecialOperationAdd
xlPasteSpecialOperationDivide
xlPasteSpecialOperationMultiply
xlPasteSpecialOperationNone standaard
xlPasteSpecialOperationSubtract

SkipBlanks Variant, optioneel. Is True als lege cellen binnen het bereik in het Klembord niet in het doelbereik moeten worden geplakt. De standaardwaarde is False.

Transpose Variant, optioneel. Is True als rijen en kolommen moeten worden getransponeerd als het bereik wordt geplakt. De standaardwaarde is False.

Wijst uit dat de expressies, in Excel 2003, allen optioneel zijn.

Misschien zit er nog een kleine bug in je code?


Groet,
Ferenc
 
Wigi en Demeter,


Het blijft een merkwaardig verhaal. De Operation:=xlNone parameter blijkt toch niet van belang. Ik heb nu met een situatie te maken waarbij de "Runtime error 1004 - PasteSpecial method of class range failed" zich onvoorspelbaar wel/niet blijft voordoen. Ik kom hierop terug.
 
Wigi en Demeter,


Na uitgebreid testen blijkt dat enkele selecties (de range van de Selection.Copy en de range van de Selection.PasteSpecial) met een absolute verwijzing ($) binnen 1 macro kennelijk verantwoordelijk zijn voor de genoemde runtime error.

Na verwijdering van de absolute verwijzing deed het probleem zich alleen nog maar voor bij het voor de 1e keer opstarten van de macro op een andere PC en daarna ook weer voor alleen de 1e keer op de oorspronkelijke PC.

De file werd steeds ge-saved voordat deze weer op de andere PC werd gebruikt. Na enkele keren saven is het probleem verdwenen.

Het heeft er alle schijn van dat dit probleem een "Excel-feature" is geweest.
 
Wigi en Demeter,

Na uitgebreid testen blijkt dat enkele selecties (de range van de Selection.Copy en de range van de Selection.PasteSpecial) met een absolute verwijzing ($) binnen 1 macro kennelijk verantwoordelijk zijn voor de genoemde runtime error.

Na verwijdering van de absolute verwijzing deed het probleem zich alleen nog maar voor bij het voor de 1e keer opstarten van de macro op een andere PC en daarna ook weer voor alleen de 1e keer op de oorspronkelijke PC.

De file werd steeds ge-saved voordat deze weer op de andere PC werd gebruikt. Na enkele keren saven is het probleem verdwenen.

Het heeft er alle schijn van dat dit probleem een "Excel-feature" is geweest.

Bedankt voor de moeite.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan