ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 22.02.2000

Diese Seite wurde zuletzt aktualisiert am 22.02.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für IE, Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss der AVB-Web-Site zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Ja, wo klemmt's denn?

Zurück...


Anzeige

(-hg) mailto:hg_vbaclipboard@aboutvb.de

Zugriff auf die Zwischenablage per Code? Das scheint unter VBA in den Microsoft Office-Anwendungen ein kleines Geheimnis zu sein und ist wohl für VBScript (z.B. im Windows Scripting Host) völlig unbekannt. Im "puren" Visual Basic steht dagegen das schlichte wie ebenso funktionstüchtige Clipboard-Objekt zur Verfügung. Darüber können Sie Daten in den allergängigsten Formaten in die Zwischenablage legen und auch wieder auslesen.

Warum ich von einem kleinen Geheimnis in VBA spreche? Weil Sie dort den Zugriff auf die Zwischenablage erst dann bekommen, wenn Sie die MSForms-Bibliothek als Verweis laden und das darin enthaltene DataObject verwenden. Aber weder in der allgemeinen Office-Bibliothek noch in den Office-Anwendungen werden sie ein entsprechendes Objekt finden können.

Um diesem Mangel abzuhelfen, und um auch in Scripting-Umgebungen die Zwischenablage zur Verfügung zu stellen, habe ich die VB-eigene Zwischenablage in eine kleine ActiveX-Server-DLL verpackt. Laden Sie einfach in Ihren VBA-Projekten einen Verweis darauf, oder legen Sie in einem Script mit CreateObject("avbClipboardDLL.avbClipboard") ein entsprechendes Objekt an.

Das avbClipboard-Objekts verwenden Sie auf exakt gleiche Weise wie MSDN-Library - VB-Clipboarddas originale VB-Clipboard-Objekt. Der einzige winzige Unterschied besteht darin, dass die Format-Konstanten jetzt die Vorsilbe "avb" tragen - die originalen Konstanten vbCFxxx stehen Ihnen ja außerhalb einer VB-Umgebung nicht zur Verfügung.

Da das Objekt ein globales Objekt darstellt, brauchen Sie es unter VBA noch nicht einmal explizit zu instanzieren - Sie verwenden es einfach direkt, sozusagen "aus heiterem Himmel":

Debug.Print avbClipboard.GetText

Natürlich können Sie es auch unter VBA dynamisch per CreateObject anlegen - aber wozu der Umstand?

Einzige wichtige Voraussetzung für die Verwendung des avbClipboard-Objekts ist, dass auf dem betreffenden System die VB6-Runtime-Dateien installiert sind. Die Version, die Sie hier herunterladen können (siehe Ende dieses Beitrags), enthält ein Visual Basic 6-Projekt und die DLL ist auch mit VB6 kompiliert. Es sollte jedoch kein Problem sein, das das Klassen-Modul avbClipboard.cls auch in Visual Basic 5 in ein ActiveX-DLL-Projekt zu laden und zu kompilieren.

Wie Sie aus dem folgenden Code der Klasse avbClipboard ersehen können, wird in der Klasse avbClipboard lediglich die originale Funktionalität ohne jede Einschränkung eins zu eins offengelegt. Die notwendige Fehlerbehandlung nimmt dabei sogar mehr Platz in Anspruch, als die eigentliche Funktionalität:

Public Enum avbCFConstants
  avbCFLink = &HBF00
  avbCFRTF = &HBF01
  avbCFText = 1
  avbCFBitmap = 2
  avbCFMetafile = 3
  avbCFDIB = 8
  avbCFPalette = 9
End Enum

Public Sub Clear()
  Clipboard.Clear
End Sub

Public Function GetData _
 (Optional ByVal Format As avbCFConstants = avbCFBitmap) _
 As IPictureDisp
  On Error Resume Next
  Set GetData = Clipboard.GetData(Format)
  If Err.Number Then
    Err.Raise Err.Number, "avbClipboardDLL.GetData", Err.Description
  End If
End Function

Public Function GetFormat(ByVal Format As avbCFConstants) As Boolean
  On Error Resume Next
  GetFormat = Clipboard.GetFormat(Format)
  If Err.Number Then
    Err.Raise Err.Number, "avbClipboardDLL.GetFormat", _
     Err.Description
  End If
End Function

Public Function GetText _
 (Optional ByVal Format As avbCFConstants = avbCFText) As String
  On Error Resume Next
  GetText = Clipboard.GetText(Format)
  If Err.Number Then
    Err.Raise Err.Number, "avbClipboardDLL.GetText", _
     Err.Description
  End If
End Function

Public Sub SetData _
 (Picture As IPictureDisp, Optional ByVal Format As avbCFConstants _
 = avbCFBitmap)
  On Error Resume Next
  Clipboard.SetData Picture, Format
  If Err.Number Then
    Err.Raise Err.Number, "avbClipboardDLL.SetData", _
     Err.Description
  End If
End Sub

Public Sub SetText _
 (Str As String, Optional ByVal Format As avbCFConstants = avbCFText)
  On Error Resume Next
  Clipboard.SetText Str, Format
  If Err.Number Then
    Err.Raise Err.Number, "avbClipboardDLL.SetText", _
     Err.Description
  End If
End Sub

Nachgerüstet: Zwischenablage für VBA-Programme


Das Projekt avbClipboard (clpbcode.zip - ca. 2,2 KB)

Projekt, DLL und Setup (ohne VB-Runtime) (clpboard.zip - ca. 256 KB)



VBA-Übersicht

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer