可以使用VBA將文本復(fù)制到剪貼板,在需要使用時(shí)再將其粘貼到合適的地方。
下面的代碼使用對(duì)象將指定文本復(fù)制到剪貼板:
Sub CopyTextToClipboard()
Dim objData As New DataObject
Dim strText As String
strText = "使用VBA復(fù)制到剪貼板!"
'設(shè)置對(duì)象文本為字符串變量指定文本
objData.SetText strText
'將對(duì)象文本放置到剪貼板
objData.PutInClipboard
End Sub
注意,上述代碼運(yùn)行前需要添加對(duì)“ Forms 2.0 ”庫(kù)的引用,方法是在VBE中單擊菜單“工具——引用”,在“引用”對(duì)話框中找到該庫(kù)并選取。如果在“引用”對(duì)話框中找不到這個(gè)庫(kù)excel中無(wú)法清空剪切板excel中無(wú)法清空剪切板,可以在VBE中單擊菜單“插入——用戶窗體”命令,先插入一個(gè)空白用戶窗體,然后再運(yùn)行上述代碼。
還可以使用 API來(lái)復(fù)制文本到剪貼板。
'處理64位和32位Office
#If VBA7 Then
Private Declare PtrSafe Function GlobalUnlock Lib "kernel32"(ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function GlobalLock Lib "kernel32"(ByVal hMem As LongPtr) As LongPtr
Private Declare PtrSafe Function GlobalAlloc Lib "kernel32"(ByVal wFlags As LongPtr, _
ByVal dwBytes As LongPtr) As LongPtr
Private Declare PtrSafe Function CloseClipboard Lib "user32"() As LongPtr
Private Declare PtrSafe Function OpenClipboard Lib "user32"(ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function EmptyClipboard Lib "user32" ()As LongPtr
Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVallpString1 As Any, _
ByVal lpString2 As Any) As LongPtr
Private Declare PtrSafe Function SetClipboardData Lib "user32"(ByVal wFormat As LongPtr, _
ByVal hMem As LongPtr) As LongPtr
#Else
Private Declare Function GlobalUnlock Lib "kernel32" (ByValhMem As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMemAs Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByValwFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () AsLong
Private Declare Function OpenClipboard Lib "user32" (ByValhwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () AsLong
Private Declare Function lstrcpy Lib "kernel32" (ByVallpString1 As Any, _
ByVal lpString2 As Any) As Long
Private Declare FunctionSetClipboardData Lib "user32" (ByVal wFormat _
As Long, ByVal hMem As Long) As Long
#End If
Const GHND = &H42
Const CF_TEXT = 1
Const MAXSIZE = 4096
'復(fù)制文本到剪貼板的API函數(shù)
'來(lái)源:www.msdn.microsoft.com/en-us/library/office/ff192913.aspx
Function ClipBoard_SetData(MyString As String)
Dim hGlobalMemory As Long, lpGlobalMemory As Long
Dim hClipMemory As Long, X As Long
'分配可移動(dòng)的全局內(nèi)存
hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 20)
'鎖定該塊以獲取該內(nèi)存的遠(yuǎn)指針
lpGlobalMemory = GlobalLock(hGlobalMemory)
'復(fù)制字符串到該全局內(nèi)存
lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)
'解鎖該內(nèi)存
If GlobalUnlock(hGlobalMemory) <> 0 Then
MsgBox "不能解鎖內(nèi)存位置. 復(fù)制中止."
GoTo OutOfHere2
End If
'打開(kāi)剪貼板復(fù)制數(shù)據(jù).
If OpenClipboard(0&) = 0 Then
MsgBox "不能打開(kāi)剪貼板. 復(fù)制中止."
Exit Function
End If
'清空剪貼板
X = EmptyClipboard()
'復(fù)制數(shù)據(jù)到剪貼板
hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
OutOfHere2:
If CloseClipboard() = 0 Then
MsgBox "不能關(guān)閉剪貼板."
End If
End Function
Sub CopyTextToClipboard()
Dim strText As String
strText = "這里使用VBA復(fù)制文本到剪貼板!"
'放置文本到剪貼板
ClipBoard_SetData strText
End Sub