Excel VBA kopieert formule ipv waarde

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • genexxa
  • Registratie: Januari 2013
  • Laatst online: 18-03-2023
Mijn vraag

Ik heb een formule gevonden die ik gebruik.
Echter kopieert het de formule en niet de waarde die de formule in de desbetreffende cel aangeeft.

Hieronder de code:
Sub Gegevens_kopieren()
Dim cl As Range
'Sheet Weekoverzicht
With Sheets("Weekoverzicht")
'Kijkt naar de aantallen van de tabblad Weekoverzicht kolom D
For Each cl In .Range("D14:D14")
'Als, vanaf regel +1 (regel 15), 10 regels de waarde >0 is, dan
If Application.Count(cl.Offset(1).Resize(10)) > 0 Then
'Kopieer alle cellen met waarde, plak de waarde onder cel 3 ,vergelijkt de datum(E1)in de sheet Aantal. kijkt naar de naam in regel 14 (Aantal) in de 2e regel
cl.Offset(1).Resize(10).Copy Sheets(cl.Value).Cells(3, Application.Match(CLng(.Range("c14")), Sheets(cl.Value).Rows(2), 0)).Offset(1)
End If
Next cl
End With
End Sub

Relevante software en hardware die ik gebruik
Excel 2010

Wat ik al gevonden of geprobeerd heb
Veel gezocht op google maar kom er niet uit.
Te weinig ervaring denk ik.

Ik hoop dat iemand van jullie mij kan helpen.

Alle reacties


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Nu online
https://www.google.nl/sea...id=chrome-mobile&ie=UTF-8

Met deze zoekopdracht kwam je er niet?

Acties:
  • 0 Henk 'm!

  • genexxa
  • Registratie: Januari 2013
  • Laatst online: 18-03-2023
Nee, ik heb te weinig ervaring in VBA.
ik zie wel de oplossing op .PasteSpecial Paste:=xlValues te te voegen maar dat werkt niet bij mij

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 14:40
@genexxa In plaats van de cel te kopiëren en (speciaal) te plakken met xlPasteValues, kun je er in dit geval ook voor kiezen om de waarde van een cel uit te lezen en direct toe te kennen aan een andere celwaarde.

POC
Visual Basic:
1
2
3
4
5
Option Explicit

Sub test()
  ActiveWorkbook.Sheets(1).Range("A1").Value = ActiveWorkbook.Sheets(2).Range("A1").Value
End Sub


Waarom gebruik je trouwens een for each loop als het te doorlopen bereik maar 1 cel (D14) betreft? Dat kan efficiënter.

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 14:40
genexxa schreef op donderdag 1 maart 2018 @ 12:13:
Nee, ik heb te weinig ervaring in VBA.
ik zie wel de oplossing op .PasteSpecial Paste:=xlValues te te voegen maar dat werkt niet bij mij
dat verbaast me niets, want onderstaande klopt niet :)
Paste:=xlValues

Probeer in plaats daarvan eens:
xlPasteValues

of:
Paste:=xlPasteValues


https://msdn.microsoft.co...pastespecial-method-excel
https://msdn.microsoft.co...stetype-enumeration-excel

[ Voor 7% gewijzigd door breew op 01-03-2018 12:20 ]


Acties:
  • 0 Henk 'm!

  • genexxa
  • Registratie: Januari 2013
  • Laatst online: 18-03-2023
Ik heb het nu zo:
Sub Gegevens_kopieren()
Dim cl As Range
'Sheet Dagstart
With Sheets("Weekoverzicht")
'Kijkt naar Aantal in cel D14
For Each cl In .Range("D14:D14")
'Als, vanaf regel +1 (regel 15), 10 regels de waarde >0 is, dan
If Application.Count(cl.Offset(1).Resize(10)) > 0 Then
'Kopieer alle cellen met waarde, plak de waarde onder cel 3 ,vergelijkt de datum(C14)in de sheets. datum in regel 2
cl.Offset(1).Resize(10).Copy
Sheets(cl.Value).PasteSpecial Paste:=xlPasteValues.Cells(3, Application.Match(CLng(.Range("c14")), Sheets(cl.Value).Rows(2), 0)).Offset(1)
End If
Next cl
End With
End Sub

Maar werkt ook niet.

Acties:
  • 0 Henk 'm!

  • breew
  • Registratie: April 2014
  • Laatst online: 14:40
@genexxa
  1. zet je code even tussen [code]-tags.. dit is niet goed leesbaar op deze manier. dus
    [code=vb] ... plak hier je code ... [/code]
  2. wat gaat niet goed? Krijg je een foutmelding, of output die je niet verwacht, of..., of... ?
  3. bij het (onvermijdelijke) debuggen, bij welke stap krijg je resultaten die je niet verwacht?
Copy-pastespecial doe je (doorgaans) zo:
Visual Basic:
1
2
3
4
5
6
7
8
Sub kopieerTest()
    'dit bereik wil je kopiëren
    Sheets(1).Range("A1:D4").Copy
    'hier moet het heen (de linkerbovenhoek van het plakbereik)
    Sheets(2).Range("A3").PasteSpecial xlPasteValues
    'even netjes de copy-selectie weer opheffen
    Application.CutCopyMode = False
End Sub


Je kopieert dus een range (sheet1.A1:D4), maar als 'plakdoel' geef je alleen de cel linksboven op (sheet2.A3).. en voilà; sheet1.A4:D4 wordt netjes in sheet2.A3:D6 ge-speciaal-plakt (alleen waarden).

[ Voor 40% gewijzigd door breew op 01-03-2018 15:24 ]

Pagina: 1