• 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.
Eric,
Dim k as long en k = k +1 kan er nog uit, was voor een testje
Dit is geen succes, moet er wel in blijven. zie Fst - 20160602_010.jpg voor de gevolgen van het weglaten.
 
Omdat Option Explicit aanstaat moet alles gedeclareerd zijn, dus ook k = k +1 weghalen
 
Als aanvulling:
Na het runnen van het script blijft het klembordvenster zichtbaar. Door een regel toe te voegen sluit dat weer.
Code:
Public Sub Legen()
    DoActionOfficeClipboard "Alles wissen" 'Tekst op de button
    Application.CommandBars("Office Clipboard").Visible = False
End Sub
 
Alles werkt nu bij mij. Uitstekend werk van de "helpers" Met gewaardeerde dank.
Wat ik nog niet doorgrond heb is de tekst op de button. Ik heb nog geen button gezien aangezien deze code deel uitmaakt van mijn hele script.
DoActionOfficeClipboard "Alles wissen" 'Tekst op de button
Ik heb nog geen button gezien aangezien deze code deel uitmaakt van mijn hele script en gerund wordt na mijn laatste instructies.
 
Dit is de tekst op de button, wanneer je dit leegmaken handmatig zou doen en dus taalafhankelijk
 
Sorrie Eric, maar hoe verkrijg ik de button ?
Uiteraard kan ik er zelf een maken en daar de macro aan koppelen, maar ik denk dat met deze code er iets anders moet gebeuren.
 
Die button heb je al, zie ook post#7 (Is standaard excel/office)
De knop Alles Wissen (Deze is dus taalafhankelijk)
 
Eric nogmaals bedankt voor je inspanningen.
Tip voor de "nabouwers" ... ik heb deze code in een aparte module gezet en met een call vanuit module 1 geactiveerd als laatste opdracht.
Succes.

PS Vanavond zal ik deze thread op "Opgelost" zetten om anderen nog in de gelegenheid te stellen te reageren.
 
@ E v R

Chapeau !!:thumb:

Het zou ook moeten kunnen met de tasks collectie in Word.

Code:
Sub M_snb()
   For Each it In Tasks
      If InStr(it.Name, "Clipboard") Then
         MsgBox it.Name
         it.SendWindowMessage &HA1, 2, 0
      End If
   Next
End Sub

NB. de msgbox staat er voor illustatiedoeleinden in: je ziet de 'caption' van het office clipboard venster.
De parameters van de opdracht die gezonden moet worden (in het voorbeeld ' &HA1, 2, 0 ') weet ik niet en weet ik ook niet te achterhalen. MS zegt dat ze daarvoor documentatie heeft.
 
Laatst bewerkt:
Tijdens het proefdraaien toch nog een probleem ondervonden.
Als het klembord leeg is en er nogmaals gerund wordt komt er een foutmelding.
Fst - 20160602_011.jpg Fst - 20160602_012.jpg
 
Dat komt door die x ipv "Collect and Paste 2.0" wijzig deze (toch) eens terug (maar wellicht hier een NL -vertaling voor)


@snb die parameters, ook geen idee
ipv "Clipboard" zou je meteen kunnen gaan voor "Clear All" edit nu zie ik Clear All niet meer als Task
 
Laatst bewerkt:
Vervang "Collect and Paste 2.0" door "Verzamelen en plakken 2.0" in excel2007nl.
 
Door het terugplaatsen van "Dim k As Long" en "k = k + 1" is de foutmelding bij herhaaldelijk ledigen verdwenen.
- bedoelde je dit met "Collect and Paste 2.0" :confused:

Dus niet... het probleem was weg maar is weer terug.
 
Laatst bewerkt:
Ik kan nergens iets vinden van "Collect and Paste 2.0" cq "Verzamelen en plakken 2.0" . In welk script zou dat moeten staan ?
 
Het vertalen "Collect and Paste 2.0" door "Verzamelen en plakken 2.0" in excel2007nl geeft geen verandering in mijn probleem (script werkt wel)
Als ik alleen de macro "Legen" activeer kan ik die herhaaldelijk laten runnen zonder problemen.
Roep ik die aan bij herhaling (leeg klembord) middels Call vanuit een andere Sub komt de foutmelding Fst - 20160602_011.jpg

aanv 01: Laat ik het Klembordscherm open staan is het probleem ook verdwenen

aanv 02: Probleem wordt veroorzaakt door Application.ScreenUpdating = False / True
De call naar "Legen" moet NA Application.ScreenUpdating = True geroepen worden.
 
Laatst bewerkt:
In Module1 (getest met windows7en en excel2007nl)

De code maakt een boom van alle handles en titels van alle windows en buttons.
De wortel van de boom is de handle met "Office" in de titel (ik neem aan dat dit alle landenversies van windows zo is).
Achter "Office" staat waarschijnlijk "clipboard" of "klembord" of nog wat anders.
Dit woord is de sleutel voor de volgende handle.
Daarna wordt het kind van deze ouder gezocht, dit is de button.
Uiteindelijk wordt op deze button met "postmessage" geklikt en het "office clipboard" gewist.

Deze code zou in alle landenversies van windows moeten werken ongeacht er 0,1,2,3,16 of 24 clips in het office clipboard staan.
Graag jullie hulp om dit te controleren.

Code:
[SIZE=1]Option Explicit

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_LBUTTONDOWN As Long = &H201&
Private Const WM_LBUTTONUP As Long = &H202&

Private Type tWindow
    Parent As Long
    Handle As Long
    Class As String
    Title As String
End Type

Private atWindow() As tWindow

Private miatWindow As Long

Private Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long

    Dim lpClassName As String
    Dim lpWindowText As String
    Dim lResult As Long
    Dim sClassName As String
    Dim sWindowText As String

    miatWindow = miatWindow + 1

    ReDim Preserve atWindow(1 To miatWindow)

    lpClassName = Space(256)
    lResult = GetClassName(hWnd, lpClassName, 256)
    sClassName = Left(lpClassName, lResult)

    lpWindowText = Space(100)
    lResult = GetWindowText(hWnd, lpWindowText, 100)
    sWindowText = Left(lpWindowText, lResult)

    With atWindow(miatWindow)
        .Parent = GetParent(hWnd)
        .Handle = hWnd
        .Class = sClassName
        .Title = sWindowText
    End With

    EnumChildProc = 1
End Function


Public Sub ClearOfficeClipboardMultiLanguage() 'am_2016
'clears the office clipboard in all windows languages

    Const sOffice As String = "Office" 'title of root contains "Office"

    Dim atWindowIndex(1 To 3) As Long
    Dim hWnd As Long
    Dim hWndButton As Long
    Dim hWndClipboard As Long
    Dim iatWindow As Long
    Dim lParameter As Long
    Dim sClipboard As String

    Application.CommandBars("Office Clipboard").Visible = True 'show office clipboard

    DoEvents

    hWnd = FindWindow("XLMAIN", Application.Caption)
    hWnd = FindWindowEx(hWnd, 0, "EXCEL2", "")

    EnumChildWindows hWnd, AddressOf EnumChildProc, ByVal 0& 'build windowdata tree

    For iatWindow = 1 To miatWindow 'iterate window data tree
        If Left(atWindow(iatWindow).Title, Len(sOffice)) = sOffice Then 'begins with "Office"
            atWindowIndex(1) = iatWindow
            sClipboard = Trim(Mid(atWindow(iatWindow).Title, Len(sOffice) + 1)) 'get "Clipboard" or word in other language
        End If
    Next
    For iatWindow = 1 To miatWindow
        If Left(atWindow(iatWindow).Title, Len(sClipboard)) = sClipboard Then 'begins with "Clipboard" or word in other language
            atWindowIndex(2) = iatWindow
            hWndClipboard = atWindow(iatWindow).Handle
        End If
    Next
    For iatWindow = 1 To miatWindow
        If atWindow(iatWindow).Parent = hWndClipboard Then '"Button" is child of "Clipboard"
            atWindowIndex(3) = iatWindow
            hWndButton = atWindow(iatWindow).Handle
        End If
    Next
    hWnd = FindWindowEx(hWnd, 0, atWindow(atWindowIndex(1)).Class, atWindow(atWindowIndex(1)).Title) 'get window with class and title in their language
    hWnd = FindWindowEx(hWnd, 0, atWindow(atWindowIndex(2)).Class, atWindow(atWindowIndex(2)).Title) 'get window with class and title in their language and their amount of clips
    hWnd = FindWindowEx(hWnd, 0, atWindow(atWindowIndex(3)).Class, atWindow(atWindowIndex(3)).Title) 'get button

    lParameter = 18 * 65536 + 120 'screen coords
    PostMessage hWnd, WM_LBUTTONDOWN, 0&, lParameter 'push button
    PostMessage hWnd, WM_LBUTTONUP, 0&, lParameter 'release button

    Application.CommandBars("Office Clipboard").Visible = False 'hide office clipboard
    
End Sub[/SIZE]
 

Bijlagen

Laatst bewerkt:
alphamax en dit alles om "alleen maar" het Office klembord leeg te krijgen ! ? :rolleyes:

Ik heb je code in een testbestand gezet. Hieruit blijkt het volgende:
1. Als het Office klembordscherm open staat (visible) wordt de inhoud gewist,
2. Met een niet zichtbaar klembordscherm wordt dat niet leeggemaakt.
 
Zet eens een "DoEvents" op een regel na "Application.CommandBars("Office Clipboard").Visible = True 'show office clipboard"

Als het zo makkelijk was, dan had jij het allang zelf opgelost en was deze vraag niet zo lang ;)
 
Laatst bewerkt:
Punt 1 en 2 werken bij mij (windows7en en excel2007nl).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan