2013-02-06 33 views
9

Tôi đã sử dụng một thói quen trong nhiều năm tới đặt một chuỗi văn bản đơn giản vào clipboard mà tôi có thể dán vào một chương trình khác như:Office 2013 Excel .PutInClipboard là khác nhau?

targetData.SetText "This is a plain text string" 
targetData.PutInClipboard 

Khi tôi sử dụng này trong Excel Office 2013 dữ liệu không có trong clipboard và do đó tôi không thể dán nó. Điều này không bao giờ xảy ra trong các phiên bản trước.

Kiểm tra kỹ hơn Tôi đã tìm thấy chuỗi không đi vào clipboard nhưng dưới dạng "Chuỗi hệ thống" nhưng không phải là "Văn bản" hoặc "Văn bản Unicode".

NHƯNG ... khoảng 10% thời gian hoạt động chính thức vì nó sẽ đặt chuỗi vào khay nhớ tạm làm "Văn bản".

Bất kỳ ý tưởng nào ??

+0

Bạn đang sử dụng 64bit hoặc 32bit phiên bản của Office 2013? Tôi đã thử nghiệm trên bản sao của tôi của 64bit và không có bất kỳ vấn đề. (BTW mã của bạn có "=" trong đó nên ở đó;) – CuberChase

+0

Tôi đang sử dụng Office chuyên nghiệp 64 bit cộng với Excel. Văn bản được đặt trong clipboard thông qua PutInClipboard, phương thức sẽ không dán bên trong hoặc bên ngoài Excel. Về kiểm tra dữ liệu clipboard nó thực sự có nhưng được phân loại là loại "Chuỗi hệ thống". Kiểu văn bản hiển thị "??" (hai dấu hỏi cạnh nhau). Loại Unicode có hai ký tự không thể in được. _Không biết tại sao tôi gõ vào dấu "=" nó sẽ là một lỗi biên dịch._ –

+3

Đây là một vấn đề đã biết, cách giải quyết cho điều này đã được biểu diễn trong liên kết followig tới MSDN [Cách gửi: Gửi thông tin đến bảng tạm ] (http://msdn.microsoft.com/en-us/library/office/ff192913.aspx) – user2140261

Trả lời

2

Bạn nên thêm "thư viện đối tượng Microsoft 2,0 hình thức" vào tham chiếu của mình, sau đó bạn có thể sử dụng tính năng này. bạn có thể làm điều này bằng cách vào Excel/nhà phát triển/Visual Basic (hoặc mô-đun VBE của bạn) và trong các công cụ/tham khảo chọn trình duyệt và sau đó trong thư mục system32 của bạn tìm kiếm tập tin "FM20.DLL" và sau đó bằng cách chọn tập tin này tại cuối danh sách tham chiếu "Thư viện đối tượng Microsoft dạng 2.0" sẽ xuất hiện. Kích hoạt nó. Bây giờ mọi thứ đang tốt như xưa;) bình luận

5

user2140261 là giải pháp đúng:

How to: Send Information to the Clipboard

(Sau đây chỉ là sao chép từ các liên kết ở trên)

Nếu bạn cần phải sao chép nội dung của điều khiển hoạt động trên biểu mẫu hoặc báo cáo vào Clipboard, bạn chỉ cần mã này:

Private Sub cmdCopy_Click() 
    Me!txtNotes.SetFocus 
    DoCmd.RunCommand acCmdCopy 
End Sub 

Tuy nhiên, đây là sự thay thế cần thiết cho thói quen cũ của mình:

1. Tạo một module, đặt tên là "WinAPI" hoặc một cái gì đó, đặt mã này trong đó:

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 lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long 
Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, ByVal hMem As Long) As Long 

Public Const GHND = &H42 
Public Const CF_TEXT = 1 
Public Const MAXSIZE = 4096 

2. Trong mô-đun mà thói quen cũ của bạn được xác định, hãy thay thế thói quen cũ của bạn bằng mã này:

Function ClipBoard_SetData(MyString As String) 
    Dim hGlobalMemory As Long, lpGlobalMemory As Long 
    Dim hClipMemory As Long, X As Long 

    ' Allocate moveable global memory. 
    '------------------------------------------- 
    hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 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, MyString) 

    ' Unlock the memory. 
    If GlobalUnlock(hGlobalMemory) <> 0 Then 
     MsgBox "Could not unlock memory location. Copy aborted." 
     GoTo OutOfHere2 
    End If 

    ' Open the Clipboard to copy data to. 
    If OpenClipboard(0&) = 0 Then 
     MsgBox "Could not open the Clipboard. Copy aborted." 
     Exit Function 
    End If 

    ' Clear the Clipboard. 
    X = EmptyClipboard() 

    ' Copy the data to the Clipboard. 
    hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory) 

OutOfHere2: 

    If CloseClipboard() = 0 Then 
     MsgBox "Could not close Clipboard." 
    End If 

End Function 

3. Sau đó, gọi nó là như thế này:

' doesn't work on Windows 8: targetData.SetText "This is a plain text string" 
'doesn't work on Windows 8: targetData.PutInClipboard 
ClipBoard_SetData ("This is a plain text string") 
Các vấn đề liên quan