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

Klembord overvol - melding bij afsluiten

Status
Niet open voor verdere reacties.
Kun je hier wat mee?
Telkens wanneer er een item wordt toegevoegd aan het Office Klembord , wordt daar een vermelding van gemaakt in het taakvenster Klembord. Het laatste element wordt altijd vooraan weergegeven. Elk item bevat een pictogram waaraan u het Office-bronprogramma herkent plus een deel van de gekopieerde tekst of een miniatuur van een gekopieerde afbeelding.

Taakvenster Klembord
https://support.content.office.net/nl-nl/media/99404758-449e-4604-919f-87d7ed8d6b6d.gif

NOTITIES :

Het Office Klembord is niet beschikbaar in weergaven waarin de opdrachten Kopiëren, Knippen en Plakken niet beschikbaar zijn.

De items die zijn verzameld, blijven in het Office Klembord totdat u alle Office-programma's afsluit die op uw computer worden uitgevoerd of op Alles wissen klikt in het taakvenster Klembord. Zie Items op het Office Klembord wissen voor meer informatie.

In bepaalde gevallen, zoals bij Unicode-tekst, ziet de afbeelding in het taakvenster er iets anders uit. De reden hiervan is dat tekst in het taakvenster altijd wordt weergegeven in het lettertype Tahoma. De juiste opmaak- en lettertypegegevens worden echter hersteld wanneer het item vanuit het taakvenster wordt geplakt.
 
Bedankt, maar ik zie hierin geen aanknopingspunten om mijn "probleem" op te lossen.
 
Ik kan deze helaas door mijn gebrekkige kennis van VBA niet doorgronden.

Waarom heb je de code eigenlijk niet geplaatst? Dit wordt volgens mij een onnodig lang draadje zonder te weten wat je exact aan het doen bent. Dus even een voorbeeldbestandje met de code daarin. Mogelijk dat het beter/anders geschreven kan worden waardoor het probleem verdwijnt.
 
VenA, bedankt voor je inspaning.
Het is bevestigd dat er geen VBA-code bestaat die het klembord van MS-Office (hier Excel) kan legen.
Mijn geïmplementeerde oplossing is het omzeilen van het klembord bij het kopiëren/plakken waarden.
Zie aangepaste code die een sub is uit een totale script
Code:
'Formules verwijderen in kolommmen van werkgebied A6:T

  Sub Waarden kop_plakken
  ' Range("A6:T" & lLaatsteRij - 4).Select
  ' Application.CutCopyMode = False
  ' Selection.Copy
  ' Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    Range("A6:T" & lLaatsteRij - 4) = Range("A6:T" & lLaatsteRij - 4).Value  'gebruikt geen klembord
        
End Sub
 
Nog niet afsluiten, waarschijnlijk kom ik morgen met een oplossing.
 
Ben ik ook benieuwd naar :)
 
Het schijnt wel erg moeilijk te zijn om antwoord te geven op vragen die door mogelijke helpers gesteld zijn.

Mijn vraag was welke code jij gebruikt waardoor dit probleem ontstaat en om er even een voorbeeld bestandje bij te voegen. Blijkbaar zit het zo spannend in elkaar dat we dit niet mogen zien?

@alphamax, 'waarschijnlijk' en 'morgen' klinkt hoopvol:d
 
Ho ff... Het gaat in je probleem alleen maar om het omzetten van formules naar vaste waarden? Dan is je. Value =. Value zelfs de beste methode...
 
Ginger,
Nee het gaat niet om enige vorm van omzetten maar het overvol raken van het Office klembord waardoor een melding ontstaat bij het afsluiten = De afbeelding is te groot en zal worden afgekapt. Dit is geen foutmelding en het Excel-bestand heeft er geen nadelige gevolgen van.
 
Code:
application.displayalerts=false
 
Probeer dit eens: (leegt dus het office-klembord)
In een module:

Code:
Option Explicit

 Private Declare Function AccessibleChildren Lib "oleacc" (ByVal paccContainer As Office.IAccessible, ByVal iChildStart As Long, ByVal cChildren As Long, ByRef rgvarChildren As Any, ByRef pcObtained As Long) As Long

 Private Const CHILDID_SELF = 0&
 Private Const ROLE_SYSTEM_LIST = &H21
 Private Const ROLE_SYSTEM_PROPERTYPAGE = &H26
 Private Const ROLE_SYSTEM_PUSHBUTTON = &H2B
 Private Const ROLE_SYSTEM_WINDOW = &H9

 Private Sub DoActionOfficeClipboard(ByVal AccObjName As String)
 Dim Acc As Office.IAccessible
 Dim Count As Long
 Dim i As Long

    Application.CommandBars("Office Clipboard").Visible = True
    DoEvents
        Set Acc = Application.CommandBars("Office Clipboard")
        Set Acc = GetAcc(Acc, "Collect and Paste 2.0", ROLE_SYSTEM_WINDOW)
        Set Acc = GetAcc(Acc, "Collect and Paste 2.0", ROLE_SYSTEM_PROPERTYPAGE)
    Count = Acc.accChildCount
        If Count > 0& Then
            For i = 0 To Count
                If (Acc.accName(i) = AccObjName) And (Acc.accRole(i) = ROLE_SYSTEM_PUSHBUTTON) Then
                    Acc.accDoDefaultAction i
                Exit For
                End If
            Next
        End If
 Set Acc = Nothing
 
 End Sub

 Private Function GetAcc(myAcc As Office.IAccessible, myAccName As String, myAccRole As Long) As Office.IAccessible
 Dim ReturnAcc As Office.IAccessible
 Dim ChildAcc As Office.IAccessible
 Dim List() As Variant
 Dim Count As Long
 Dim i As Long

    If (myAcc.accState(CHILDID_SELF) <> 32769) And _
        (myAcc.accName(CHILDID_SELF) = myAccName) And _
        (myAcc.accRole(CHILDID_SELF) = myAccRole) Then
        Set ReturnAcc = myAcc
    Else
 Count = myAcc.accChildCount
    If Count > 0& Then
        ReDim List(Count - 1&)
            If AccessibleChildren(myAcc, 0&, ByVal Count, List(0), Count) = 0& Then
                For i = LBound(List) To UBound(List)
                    If TypeOf List(i) Is Office.IAccessible Then
                        Set ChildAcc = List(i)
                        Set ReturnAcc = GetAcc(ChildAcc, myAccName, myAccRole)
                            If Not ReturnAcc Is Nothing Then Exit For
                    End If
                Next
            End If
    End If
    End If
 Set GetAcc = ReturnAcc
 End Function

Public Sub Legen()
    DoActionOfficeClipboard "Clear All" 'Tekst op de button
End Sub

Vervolgens de macro "Legen" draaien, wellicht bij een andere taalversie "Clear All" wijzigen (bron: Japanse excel site)
 
Laatst bewerkt:
Hey EvR,
Bedankt voor je code.
Het runnen daarvan geeft echter een foutmelding, zie schermfdrukFst - 20160602_009.jpg
Weet je hier raad mee ?
Voor mij is het script te complex om er zelf mee te gaan stoeien.
 
Laatst bewerkt:
Jammer, bij mij werkt het foutloos, wat is de foutmelding?
 
Laatst bewerkt:
"Fout 91 tijdens uitvoering.
Objectvariabele of variabele With is niet ingesteld."
Ik krijg hem ook (Office 365 NL)
De routine getacc is recursief. De fout treedt pas de tussen de 20e en de 25e loop op.
 
Zit hem waarschijnlijk in een taal-dingetje vwb "Collect and Paste 2.0" (kan er wellicht uit)

Clear All wijzigen naar (?) "Wis Alles"

En probeer het zo eens:

Code:
Option Explicit

 Private Declare Function AccessibleChildren Lib "oleacc" (ByVal paccContainer As Office.IAccessible, ByVal iChildStart As Long, ByVal cChildren As Long, ByRef rgvarChildren As Any, ByRef pcObtained As Long) As Long

 Private Const CHILDID_SELF = 0&
 Private Const ROLE_SYSTEM_LIST = &H21
 Private Const ROLE_SYSTEM_PROPERTYPAGE = &H26
 Private Const ROLE_SYSTEM_PUSHBUTTON = &H2B
 Private Const ROLE_SYSTEM_WINDOW = &H9

 Private Sub DoActionOfficeClipboard(ByVal AccObjName As String)
 Dim Acc As Office.IAccessible
 Dim Count As Long
 Dim i As Long

    Application.CommandBars("Office Clipboard").Visible = True
    DoEvents
        Set Acc = Application.CommandBars("Office Clipboard")
       ' Set Acc = GetAcc(Acc, "x", ROLE_SYSTEM_WINDOW) 'kan er mi ook uit
        Set Acc = GetAcc(Acc, "x", ROLE_SYSTEM_PROPERTYPAGE)
    Count = Acc.accChildCount
        If Count > 0& Then
            For i = 0 To Count
                If (Acc.accName(i) = AccObjName) And (Acc.accRole(i) = ROLE_SYSTEM_PUSHBUTTON) Then
                    Acc.accDoDefaultAction i
                Exit For
                End If
            Next
        End If
 Set Acc = Nothing
 
 End Sub

 Private Function GetAcc(myAcc As Office.IAccessible, myAccName As String, myAccRole As Long) As Office.IAccessible
 Dim ReturnAcc As Office.IAccessible
 Dim ChildAcc As Office.IAccessible
 Dim List() As Variant
 Dim Count As Long
 Dim i As Long
  Dim k As Long

    If (myAcc.accState(CHILDID_SELF) <> 32769) And _
        (myAcc.accRole(CHILDID_SELF) = myAccRole) Then
        Set ReturnAcc = myAcc
    Else
    k = k + 1
 Count = myAcc.accChildCount
    If Count > 0& Then
        ReDim List(Count - 1&)
            If AccessibleChildren(myAcc, 0&, ByVal Count, List(0), Count) = 0& Then
                For i = LBound(List) To UBound(List)
                    If TypeOf List(i) Is Office.IAccessible Then
                        Set ChildAcc = List(i)
                        Set ReturnAcc = GetAcc(ChildAcc, myAccName, myAccRole)
                            If Not ReturnAcc Is Nothing Then Exit For
                    End If
                Next
            End If
    End If
    End If
 Set GetAcc = ReturnAcc
 End Function

Public Sub Legen()
    DoActionOfficeClipboard "Clear All" 'Tekst op de button
End Sub
 
Laatst bewerkt:
Mooi!
Zo werkt het bij mij:
Code:
Option Explicit

 Private Declare Function AccessibleChildren Lib "oleacc" (ByVal paccContainer As Office.IAccessible, ByVal iChildStart As Long, ByVal cChildren As Long, ByRef rgvarChildren As Any, ByRef pcObtained As Long) As Long

 Private Const CHILDID_SELF = 0&
 Private Const ROLE_SYSTEM_LIST = &H21
 Private Const ROLE_SYSTEM_PROPERTYPAGE = &H26
 Private Const ROLE_SYSTEM_PUSHBUTTON = &H2B
 Private Const ROLE_SYSTEM_WINDOW = &H9

 Private Sub DoActionOfficeClipboard(ByVal AccObjName As String)
 Dim Acc As Office.IAccessible
 Dim Count As Long
 Dim i As Long

    Application.CommandBars("Office Clipboard").Visible = True
    DoEvents
        Set Acc = Application.CommandBars("Office Clipboard")
       ' Set Acc = GetAcc(Acc, "x", ROLE_SYSTEM_WINDOW) 'kan er mi ook uit
        Set Acc = GetAcc(Acc, "x", ROLE_SYSTEM_PROPERTYPAGE)
    Count = Acc.accChildCount
        If Count > 0& Then
            For i = 0 To Count
                If (Acc.accName(i) = AccObjName) And (Acc.accRole(i) = ROLE_SYSTEM_PUSHBUTTON) Then
                    Acc.accDoDefaultAction i
                Exit For
                End If
            Next
        End If
 Set Acc = Nothing
 
 End Sub

 Private Function GetAcc(myAcc As Office.IAccessible, myAccName As String, myAccRole As Long) As Office.IAccessible
 Dim ReturnAcc As Office.IAccessible
 Dim ChildAcc As Office.IAccessible
 Dim List() As Variant
 Dim Count As Long
 Dim i As Long
  Dim k As Long

    If (myAcc.accState(CHILDID_SELF) <> 32769) And _
        (myAcc.accRole(CHILDID_SELF) = myAccRole) Then
        Set ReturnAcc = myAcc
    Else
    k = k + 1
 Count = myAcc.accChildCount
    If Count > 0& Then
        ReDim List(Count - 1&)
            If AccessibleChildren(myAcc, 0&, ByVal Count, List(0), Count) = 0& Then
                For i = LBound(List) To UBound(List)
                    If TypeOf List(i) Is Office.IAccessible Then
                        Set ChildAcc = List(i)
                        Set ReturnAcc = GetAcc(ChildAcc, myAccName, myAccRole)
                            If Not ReturnAcc Is Nothing Then Exit For
                    End If
                Next
            End If
    End If
    End If
 Set GetAcc = ReturnAcc
 End Function

Public Sub Legen()
    DoActionOfficeClipboard "Alles wissen" 'Tekst op de button
End Sub
 
Goed om te horen dat het nu werkt, hopelijk bij TS ook, dan toch een mogelijkheid om programmatisch het office-clipboard te legen.

Dim k as long en k = k +1 kan er nog uit, was voor een testje
 
Laatst bewerkt:
welk hex nummer heeft de clear all knop ? en welke parameterwaarden ?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan