Microsoft KB Archive/138910

= ACC: How to Retrieve Information from the Clipboard (95/97) =

Article ID: 138910

Article Last Modified on 1/19/2007

-

APPLIES TO


 * Microsoft Access 95 Standard Edition
 * Microsoft Access 97 Standard Edition

-



This article was previously published under Q138910



SUMMARY
Advanced: Requires expert coding, interoperability, and multiuser skills.

Microsoft Access does not have a command to retrieve information from the Clipboard. To retrieve information from the Clipboard, you need to define a Visual Basic for Applications function that calls several Windows API functions. This article defines a function that retrieves text from the Clipboard.

This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to your version of the "Building Applications with Microsoft Access" manual.



MORE INFORMATION
To retrieve information from the Clipboard, follow these steps.

NOTE: You may have some Microsoft Windows API functions defined in an existing Microsoft Access library; therefore, your declarations may be duplicates. If you receive a duplicate procedure name error message, remove or comment out the declarations statement in your code.

  Create a module and type the following lines in the Declarations section: Declare Function OpenClipboard Lib "User32" (ByVal hwnd As Long) _ As Long Declare Function CloseClipboard Lib "User32" As Long Declare Function GetClipboardData Lib "User32" (ByVal wFormat As _        Long) As Long Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal _        dwBytes As Long) As Long Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _ As Long Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) _ As Long Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) _ As Long Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _        ByVal lpString2 As Any) As Long

Public Const GHND = &H42 Public Const CF_TEXT = 1 Public Const MAXSIZE = 4096   Type the following procedure: Function ClipBoard_GetData Dim hClipMemory As Long Dim lpClipMemory As Long Dim MyString As String Dim RetVal As Long

If OpenClipboard(0&) = 0 Then MsgBox "Cannot open Clipboard. Another app. may have it open" Exit Function End If

' Obtain the handle to the global memory ' block that is referencing the text. hClipMemory = GetClipboardData(CF_TEXT) If IsNull(hClipMemory) Then MsgBox "Could not allocate memory" GoTo OutOfHere End If

' Lock Clipboard memory so we can reference ' the actual data string. lpClipMemory = GlobalLock(hClipMemory)

If Not IsNull(lpClipMemory) Then MyString = Space$(MAXSIZE) RetVal = lstrcpy(MyString, lpClipMemory) RetVal = GlobalUnlock(hClipMemory)

' Peel off the null terminating character. MyString = Mid(MyString, 1, InStr(1, MyString, Chr$(0), 0) - 1) Else MsgBox "Could not lock memory to copy string from." End If

OutOfHere:

RetVal = CloseClipboard ClipBoard_GetData = MyString

End Function  To test this function, copy one of the lines from the function to the Clipboard, type the following line in the Debug window, and then press ENTER.

?ClipBoard_GetData

Note that the line you copied is displayed in the Debug window.

