PDA

Vollständige Version anzeigen : Clipboard Fehlermeldung "Objekt erforderlich"


Gast
08.05.2004, 09:53
Ich erhalte immer die Fehlermeldung "Objekt erforderlich". Kann mir einer helfen?

Code
Private Sub Befehl0_Click()
Private Sub FromClipBoard_Click()
On Error GoTo Er
Me!Ausgabefeld = Clp.Text

Ex: Exit Sub
Er: MsgBox Err.Description
Resume Ex

End Sub

______________________________________________

Modul


Option Compare Database
Option Explicit

Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Const GHND = &H42
Private Const CF_TEXT = 1
Private Const MAXSIZE = 4096
Property Get Text() As String
Dim Tmp As String, lpClpMem As Long, hClpMem As Long
Text = ""
If OpenClipboard(0&) = 0 Then
MsgBox "Zwischenablage konnte nicht geöffnet werden."
Else
hClpMem = GetClipboardData(CF_TEXT)
If hClpMem <> 0& Then
lpClpMem = GlobalLock(hClpMem)
If lpClpMem <> 0& Then
Tmp = Space(MAXSIZE)
lstrcpy Tmp, lpClpMem
GlobalUnlock hClpMem
Text = Mid(Tmp, 1, InStr(1, Tmp, Chr(0), 0) - 1)
Else
MsgBox "Speicher konnte nicht gesperrt werden. Daten wurden nicht kopiert."
End If
End If
CloseClipboard
End If

End Property
Property Let Text(S As String)
Dim hGblMem As Long, lpGblMem As Long, hClpMem As Long

hGblMem = GlobalAlloc(GHND, Len(S) + 1)
lpGblMem = GlobalLock(hGblMem)
lpGblMem = lstrcpy(lpGblMem, S)
If GlobalUnlock(hGblMem) <> 0 Then
MsgBox "Speicher konnte nicht entsperrt werden. Daten wurden nicht kopiert"
Else
If OpenClipboard(0&) = 0 Then
MsgBox "Zwischenablage konnte nicht geöffnet werden. Daten wurden nicht kopiert."
Else
EmptyClipboard
hClpMem = SetClipboardData(CF_TEXT, hGblMem)
CloseClipboard
End If
End If
End Property
Public Function Clear()
If OpenClipboard(0&) = 0 Then
MsgBox "Zwischenablage konnte nicht geöffnet werden. Daten wurden nicht kopiert."
Else
EmptyClipboard
End If
CloseClipboard
End Function

Sascha Trowitzsch
08.05.2004, 09:58
Speichere deinen Modulcode in ein Klassenmodul, nicht einem normalen.
Gib ihm den Namen clsClipboard.
Ändere deinen Formularcode so ab:

Private Sub Befehl0_Click()
Dim Clp As New clsClipboard
On Error GoTo Er
Me!Ausgabefeld = Clp.Text

Ex: Exit Sub
Er: MsgBox Err.Description
Resume Ex

End Sub

Die Fehlermeldung kam, weil Clp kein deklariertes (Klassen-)Objekt war.

Ciao, Sascha

Gast
08.05.2004, 10:07
Hallo Sascha,

danke erst einmal.

Das mit dem normalen.- in ein Klassenmodul übertrifft leider meine Fähigkeiten, oder statt

"Property Get Text() As String"

dann "Funktion Text() As String"


????? :-(

Sascha Trowitzsch
08.05.2004, 10:36
Sicher. Statt einem Klassenmodul kannst du auch ein normales verwenden und das Property durch Function ersetzen. Nur sollte die dann möglichst nicht "Text" heißen. Nimm z.B. "Function CLPText() As String". Das "End Property" musst du dann natürlich auch noch durch "End Function" ersetzen.
Dein Aufruf hieße dann "Me!Ausgabefeld = CLPText"

Ciao, Sascha