Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Office Zwischenablage per VBA löschen

Forumthread: Office Zwischenablage per VBA löschen

Office Zwischenablage per VBA löschen
21.01.2025 21:46:30
2000ede
Hallo,

ich hatte einige Anleitungen im Internet ausprobiert - die alle nicht funktionierten, bis auf die unten aufgeführt. Die klappte super. Jetzt habe ich mein Office aktualisiert (auf Microsoft® Excel® für Microsoft 365 MSO (Version 2408 Build 16.0.17928.20336) 32 Bit) und nun bricht das Script mit Fehler ab.

Er meckert diese Zeile an mit "Objekt erforderlich":
AccessibleChildren cmnB, Choose(j, 0, 3, 0, 3, 0, 3, 1), 1, cmnB, 1

Ich habe den Code nur übernommen - kenne mich damit nicht aus. Vor Update lief er sauber.

Danke für die Hilfe!



#If VBA7 Then
Private Declare PtrSafe 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
Public Const myVBA7 As Long = 1
#Else
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
Public Const myVBA7 As Long = 0
#End If

Public Sub EvRClearOfficeClipBoard()



Dim cmnB, IsVis As Boolean, j As Long, Arr As Variant
Arr = Array(4, 2) '4 and 2 for 32 bit, 7 and 0 for 64 bit
Set cmnB = Application.CommandBars("Office Clipboard")
IsVis = cmnB.Visible
If Not IsVis Then
cmnB.Visible = True
DoEvents
End If

For j = 1 To Arr(0 + myVBA7)
AccessibleChildren cmnB, Choose(j, 0, 3, 0, 3, 0, 3, 1), 1, cmnB, 1
Next

cmnB.accDoDefaultAction CLng(Arr(2 + myVBA7))

Application.CommandBars("Office Clipboard").Visible = IsVis

End Sub
Anzeige

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 01:26:27
ralf_b
was passt dir denn an der Antwort im VBA-forum nicht?
AW: Office Zwischenablage per VBA löschen
22.01.2025 13:26:59
Oppawinni
Vielleicht solltest du mal schauen, welche CommandBars existieren und wie die heißen?

Sub unit()


Dim cmdBar As Object
For Each cmdBar In Application.CommandBars
Debug.Print cmdBar.Name
Next

End Sub
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 16:19:20
volti
Hallo,

probiere es mal so.....

PS: Wenn das Array mit nur zwei Elementen gefüllt wird, kann man bei VBA7 nicht auf das dritte oder vierte zugreifen.

Wenn die Zwischenablage leer ist, kommt es zum Fehler, den fangen wir einfach mit der Error-Anweisung ab.

Code:


Option Explicit #If VBA7 Then Private Declare PtrSafe 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 Public Const mVBA7 As Long = 1 #Else 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 Public Const mVBA7 As Long = 0 #End If Public Sub EvRClearOfficeClipBoard() Dim cmnB, IsVis As Boolean, j As Long, Arr As Variant Arr = Array(4, 7, 2, 0) '4 und 2 für 32 bit, 7 und 0 für 64 bit On Error GoTo Fehler Set cmnB = Application.CommandBars("Office Clipboard") IsVis = cmnB.Visible If Not IsVis Then cmnB.Visible = True DoEvents End If For j = 1 To Arr(0 + mVBA7) AccessibleChildren cmnB, Choose(j, 0, 3, 0, 3, 0, 3, 1), 1, cmnB, 1 Next On Error Resume Next cmnB.accDoDefaultAction CLng(Arr(2 + mVBA7)) Application.CommandBars("Office Clipboard").Visible = IsVis Fehler: End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 16:22:24
Oppawinni
Ja, das dürfte Sinn machen.
Ich frage mich nur, wie der "alte Code" je funktioniert haben soll.
AW: Office Zwischenablage per VBA löschen
22.01.2025 16:58:07
volti
Hallo Oppawinni,

ja, das frage ich mich auch :-)

Aber Dein Ansatz, die Arrayinhalte auszutauschen war schon richtig. Allerdings dann auch den weiteren Code anpassen.

Diese Version hier reicht mir für mein 64Bit-Excel. Sollte auch bei 32Bit VBA7 auch funktionieren.

Code:


Private Declare PtrSafe 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 Public Sub EvRClearOfficeClipBoard() Dim cmnB, bIsVisible As Boolean, j As Long, Arr As Variant Arr = Array(7, 0) '7 und 0 für 64 bit On Error GoTo Fehler Set cmnB = Application.CommandBars("Office Clipboard") bIsVisible = cmnB.Visible If Not bIsVisible Then cmnB.Visible = True DoEvents End If For j = 1 To Arr(0) AccessibleChildren cmnB, Choose(j, 0, 3, 0, 3, 0, 3, 1), 1, cmnB, 1 Next On Error Resume Next cmnB.accDoDefaultAction CLng(Arr(1)) Application.CommandBars("Office Clipboard").Visible = bIsVisible Fehler: End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 17:11:45
Oppawinni
Ja, ich hätte das Ding tatsächlich mal ins Excel laden sollen, aber eigentlich wollte ich mich da nicht wirklich groß rein hängen.
So im Nachhinein betrachtet, hab ich mich da ganz schön aufs Glatteis führen lassen...
AW: Office Zwischenablage per VBA löschen
22.01.2025 17:14:45
2000ede
ich habe ein kleines Folgeproblem....
er löscht die Zwischenablage nur, wenn ich sie links geöffnet habe.

Er ignoriert: Application.CommandBars("Office Clipboard").Visible = True

Ich muss sie manuell öffnen, dann klappt alles. Auch das schließen.

Aber ich muss selber noch prüfen. Vielleicht übersehe ich etwas.
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 19:09:45
volti
Hallo,

teste mal, ob diese Minimalversion besser ist.

Das Commandbarobjekt in oCB wird ab und zu unkontrolliert gelöscht. Keine Ahnung, warum.
accDoDefaultAction funktioniert auch nicht immer.

Code:


Private Declare PtrSafe 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 Sub ClearOfficeClipBoard() Dim oCB As Variant, oCB2 As Variant, bIsVisible As Boolean, i As Long On Error Resume Next Set oCB = Application.CommandBars("Office Clipboard") Set oCB2 = oCB bIsVisible = oCB2.Visible oCB2.Visible = True DoEvents For i = 1 To 7 AccessibleChildren oCB, Choose(i, 0, 3, 0, 3, 0, 3, 1), 1, oCB, 1 Next oCB.accDoDefaultAction 0& oCB2.Visible = bIsVisible End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 19:39:24
2000ede
Moin Karl-Heinz,

gleiches Ergebnis: Funktioniert, so lange links die Zwischenablage offen ist.
Ist sie nicht offen, geht das Script auch sauber durch, es wird aber nichts gelöscht.
AW: Office Zwischenablage per VBA löschen
22.01.2025 19:46:17
volti
Ok,

bei mir wird die Office-Zwischenablage, wenn sie nicht sichtbar ist, eingeschaltet und links angezeigt und auch später wieder ausgeschaltet.

Set oCB = Application.CommandBars("Office Clipboard")
oCB ist manchmal leer, oder später kurz vorm Löschen leer, keine Ahnung warum. Deshalbhatte ich ja oCB2 eingeführt.

Da habe ich dann jetzt keine Idee mehr....

Gruß KH
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 19:48:02
volti
Und der neue Code, den Du im VBA-Form gepostet hast, funktioniert (immer)?
AW: Office Zwischenablage per VBA löschen
22.01.2025 19:59:25
2000ede
Es ist schon komisch - dein Code funktioniert nur, wenn die Zwischenablage offen bzw links sichtbar ist.

Er funktioniert auch, wenn ich das Script per Bugging per Hand durchgehe (F8).
( dies vorne eingefügt: Application.CommandBars("Office Clipboard").Visible = True )
Nehme ich das gleiche Scipt und lasse es automatisch durchlaufen, wird die Zwischenablage angezeigt, aber nicht gelöscht.


Deine weitere Frage:
"Und der neue Code, den Du im VBA-Form gepostet hast, funktioniert (immer)? "
-> Das ist deine Lösung, die hatte ich sofort eingetragen. Danach habe ich erst das jetztige Folgeproblem gesehen.
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 16:26:46
2000ede
SUPER!
Das klappt!!!!

Danke an euch beiden, Volti und Oppawinni !

Der alte code hatte bis vor dem Update sauber funktioniert. Mit dem oben klappt es nun sauber wieder.

D A N K E
AW: Office Zwischenablage per VBA löschen
22.01.2025 13:34:48
2000ede
Hallo Danke für Deine Anwort!

Auf deinen Code wird zurückgegeben:
Status Bar
Ribbon

---

Entweder ich habe mich gestern versehen oder heute ist eine andere Fehlermeldung da:

Er meckert (nun) diese Zeile an:
cmnB.accDoDefaultAction CLng(Arr(2 + myVBA7))

Fehlermeldung: Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs

Für weitere Hinweise bin ich dankbar!
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 13:39:46
2000ede
p.s.:

Zeichne ich per Recorder auf, findet er das "Office Clipboard"
(den Löschvorgang dokumentiert er nicht)

Range("B49").Select
Application.CommandBars("Office Clipboard").Visible = False
Range("D45").Select
AW: Office Zwischenablage per VBA löschen
22.01.2025 13:53:09
Oppawinni
..
Status Bar
Ribbon

Das sind wahrscheinlich die letzten beiden Zeilen.
Da hättest du vielleicht einmal nach oben scrollen sollen.
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 14:29:01
2000ede
Mea Culpa!
Ja, da sind sehr sehr viele....

Office Clipboard ist auch dabei
AW: Office Zwischenablage per VBA löschen
22.01.2025 14:44:20
Oppawinni
Mir erscheint die Zeile
For j = 1 To Arr(0 + myVBA7)
suspekt.
Ich würde vermuten, dass da stehen sollte
For j = 1 To Ubound(Arr,1)
Denn man muss ja, das macht das Programm nicht, die Dimensionen des Array je nach System unterschiedlich dimensionieren.
Ich stecke aber in dem Thema aber auch nicht wirklich drin.
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 14:47:53
2000ede
schade, hat auch nicht damit geklappt. Wie gesagt, vor dem Office Update klappte es ja.

ich suche weiter. Danke dir auf jeden Fall sehr!
AW: Office Zwischenablage per VBA löschen
22.01.2025 14:53:09
Oppawinni
Aber vielleicht musst du ja nur Arr = Array(7, 0) einstellen (statt Arr = Array(4, 2)
AW: Office Zwischenablage per VBA löschen
22.01.2025 15:02:35
2000ede
leider nein.
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 15:06:12
Oppawinni
Da bin ich dann wirklich überfragt, denn ich habe kein Office 365.
"Klappt nicht" ist halt auch schwer zu interpretieren, so ganz ohne Kristallkugel.
AW: Office Zwischenablage per VBA löschen
22.01.2025 15:10:13
2000ede
sorry,
bei den Änderungen kommt immer die "alte" Fehlermeldung:


"Laufzeitfehler 9 - Index ist außerhalb des gültigen Bereichs"
Markierte Zeile beim Debugging:
cmnB.accDoDefaultAction CLng(Arr(2 + myVBA7))
Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 16:16:42
Oppawinni
ach, sowas
Ich liege natürlich falsch... bin doch etwas aus dem Training. Ubound, so ein Quatsch.
Das Array hat zwei Elemente mit den Indizes 0 und 1 und den Werten 4 und 2, bzw. 7 und 0, je nachdem wie du das Array belegt hast.
Das heißt für mich, dass das eigentlich früher schon nicht funktioniert haben kann....

Ich denke, dass das einfach:

cmnB.accDoDefaultAction CLng(Arr(1))

sein muss.

Anzeige
AW: Office Zwischenablage per VBA löschen
22.01.2025 16:22:22
2000ede
Damit kommt
Laufzeitfehler 5
Ungültiger Prozeduraufruf oder ungültiges Argument

bei deiner Zeile.


lass uns vorerst aufgeben. ich möchte deine Zeit nicht weiter beanspruchen. Ich versuche es aber weiter.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige