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

pastespecial werkt maar gedeeltelijk. Hoe kan dat.

Status
Niet open voor verdere reacties.

ericabt

Gebruiker
Lid geworden
9 nov 2008
Berichten
104
Ik wil een selectie dmv VBA op het tabblad "print" plakken. Er moet geplakt worden op ALLEEN values en formats. Het liefste zou ik dat in een keer doen, maar ik heb nog niet gevonden hoe dat moet (in excel 2007). De eerste regel gaat goed, op de tweede (rood) loopt de macro vast. De selectie lijkt verdwenen na de eerste paste. Mocht het nodig zijn, dan kan ik kijken of ik een voorbeeld kan maken, maar mijn excel is te groot en bevat info die ik niet met iedereen kan delen, dus ik hoop dat iemand zonder voorbeeld een aanknooppunt heeft.

Code:
Sheets("print").Range("A65535").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
[COLOR="#FF0000"]Sheets("print").Range("A65535").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteFormats
[/COLOR]
 
Laatst bewerkt:
Je hebt de waarden geplakt in offset(1).
Als je de formats wil plakken zou ik geen offset(1) meer gebruiken.
 
Gewoon copy gebruiken levert toch tekst en opmaak.
Maar natuurlijk ook de eventuele formule.
Als je er helemaal niet uitkomt kan je eerst de waarde copiëren via xlValues en dan de cel aanpassen aan je behoefte.
En dat doe je zo:
Via tab Start celstijlen kun je een opgemaakte cel selecteren en je geeft die stijl een naam: bv. mijnstijl
Dan voeg je deze regel toe in je macro:
Code:
 [COLOR="#FF0000"][/COLOR][B]Worksheets(1).Range("M2").Style = "mijnstijl"[/B]
dan heb je de cel zoals gewenst als je tenminste de bereiken goed aanpast.:)
 
bedankt alvast voor jullie reacties. Helaas is de opmaak niet zo uniform. Ik heb toch even een testbestandje gemaakt. Ik heb geprobeerd alle niet relevante info eruit te gooien.

Druk op de knop op blad b102 en vervolgens loopt de macro vast op de regel, zoals hierboven beschreven.

Opmerking. Er zitten best wel wat verbanden in de eigenlijke spreadsheet, dus mogelijk als jullie zelf gaan rommelen :) in het bestand kunnen er foutmeldingen ontstaan, ivm missing links ed. Zolang je eenmalig bovenstaande druk op de knop volgt, resulteert dat voor mij althans in de bewuste foutmelding.

Bekijk bijlage test.xlsm
 
Waarom vlieg je steeds van blad naar blad met select.
Het gaat fout doordat je userform op het blad staat.
Je kan iets wegschrijven naar een blad zonder het blad actief te maken.
 
ik ben het met je eens dat er veel select heb gebruikt. Dat was aanvankelijk niet zo, maar een aantal keren lukte bepaalde commando's (misschien toeval) wel met select. Ze zijn dus eigenlijk een beetje blijven staan. Ik ga weer terug naar af en ga proberen alles te copy/pasten zonder select. Hopelijk lukt het dan wel..
 
toch krijg ik dan meer problemen. Het loopt nu vast op onderstande regel. Op de een of andere manier gaat de verwijzing naar de sheet niet goed. als ik sheet.select doe gaat het wel goed. Ik ben bij lange geen VBA expert, maar heb nog niet vaak zo lang op een paar regeltjes tekst vastgezeten. Het gaat vast om een piepklein dingetje, maar dan kijk ik er toch echt overheen.

Code:
Dim b As Range
[COLOR="#FF0000"]        For Each b In Sheets(PrintTab).Range(Cells(1, 1), Cells(Range("A100").End(xlUp).Row, 1))[/COLOR]
        If b.Value = 2 Then
        b.EntireRow.Hidden = True
        End If
    Next b
 
Denk om de rode punten die een verwijzing maken naar het blad "PrintTab".

Code:
Dim b As Range
[COLOR=#FF0000]with [/COLOR][COLOR=#ff0000]Sheets(PrintTab)[/COLOR]
[COLOR=#ff0000]        [/COLOR]For Each b In[COLOR=#FF0000] [B].[/B][/COLOR]Range([B][COLOR=#FF0000].[/COLOR][/B]Cells(1, 1), [COLOR=#FF0000][B].[/B][/COLOR]Cells([COLOR=#FF0000][B].[/B][/COLOR]Range("A100").End(xlUp).Row, 1))[COLOR=#ff0000][/COLOR]
        If b.Value = 2 Then
        b.EntireRow.Hidden = True
        End If
   Next b
[COLOR=#FF0000]end with[/COLOR]
 
Laatst bewerkt:
ah ok: alles moet dus de verwijzing krijgen naar de sheet. De punt achter "with Sheets(Printtab)" moet er denk ik niet staan (dan gaat het in ieder geval niet goed). Zonder die punt krijg ik de melding "end with without with". Dus het is nog niet helemaal 100%.

Aanvulling: sorry, ik was te snel: next b moet een regel omhoog.
 
Laatst bewerkt:
Juist, die punt hoort daar niet, en de "next b" moest omhoog.
Vanaf forum erin geplaatst, en dan zie je dingen waarschijnlijk minder als in Vba omgeving.
 
geen probleem. De tekst loopt nu zonder alle selects, maar blijf toch nog steeds steken op de rode regel in mijn eerste bericht. Is er geen value en formats code dit dat in een keer regelt?.

Als ik de code stop tot voor deze regels en ik ga handmatig naar de tab("print") (dus een select) en dan vervolgens twee keer pasten (rechtermuisknop paste values en nog een keer paste format), dan gaat het wel.
 
Laatst bewerkt:
Je userform staat zeker op het blad na de change.
 
bij sheet activate komt de userform te voorschijn. ik kan deze ook eventueel oproepen nadat ik geplakt heb. Ik ga dat proberen, maar dan blijf ik het raar vinden dat de eerste pastespecial wel uitgevoerd wordt en de tweede niet. Op de een of andere manier verlies ik de selection.
 
De champagne kan los. De sheet activate was de boosdoener. Niet alleen het userform staat hierin, maar heb het in zijn geheel uitgezet en toen werkte het. Dit is alleen wel jammer, want nu kan ik dit dus kennelijk niet gebruiken. Wat ik vreemd vind is dat, omdat alle selects weg zijn, ik eigenlijk de sheet niet activeer of gebeurt dat dan toch wel. Daarnaast pakt het wel de eerste pastespecial. Dit is toch ook na de sheet activate dan?
 
Zet het bestand hier eens neer met hoe ver je bent (anders moet ik de gehele code bijlangs en alles aanpassen).
 
ik ben nu weer in mijn originele bestand aan het werken, maar hieronder de code die ik heb aangepast (moet nog wel even netjes gemaakt worden). Deze sub staat ook in het meegestuurde bestand onder module (algemene knoppen). Alle selects zijn eruit en ik heb van de sheet ("print") de sheet_activate weggehaald. De sheet_deactivate kan blijven staan.

Nu ook nog een code vinden om de variabele "LaatsteRij" door een code te laten vinden ipv handmatige invoer. Dat is me ook nog niet gelukt (zie ook andere post in dit forum)

Code:
Sub GaNaarPrintPreview()
   
Application.ScreenUpdating = False
    Dim PrintTab As String
    Dim i As Integer
    Dim y As Integer
    Dim s As String
    Dim Rijen As Integer
    Dim VrijeRijen As Integer
    Dim EersteLegeRij As Integer
    Dim LaatsteRij As Integer
    
    PrintTab = ActiveSheet.Name + "p"
    Sheets(PrintTab).Cells.EntireRow.Hidden = False
    
Dim b As Range
With Sheets(PrintTab)
    For Each b In .Range(.Cells(1, 1), .Cells(.Range("A100").End(xlUp).Row, 1))
            If b.Value = 2 Then
            b.EntireRow.Hidden = True
            End If
            Next b
End With

With Sheets(PrintTab)
    .Range(.Cells(1, 1), .Cells(.Range("A100").End(xlUp).Row, 42)).SpecialCells(xlCellTypeVisible).Copy
End With

' rijen tellen zonder de verborgen lijnen
        Dim MyRowCount As Integer
        Dim MyRange As Range
        Dim c As Range
With Sheets(PrintTab)
        For Each c In .Range(.Cells(1, 1), .Cells(.Range("A100").End(xlUp).Row, 1))
            If (c.Value = 1) And (c.EntireRow.Hidden = False) Then
                MyRowCount = MyRowCount + 1
            End If
        Next c
    End With
        
    Rijen = MyRowCount
    
    
    LaatsteRij = 61 'HIER MOET AUTOMATISCH DE LAATSTE RIJ WORDEN GEVONDEN

 
  
    ' EersteLegeRij = Sheets("print").Range("A65535").End(xlUp).Offset(1, 0).Row
    EersteLegeRij = Sheets("print").Range("A65535").End(xlUp).Offset(1, 0).Row
    VrijeRijen = LaatsteRij - EersteLegeRij
    
    
'uitzoeken of uitvoer nog op pagina past; zo niet, dan naar volgende pagina.
    If Rijen <= VrijeRijen Then
        With Sheets("print").Range("A65535").End(xlUp).Offset(1, 0)
            .PasteSpecial Paste:=xlPasteFormats
            .PasteSpecial Paste:=xlPasteValues
        End With

     Else
        EersteLegeRij = LaatsteRij + 1
        Sheets("print").Cells(EersteLegeRij, 1).PasteSpecial xlPasteFormats
        Sheets("print").Cells(EersteLegeRij, 1).PasteSpecial xlPasteValues
     End If
     
    Sheets("print").Select
    Range("a1").Select
     
    pr_printknoppen.Show

Application.ScreenUpdating = True

End Sub
 
Laatst bewerkt:
Met je laatste rij ben ik nog niet uit.
Diverse tests gedaan op een leeg werkblad zonder pagina-einden, maar het gaat nog niet zo als ik wil.
 
Ik heb me ook al suf gegoogled en kom iedere keer op hetzelfde uit mbt paginaeinden. Moet toch iets zijn wat het einde van een pagina kan vinden zou je zo zeggen. Ik blijf ook doorspeuren.
Er is ook geen enkele reactie gekomen op mijn post, dus kennelijk is het niet zo eenvoudig.
 
Waar ik het laatst mee bezig was, is het aantal cellen * rijhoogte = 750.
Maar voordat er een pagina-einde tevoorschijn komt moet je er 14.25 bijtellen (764.25)
Volgens mij zit je dan nog weer met je kop- en voettekst hoogte.

Misschien is er een simpele oplossing, maar die heb ik nog niet uitgedoktert (ik heb nog niet gezocht op het www).
 
Hoe dan ook alvast bedankt voor alle hulp. Ik kom nu in ieder geval al vooruit ipv stilstand..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan