René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Copy string to clipboard [VBA]

option explicit

declare function GlobalUnlock       lib "kernel32" (byVal hMem As long) As long
declare function GlobalLock         lib "kernel32" (byVal hMem As long) As long
declare function GlobalAlloc        lib "kernel32" (byVal wFlags as long, byVal dwBytes as long   ) as long

declare function CloseClipboard     lib "user32"   (                                              ) as long
declare function  OpenClipboard     lib "user32"   (byVal hWnd as long                            ) as long
declare function EmptyClipboard     lib "user32"   (                                              ) as long
declare function   SetClipboardData lib "user32"   (byVal wFormat as long, byVal hMem as long     ) as long

declare function lstrcpy            lib "kernel32" (byVal lpString1 as any, byVal lpString2 as any) as long

private const GHND    = &H42
private const CF_TEXT =    1

sub clipboard_1() 
  call string_to_clipboard("Just check it, if it worked....")
end sub


private sub string_to_clipboard(str as string)

  dim hGlobalMemory  as long
      hGlobalMemory = GlobalAlloc(GHND, len(str) + 1)

  dim lpGlobalMemory as long
      lpGlobalMemory = GlobalLock(hGlobalMemory)
      lpGlobalMemory = lstrcpy(lpGlobalMemory, str)


      if GlobalUnlock(hGlobalMemory) <> 0 Then
          msgBox "Couldn't GlobalUnlock"
      end if

      if OpenClipboard(0&) = 0 Then
          msgBox "Couldn't open Clipboard"
          exit sub
      end if
    
  dim dummy as long
      dummy = EmptyClipboard()


  dim hClipMemory as long
      hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

      if CloseClipboard() = 0 Then
         msgBox "Clipboard could not be closed"
      end if

end sub