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

plakken 'lege formules' als lege cel

Status
Niet open voor verdere reacties.

muldertje2

Gebruiker
Lid geworden
1 aug 2011
Berichten
25
Hallo,

Ik zit met een probleempje. Ik werk in een bestand met meerdere werkbladen. In blad 1 staan allerlei formules, bijvoorbeeld in cel A2: "Als(D2=3;D2;"")". Het resultaat van deze formule is in dit geval: "". Wanneer je naar het resultaat van deze formule kijkt lijkt de cel leeg te zijn. Het resultaat van deze formule plak ik vervolgens als waarde in blad 2. Wanneer je op de cel klikt, lijkt het dat deze leeg is. Toch is dat deze blijkbaar niet wanneer ik met macro's werk. Het gaat mis wanneer ik de laatst gevulde cel opzoek.

Code:
Range("J10:O21").Select
    Selection.Copy
    Sheets("Maak factuur").Select
    Range("A" & Range("D65536").Offset.End(xlUp).Row + 2).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=True, Transpose:=False
In plaats van dat hij dus plakt op regel 16, doet bij dat op regel 25. Dit omdat cel D15-D32 'gevuld zijn' met het resultaat van de formule.

De vraag: Hoe kan ik plakken zodat de cellen wel echt leeg zijn?
Of: Hoe kan ik de laatste cel opzoeken waarvan de waarde gróter is dan 0 of ""? (zodat hij toch gewoon plakt op regel 16)

bvd!
 
Laatst bewerkt door een moderator:
1. Zonder (voorbeeld)bestand is moeilijk op je vraag te antwoorden; wat wel gezegd kan worden is dat je macro een stuk korter kan. Daarover later meer als je je bestand geplaatst hebt.
2. vba-code behoor je op het forum tussen codehaakjes te plaatsen, dat verhoogt de leesbaarheid (zie de gebruiksregels van het forum).
 
Hallo,

Ik heb nu een voorbeeldbestandje toegevoegd. Op het tabblad 'maak factuur' gaat het mis wanneer ik kies voor klantnaam: 'deze gaat fout'. Er komen dan veel te veel witregels tussen. Dit wordt veroorzaakt doordat hij de lege formules kopieeert uit 'filtervoorfactuuropstellen'

Ik hoop dat jullie mij hiermee verder kunnen helpen.


Bekijk bijlage NIeuwe versie 3.4 demo.xls
 
Ik beperk mij tot de code waar het in jouw bericht #1 om gaat, het was even zoeken om die in je bestand te vinden.
Je kopieert bij elk gegeven dat je op een factuur wil toevoegen steeds het bereik J10:O21, dat zorgt steeds voor ongewenste extra regels. Je kunt die extra regels beperken door slechts het bereik te kopiëren dat gegevens bevat. In de code hieronder heb ik daarvoor kolom N gebruikt: er wordt gekeken naar het aantal getallen groter dan 0. Daarmee wordt dan het aantal te kopiëren rijen bepaald.
Verwijder op het blad "Maak facuur" eerst alle rijen onder rij 33 en voer dan onderstaande macro afzonderlijk uit, zonder gebruik te maken van andere code, dan zie je hoe het werkt. De hier gebruikte methode kun je desgewenst ook elders in je bestand toepassen.
Code:
Sub Hulpvoormakenfactuur()
Dim a As Integer, lr As Integer
With Sheets("Filtervoorfactuuropstellen")
a = WorksheetFunction.CountIf(.Range("N11:N21"), ">0")
.Range("J10:O" & 10 + a).Copy
End With
With Sheets("Maak factuur")
lr = .Range("D65536").End(xlUp).Row + 2
.Range("A" & lr).PasteSpecial Paste:=xlPasteValues
.Range("A" & lr).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End With
End Sub
Een paar opmerkingen:
- als je dezelfde code verschillende keren gebruikt, dan moet je die steeds niet opnieuw invoeren, maar daar in je macro een gosub van maken, dan moet je hem slechts 1 keer plaatsen.
- ikbegrijp niet, daar waar je al zoveel code hebt, je desondanks zoveel formules in je bestand plaatst. Je kunt toch veel beter met de code je gegevens doorlopen en de gewenste te kopiëren data elders plaatsen zonder formules?
- Je bestand is zo uitgebreid dat de computer die ik op dit moment voor me heb (en al wat ouder is) jouw bestand niet aan kan. De cpu loopt voortdurend naar 100%, Excel loopt dan vast met de opmerking dat er onvoldoende systeembronnen zijn voor een volledige weergave. Daarom ga ik hier niet mee verder. Maar met wat ik hier schreef zou je verder moeten kunnen.
 
Hoe werkt go sub precies? Werkt het een beetje als volgt:

Go sub met daarachter een macronaam?

En dan in die betreffende macro het woord return?
 
Kijk in de helpfile van Excel of zoek even op internet; er zijn honderden sites waarop dat wordt uitgelegd.
Het werkt als volgt:
Code:
Sub Mijnmacro()
......
......
......
gosub Mijngosub1
.....
gosub Mijngosub2
.....
goto Einde
Mijn gosub1:
....
....
Return
Mijngosub2:
....
....
Return
Einde:
End sub
 
Super!! Bedankt! Het werkt precies zoals ik wens. Ik kende gosub helemaal niet, en kon hier ook, in tegenstelling tot andere macro's, heel weinig informatie over vinden. Iets ideaals dat ik eigenlijk in veel meer macro's had moeten verwerken!

Bedankt!

(PS; je weet misschien niet net een antwoord op mijn andere excel-vraag? (kopieren naar ander tabblad))
 
Hallo,

Ik reageer nog even op een iets ouder bericht van mij. Ik loop toch nog tegen een probleem aan. Onderstaande code heb ik als go-sub draaien binnen een macro in mijn excelbestand. Deze heb ik opgesteld met Office 2003, en draait probleemloos. Met office 2010 draait deze ook probleemloos. Maar office 2013 pakt deze code niet. Wat moet ik aanpassen zodat de code wel pakt.

Ter verduidelijking: het eerste deel van de code pakt hij wel gewoon op, maar hij lijkt een deel niet uit te voeren. Wat moet ik wijzigen zodat de macro wel gewoon doet binnen office 2013 (en 2003+2010)? Zit de fout in het del If Range("N12") = 0 Then Return? Dat hij dus te snel 'returnt'?



Eerste code is het deel dat hij lijkt niet uit te voeren. Tweede code is de volledige code.

Code:
With Sheets("Filtervoorfactuuropstellen")
If Range("N12") = 0 Then
Application.CutCopyMode = False
Return
End If
End With
With Sheets("Filtervoorfactuuropstellen")
a = WorksheetFunction.CountIf(.Range("N13:N21"), ">0")
.Range("J12:O" & 12 + a).Copy
End With
With Sheets("Maak factuur")
lp = .Range("D65536").End(xlUp).Row + 1
.Range("A" & lp).PasteSpecial Paste:=xlPasteValues
.Range("A" & lp).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End With


Code:
hulpvoormakenfactuur:


Application.CutCopyMode = False


With Sheets("Filtervoorfactuuropstellen").Select

Range("J10:R11").Select
Selection.Copy
End With
Dim a As Integer, lr As Integer, lp As Integer
With Sheets("Maak factuur")
lr = .Range("D65536").End(xlUp).Row + 2
.Range("A" & lr).PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
.Range("A" & lr).PasteSpecial Paste:=xlPasteFormats, SkipBlanks:=False
Application.CutCopyMode = False
End With
With Sheets("Filtervoorfactuuropstellen")
If Range("N12") = 0 Then
Application.CutCopyMode = False
Return
End If
End With
With Sheets("Filtervoorfactuuropstellen")
a = WorksheetFunction.CountIf(.Range("N13:N21"), ">0")
.Range("J12:O" & 12 + a).Copy
End With
With Sheets("Maak factuur")
lp = .Range("D65536").End(xlUp).Row + 1
.Range("A" & lp).PasteSpecial Paste:=xlPasteValues
.Range("A" & lp).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
End With

Return

Bij voorbaat hartelijk dank. Omdat Zapatr mij zo goed geholpen heeft ben ik even verder gegaan met dit bericht.
 
Gebruik in de VBEditor F8 voor de foutopsporing.
 
Gebruik in de VBEditor F8 voor de foutopsporing.

Dit heb ik wel gedaan, alleen ik kom hier niet veel verder mee. Ik ben wat dat betreft ook niet zo heel goed onderlegd in vba.... :( Niemand weet zo wat er fout zit?
 
In je code in bericht #8 wordt verschillende keren de CutCopyMode op False gezet maar nergens op true.
Haal de regels met CutCopymode eens weg en voer dan je macro uit.
 
hallo Zapatr,

Heb de regel met CutCopymode allemaal verwijderd. Vervolgens de macro opnieuw laten uitvoeren. Dit ging net als voorheen. Zonder foutmeldingen, maar weer 'vergeet' hij hetzelfde stuk...


Mijn gevoel zegt dat het in deze regel ergens fout gaat:

Code:
a = WorksheetFunction.CountIf(.Range("N11:N21"), ">0")
.Range("J10:O" & 10 + a).Copy
 
Hallo iedereen,

Bedankt voor het meedenken. Ik heb de oorzaak inmiddels al gevonden! Het zat hem niet in bovenstaande code waarbij ik dacht dat het misging maar het zat hem in onderstaand stukje:

If Range("N12") = 0 Then

dit moest zijn: If Range("N12") = "0" Then

Opgelost!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan