Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 194
Default Why is my clipboard empty?

I wrote a macro to filter my worksheet and hide certain columns, then sort
and select the results and copy to the clipboard so I can paste into Word.
It worked fine - until I stuck in some more code to un-filter, un-sort, and
un-hide everything to reset the workbook. Then, when the code opens my Word
doc, the clipboard is empty. What am I doing wrong?

Ed

Here's the relevant sections. This works if I comment out between the ***.

' Put range on clipboard
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select
Selection.Copy

***

' Reset worksheet
' Unhide everything
Sheets("Sheet1").Activate

Sheets("Sheet1").AutoFilterMode = False

With Cells
.EntireColumn.Hidden = False
.EntireRow.Hidden = False
End With

' Resort to TIR No.
' Module 12
SortTIRNo

***

' Open template, which has Auto_Open macro
' to paste clipboard and make EFF tables
doc = "C:\Documents and
Settings\username\Desktop\Reports\TablesTemplate.d oc"
Set WD = CreateObject("Word.Application")
WD.Documents.Open doc
WD.Visible = True

End Sub


  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,718
Default Why is my clipboard empty?

If the macro does almost anything to the sheet after the copy, Excel will
exist copy mode. You should do the copy as late as possible before the
paste.

--
Jim Rech
Excel MVP


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 194
Default Why is my clipboard empty?

Ouch - I was assuming the code would mimic operator activity, becuse I can
copy, then do other stuff, then pull up Word and manually paste. But it
doesn't surprise me, because I've run into that on other things. Thanks for
the info, Jim.

I was concerned that, because the Selection.Copy action leaves the cells
selected when I paste and do other things, the possibilities of an accident
erasing my data are too great for comfort. Also, before I copy, I have to
do a sort out of the normal data order. So I wanted to reset the sheet
before it got mangled or closed and saved incorrectly. What I did in the
meantime - and it looks like it may be permanent - was to set a message box
right after calling Word; I'm left with Word open so I can do stuff there,
but Excel is waiting in the background with a MsgBox that must be closed
before the data can be touched. I then moved the reset code after the
MsgBox, which will be ok'd after I finish with Word. Does that sound like
the best compromise? Or am I leaving myself open for something?

Ed

"Jim Rech" wrote in message
...
If the macro does almost anything to the sheet after the copy, Excel will
exist copy mode. You should do the copy as late as possible before the
paste.

--
Jim Rech
Excel MVP




  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,718
Default Why is my clipboard empty?

I think leaving the Msgbox up is a good idea. Some developers in my shop
have used that technique without any problems.

If, by any chance, you are only interested in pasting the Excel data into
Word (no formats) you can do a non-Excel copy by using Windows API calls.
With these you do not have to worry about Excel clearing the clipboard on
you. It's basically the same as highlighting what's in the formula bar and
doing a Ctrl-c, only it can work on a range. Fwiw, the code is below. It
works on the current selection so you'd have to modify it to work on a range
object.

--
Jim Rech
Excel MVP

Public Declare Function GlobalAlloc32 Lib "Kernel32" Alias "GlobalAlloc" _
(ByVal wFlags As Long, ByVal dwBytes As Long) As Long

Public Declare Function GlobalLock32 Lib "Kernel32" Alias "GlobalLock" _
(ByVal hMem As Long) As Long

Public Declare Function OpenClipboard32 Lib "user32" Alias "OpenClipboard" _
(ByVal hwnd As Long) As Long

Public Declare Function GlobalUnlock32 Lib "Kernel32" Alias "GlobalUnlock" _
(ByVal hMem As Long) As Long

Public Declare Function lstrcpy32 Lib "Kernel32" Alias "lstrcpy" _
(ByVal lpString1 As Any, ByVal lpString2 As Any) As Long

Public Declare Function CloseClipboard32 Lib "user32" Alias "CloseClipboard"
() As Long

Public Declare Function SetClipBoardData32 Lib "user32" _
Alias "SetClipboardData" (ByVal wFormat As Long, ByVal hMem As Long) As
Long

Declare Function GetClipboardData32 Lib "user32" Alias _
"GetClipboardData" (ByVal wFormat As Long) As Long

Declare Function EmptyClipboard32 Lib "user32" Alias "EmptyClipboard" () As
Long

Global Const CF_TEXT = 1

''Call this
Sub CB_SendData()
Dim StrBuf As String
Dim CurrRow As Range, CurrCell As Range
'Build a long string of cell values
' Tabs separate columns
' Carriage returns separate rows
For Each CurrRow In Selection.Rows
For Each CurrCell In CurrRow.Cells
StrBuf = StrBuf & CurrCell.Value & Chr(9)
Next
'Remove last Tab on row and add carriage return
StrBuf = Left(StrBuf, Len(StrBuf) - 1) & Chr(13)
Next
ClipBoard_SetData StrBuf
End Sub


Sub ClipBoard_SetData(MyString As String)
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Dim hClipMemory As Long
' Allocate moveable global memory.
hGlobalMemory = GlobalAlloc32(&H42, Len(MyString) + 1)
' Lock the block to get a far pointer to this memory.
lpGlobalMemory = GlobalLock32(hGlobalMemory)
' Copy the string to this global memory.
lpGlobalMemory = lstrcpy32(lpGlobalMemory, MyString)
' Unlock the memory.
If GlobalUnlock32(hGlobalMemory) < 0 Then
MsgBox "Could not unlock memory location. Copy aborted."
GoTo OutOfHere
End If
' Open the Clipboard to copy data to.
If OpenClipboard32(0&) = 0 Then
MsgBox "Could not open the Clipboard. Copy aborted."
Exit Sub
End If
EmptyClipboard32 'Don't know if I really need this
' Copy the data to the Clipboard.
hClipMemory = SetClipBoardData32(CF_TEXT, hGlobalMemory)
OutOfHe
If CloseClipboard32() = 0 Then
MsgBox "Could not close Clipboard."
End If
End Sub


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
Cannot empty the clipboard Jaleel Excel Discussion (Misc queries) 1 November 22nd 09 08:57 PM
Clipboard empty but still get waring that clipboard is full Steve Excel Discussion (Misc queries) 0 June 17th 08 09:05 PM
Clipboard empty but get cannot empty CB when trying to copy Peter @ ServiceMaster Excel Worksheet Functions 0 February 22nd 07 03:58 PM
cannot empty the clipboard Fred Excel Discussion (Misc queries) 0 October 10th 06 08:53 PM
Cannot empty the Clipboard OhWellJon Excel Discussion (Misc queries) 0 September 19th 06 07:19 PM


All times are GMT +1. The time now is 10:13 AM.

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

About Us

"It's about Microsoft Excel"