Celopmaak in Excel 2010 vergrendelen (i.v.m. knippen en plakken)

Status
Niet open voor verdere reacties.

Rikkie

Steunend lid
Vip Lid
Ik zou graag in excel 2010 in een kolom gegevens vanuit een andere excel kunnen invoegen via kopiëren en plakken.

Er is wel een voorwaarde aan verbonden.
In de doel excel moet de ingevoegde waarden wel exact zijn, daarvoor heb ik een rol-outmenu gemaakt.
Hier kan ik manueel waarden invoeren, zijn deze correct -> geen probleem; staat de ingevoerde waarde niet vermeld in de lijst van het rol-outmenu krijg ik een foutmelding, alleen de waarden die voorkomen in de lijst kunnen ingevoerd worden en zo hoort het ook te zijn.

Bij het testen bleek dat ik een lijst met gegevens in deze kolom plak, gekopieerd vanuit een andere Excel, de waarden klakkeloos overgenomen worden en er indien er een foute waarde gekopieerd werden er geen foutbericht verscheen en de foutieve waarden toch in de doelexcel verschijnen (wat niet de bedoeling is en wat de rol-outmenu bij manuele ingaven belette)

Waarschijnlijk ligt dit aan het plakken, je kopieert de opmaak en/of achtergronden mee.

Hoe kan ik ervoor zorgen dat mijn rol-outmenu gerespecteerd wordt ook bij kopiëren en plakken?
Is er een mogelijkheid om voor deze kolom de opmaak te vergrendelen of dat men alleen "waarden" kan plakken.
(Plakken met rechtermuisknop en kiezen voor alleen waarden is geen optie, mensen die niet op de hoogte zijn kunnen zo foutieve waarden invoeren... en dat willen we niet)

Iemand een oplossing? (liefst zonder het document te beveiligen, als dat mogelijk is...)
 
Je moet hier met data validatie werken. Maar waarschijnlijk gebruik je dit sowieso om het gebruik van die beperking mogelijk te maken. Ik vermoed dat je dit met die copy/past gaat overriden.
Hieronder een link met een verklaring hoe je dit kan voorkomen en oplossen. Let er wel op dat je VBA code van de sheet gaat moeten aanpassen hiervoor. Dit kan via de developer view (aan te vinken bij de toolbar customizatie)
Excel Developer Tip: Ensuring that Data Validation is Not Deleted
 
Thanks DDragon80,

Ik zal dat morgen even proberen!
Ziet er simpel, maar toch niet makkelijk uit...

Eigenlijk zou het er op neerkomen dat:
Ik alle cellen on de volledige kolom met datavalidatie moet selecteer.
Dan kopieer ik die tekst uit het artikel en plak deze in de VBA-code van desbetreffende sheet.
Opslaan en testen.

Moet ik enkel weten waar ik in excel 2010 de VBA-code kan wijzigen (even opzoeken).

Ik laat nog weten hoe dit afloopt.
 
De Macro heeft één maal perfect gewerkt!
Ik had de excel opgeslagen onder Office 2003 compatiebel i.p.v. .XLSM, dus de macro's werden niet bewaard.
Vanaf dan krijg ik volgende foutmelding: Compileerfout: Er wordt End Sub verwacht

Macro roloutmenu.jpg
Vanalles geprobeerd en geen stap verder geraakt...
 

Bijlagen

  • Macro roloutmenu.jpg
    Macro roloutmenu.jpg
    56.3 KB · Weergaven: 204
Je gaat ergens de mist in met de VBA volgorde. Je hebt een Macro aangemaakt.
Je moet de VBA editor openen en de Worksheet selecteren waar de code voor moet dienen.
Er opend zich dan een venster voor code, selecteer hier linksboven worksheet ipv general (algemeen).
Je zal dan zien dat die al enkele Subs automatisch aanmaakt. Voeg de code van die site gewoon daaraan toe.
 
Vanaf dan krijg ik volgende foutmelding: Compileerfout: Er wordt End Sub verwacht

Die foutmelding krijg je omdat je tweemaal achter elkaar een sub hebt staan "sub macro" en "private sub"
met ander woorden, na "sub macro " wordt een end sub verwacht.
dus "sub macro ()" wissen.
 
Die foutmelding krijg je omdat je tweemaal achter elkaar een sub hebt staan "sub macro" en "private sub"
met ander woorden, na "sub macro " wordt een end sub verwacht.
dus "sub macro ()" wissen.

Er mag hier geen macro module aangemaakt worden. Deze code moet toegevoegd worden in de container van zen worksheet.
 
@ DDragon80

Ik heb inderdaad een macro aangemaakt voor heel de module denk ik.
Ik ga morgen jouw werkwijze eens proberen.

@ Pjotr
"sub macro ()" hebben we al geprobeerd te verwijderen, maar dan wordt de macro niet meer herkent.
Je kunt deze niet activeren.

Hopelijk morgen goed nieuws!

Bedankt mannen (y)
 
Volgens mij moet je Sub macro nog eens proberen te verwijderen want deze heeft geen nut
je roep je macro aan via private sub
volgens mij moet het in excel 2010 wel het volgende zijn, om bij wijziging een macro te starten is het, (in office 2010)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

ik denk dat "Private Sub Work_SheetChange(ByVal Target As Range)" enkel werkt in exel voor 2007
 
@ Pjotr
Kan je even aangeven wat waar weg moet?
Ik heb totaal geen idee met wat je bedoelt met "sub macro", hij blijft steeds vragen achter een "end sub" wat ik ook verwijder of aanpas.

@ DDragon80

Ik ben erin geslaagd te vinden waar ik deze tekst in een sheet kan krijgen.
Zoals je hierboven leest krijg ik dezelfde foutmelding.
Eerst kon ik deze niet opstarten omdat er geen macro gekozen kon worden dus heb ik eerst een macro geopend en dan ging het wel, maar dus zonder het gewenste resultaat.

Ergens doe ik iets verkeerd.
 
eerst ter informatie:
je hebt versschillende subs; sub, ptivate sub, public sub, .. (dit heeft niet zoveel belang)
na een sub krijg je een code en deze eindigt altijd met "End Sub"
Ik veronderstel dat je begonnen bent met opname van een macro, dat is die "sub macro1 ()" en dan ben je gaan aanpassen in VBA.

Nu heb jij staan:
Sub macro1()
Private Sub ......

dus je roept je macro1 aan maar er staat niets achter. dus VBA verwacht na het starten van je macro1 een code die er niet is dus VBA doet niets (want er is niets) en verwacht dan een end sub om af te sluiten. (daarop krijg je die foutmelding).
Dus die "sub Macro1 ()" moet je wissen

ik weet niet of je VBA code werkt dat heb ik niet getest.

in excel 2010 gebruik je de sub "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)" om bij een wijziging in je werkblad de onderligende code te laten werken
voor excel 2007 was dit "Private Sub Work_SheetChange(ByVal Target As Range)"

Concreet.
wis in VBA "Sub Macro1 ()"
verander "Private Sub Work_SheetChange(ByVal Target As Range)" door
"Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)"
en kijk dan eens of je macro werkt of waar hij vast loopt.
 
Laatst bewerkt:
@Pjotr
Dus bovenstaande in een gewone macro, niet in een toevoeging o een sheet.
Ik zal proberen, het zal wel voor vrijdag zijn, ik ben twee dagen naar 't buitenland en ik kan het enkel proberen op het werk...

Alvast bedankt.

@DDragon80
Ben met jouw versie al verder geraakt!
Nu zit ik vast met een fout op volgende lijnen.



'Does the validation range still have validation?
If HasValidation(Range("ValidationRange")) Then

Zou kunnen te maken hebben met wat Pjotr aanhaalde Office 2007 vercius 2010

Dus vervolg hopelijk de vrijdag
 
Ik heb deze VBA code net even getest in excel 2007 en die werkt perfect. Ik heb zelfs die fout kunnen simuleren. Je krijgt die fout wanneer er geen datavalidatie plaatsvind in je sheet.

Maar je vertrekt telkens van het macro gebeuren en dat is niet ok.
Ga naar het developer (ontwikkel?) menu. Je komt dan in de VBA editor.
Je ziet dan in de linkerkant al je aangemaakte "sheets" en hun naam. Standaard is dit Sheet1, Sheet2 en Sheet3.
Selecteer de "Sheet" waar jij die datavalidatie op hebt staan. En voeg in die sheet de code toe.
Het is mogelijk dat Excel 2010 een extra parameter staan heeft zoals Pjotr aangeeft. Je mag zelfs die functienaam veranderen met de extra parameter, maar dat gaat normaal geen verschil geven aangezien die parameter niet gebruikt wordt.

Dus maw wanneer je bovenstaande "fout" krijgt wilt dit zeggen dat die in de aangegeven sheet geen datavalidatie ziet. Ik vermoed dat je die code steeds opnieuw in een Macro container wilt plaatsen ipv de actieve "sheet" .

VBA.jpg
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan