Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Accessing clipboard through VBA


Is there a way to access what's in the clipboard from a macro? FOr
example, I'd like to copy a range of cells, select a new location, and
paste the transpose of the original range. If I record this as a
macro, I have to hard code the range that gets copied.

I don't want to use Paste Special every time, it's too cumbersome.

I wasn't able to find any info on this in the help files.


--
pjelliffe
------------------------------------------------------------------------
pjelliffe's Profile: http://www.excelforum.com/member.php...o&userid=34315
View this thread: http://www.excelforum.com/showthread...hreadid=540802

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 59
Default Accessing clipboard through VBA

Look for DataObject in Excel's help.
--
Stefano Gatto


"pjelliffe" wrote:


Is there a way to access what's in the clipboard from a macro? FOr
example, I'd like to copy a range of cells, select a new location, and
paste the transpose of the original range. If I record this as a
macro, I have to hard code the range that gets copied.

I don't want to use Paste Special every time, it's too cumbersome.

I wasn't able to find any info on this in the help files.


--
pjelliffe
------------------------------------------------------------------------
pjelliffe's Profile: http://www.excelforum.com/member.php...o&userid=34315
View this thread: http://www.excelforum.com/showthread...hreadid=540802


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,452
Default Accessing clipboard through VBA

This API will do it:

Private Const GHND = &H42
Private Const CF_TEXT = 1

Private Declare Function GlobalAlloc _
Lib "kernel32" (ByVal wFlags&, _
ByVal _
dwBytes As Long) As Long
Private Declare Function GlobalLock _
Lib "kernel32" (ByVal hMem As Long) _
As Long
Private Declare Function GlobalSize _
Lib "kernel32" (ByVal hMem As Long) _
As Long
Private Declare Function lstrcpy _
Lib "kernel32" (ByVal lpString1 As Any, _
ByVal lpString2 As Any) As Long
Private Declare Function GlobalUnlock _
Lib "kernel32" (ByVal hMem As Long) _
As Long
Private Declare Function OpenClipboard _
Lib "user32" (ByVal hwnd As Long) _
As Long
Private Declare Function CloseClipboard _
Lib "user32" () As Long
Private Declare Function GetClipboardData _
Lib "user32" (ByVal wFormat As _
Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData _
Lib "user32" (ByVal wFormat _
As Long, _
ByVal hMem As Long) As Long

Function ClipBoard_GetText() As String

Dim hClipMemory As Long
Dim lpClipMemory As Long
Dim strCBText As String
Dim retval As Long
Dim lngSize As Long

If OpenClipboard(0&) < 0 Then
'Obtain the handle to the global
'memory block that is referencing the text
'----------------------------------------
hClipMemory = GetClipboardData(CF_TEXT)
If hClipMemory < 0 Then
'Lock Clipboard memory so we can
'reference the actual data string
'--------------------------------
lpClipMemory = GlobalLock(hClipMemory)
If lpClipMemory < 0 Then
lngSize = GlobalSize(lpClipMemory)
strCBText = Space$(lngSize)
retval = lstrcpy(strCBText, lpClipMemory)
retval = GlobalUnlock(hClipMemory)
'Peel off the null terminating character
'---------------------------------------
strCBText = Left$(strCBText, InStr(1, strCBText, Chr$(0),
0) - 1)
Else
MsgBox "Could not lock memory to copy string from."
End If
End If
Call CloseClipboard
End If

ClipBoard_GetText = strCBText

End Function

Public Function ClipBoard_SetText(strCopyString As String) As Boolean

Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim hClipMemory As Long

'Allocate moveable global memory
'-------------------------------
hGlobalMemory = GlobalAlloc(GHND, Len(strCopyString) + 1)

'Lock the block to get a far pointer to this memory
'--------------------------------------------------
lpGlobalMemory = GlobalLock(hGlobalMemory)

'Copy the string to this global memory
'-------------------------------------
lpGlobalMemory = lstrcpy(lpGlobalMemory, strCopyString)

'Unlock the memory and then copy to the clipboard
'------------------------------------------------
If GlobalUnlock(hGlobalMemory) = 0 Then
If OpenClipboard(0&) < 0 Then
Call EmptyClipboard
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
ClipBoard_SetText = CBool(CloseClipboard)
End If
End If

End Function


Sub test()

ClipBoard_SetText "testing"

MsgBox ClipBoard_GetText

End Sub


RBS


"pjelliffe" wrote
in message ...

Is there a way to access what's in the clipboard from a macro? FOr
example, I'd like to copy a range of cells, select a new location, and
paste the transpose of the original range. If I record this as a
macro, I have to hard code the range that gets copied.

I don't want to use Paste Special every time, it's too cumbersome.

I wasn't able to find any info on this in the help files.


--
pjelliffe
------------------------------------------------------------------------
pjelliffe's Profile:
http://www.excelforum.com/member.php...o&userid=34315
View this thread: http://www.excelforum.com/showthread...hreadid=540802


  #4   Report Post  
Posted to microsoft.public.excel.programming
JMB JMB is offline
external usenet poster
 
Posts: 2,062
Default Accessing clipboard through VBA

You could attach this macro to a button on your toolbar, then copy your
range, select your destination, and click the button

Sub Macro1()
Selection.PasteSpecial Paste:=xlAll, _
Operation:=xlNone, SkipBlanks:=False, _
Transpose:=True
Application.CutCopyMode = False
End Sub

"pjelliffe" wrote:


Is there a way to access what's in the clipboard from a macro? FOr
example, I'd like to copy a range of cells, select a new location, and
paste the transpose of the original range. If I record this as a
macro, I have to hard code the range that gets copied.

I don't want to use Paste Special every time, it's too cumbersome.

I wasn't able to find any info on this in the help files.


--
pjelliffe
------------------------------------------------------------------------
pjelliffe's Profile: http://www.excelforum.com/member.php...o&userid=34315
View this thread: http://www.excelforum.com/showthread...hreadid=540802


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Where does Ms XL store the clipboard ? or where does MS Windowsstore clipboard ? Subu Setting up and Configuration of Excel 0 May 5th 09 01:20 PM
Clipboard empty but still get waring that clipboard is full Steve Excel Discussion (Misc queries) 0 June 17th 08 09:05 PM
ClearContents or ClearFormats also clears Clipboard. How can I keep the clipboard? [email protected] Excel Programming 5 December 16th 05 02:30 AM
Accessing Windows clipboard during runtime Conan Kelly[_2_] Excel Programming 2 June 29th 05 09:15 PM
Accessing the clipboard after copyface Googleplex Excel Programming 1 December 7th 03 03:55 AM


All times are GMT +1. The time now is 11:08 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"