D.m.v. vba celinhoud kopiëren vanuit een andere sheet

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
947
Beste Helpmij'ers,

Ik zit al geruime tijd te worstelen met een ogenschijnlijk eenvoudige vba-code die bij mij niet functioneert.

Het is de bedoeling om de celinhoud vanuit een andere sheet te kopiëren naar een werkblad waar ik actief in ben. De code werkt perfect zolang het kopiëren maar binnen hetzelfde werkblad blijft.

De code is:
Code:
        If Range("b" & Target.Row) <> "" And Range("c" & Target.Row) = "" Then
            rij = 0 + ActiveCell.Row
            'Range("k2").Select 'Deze code werkt prima vanuit dezelfde sheet
            Sheets("Data").Range("b53").Select 'Deze code geeft een foutmelding zonder omschrijving van de fout
           Selection.Copy
           Cells(rij, 3).Select
           Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
           Cells(rij, 1).Select
           Application.Goto .Offset(, 2) 'ga naar kolom c
        End If

Wat doe ik fout in de regel: Sheets("Data").Range("b53").Select

Een antwoord zie ik met veel belangstelling tegemoet.

Met vriendelijke groet,
Robert Smidt
 
Je laat helaas niet de hele macro zien, maar ik vermoed dat je code in een macro staat die begint met een "worksheet_Change" of "worksheet_selectionchange"-opdracht. Dan kun je geen cellen in andere bladen selecteren, die opdrachten zijn juist bedoeld om o.a. dat juist tegen te gaan. Verder:
- Je hoeft cellen niet te selecteren om er bewerkingen op uit te voeren, alle regels met "select" kun je dus verwijderen.
- De 0 in rij = 0 + ActiveCell.Row" heeft ook geen enkel geen nut, verwijder die.
- Alle regels die je gebruikt voor de kopieeropdracht kun je vervangen door:
Code:
Sheets("Data").Range("B53").Copy Destination:=Range("K2")
 
En dan is dit zelfs voldoende:
Code:
Range("K2") = Sheets("Data").Range("B53")
 
Juist edmoor!
En in mijn opdracht kun je destination:= achterwege katen,
maar omwille van de duidelijkheid voor de vragensteller heb ik dat laten staan.
 
Bedankt heren,

De code werkt niet omdat hij de opdracht telkens op een nieuwe (actieve) regel moet uitvoeren. De bron blijft altijd Data!B53, echter de bestemming veranderd voortdurend, dus bij Range("K2") moet nog iets bij zodat het om de actieve regel gaat, overigens betreft de bestemming kolom C en niet kolom K.
 
Op basis van wat je hier hebt geplaatst, werkt de code van edmoor en mijzelf wel.
Als je wat anders wil: plaats een voorbeeldbestand met DUIDELIJKE uitleg van wat je wenst.
 
De code werkt prima maar je wilt hem dus telkens naar een andere regel laten schrijven. Omdat je niet alles toont in de code die je plaatste blijft het een gok, maar probeer deze eens:
Code:
Range("K" & Target.Row) = Sheets("Data").Range("B53")
 
Ik heb de oplossing:

Code:
Range("c" & Target.Row) = Sheets("Data").Range("B53")

Dit werkt perfect, heel hartelijk bedankt heren, zonder jullie was ik hier nooit op gekomen.
 
En zo kan het stukje dat je in #1 plaatste dus een stuk eenvoudiger geschreven worden, zoals zapatr ook al opmerkte.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan