Clipboard

Euler

Administrator
Thành viên BQT
Trên máy tính, chúng ta thực hiện một lệnh copy (có thể là ảnh, file text, hoặc một đoạn văn bản...). Chúng ta muốn VBA coi thông tin copy này là Inptut và có những xử lý sau đó. Để làm được việc này, chúng ta có khái niệm Clipboard, đó chính là thông tin mà các bạn đã thực hiện copy trên máy tính.

Kiểm tra định dạng được lưu trong Clipboard
Dữ liệu được lưu trong Clipboard là loại dữ liệu kiểu gì? Bằng thuộc tính ClipboardFormats của đối tượng Application, chúng ta có thể xác định được.
Thuộc tính ClipboardFormats trả kiểu dữ liệu được lưu trong Clipboard cho vào mảng. Nếu như chẳng có dữ liệu nào được lưu trong Clipboard thì giá trị True(-1) sẽ được ghi vào trong ClipboardFormats(1) .

Đoạn code dưới đây sẽ kiểm tra kiểu dữ liệu được cất trong Clipboard có phải là Ảnh hay không, nếu đúng thì nó sẽ paste vào active sheet.
Mã:
Sub Sample()
    Dim CB As Variant, i As Long
    CB = Application.ClipboardFormats
    If CB(1) = True Then
        MsgBox "Clipboard khong co gi", 48
        Exit Sub
    End If
    For i = 1 To UBound(CB)
        If CB(i) = xlClipboardFormatBitmap Then
            ActiveSheet.Paste
            Exit For
        End If
    Next i
End Sub
Lấy thông tin từ Clipboard
Cells là đối tượng của phương thức Copy hay Paste. Khi chúng ta không sử dụng Cells, chúng ta muốn lưu trữ kiểu dữ liệu đang được cất trong Clipboard vào biến số, thì chúng ta sẽ sử dụng đối tượng DataObject.

DataObject là một thành viên của MSForm. Khi sử dụng, chúng ta cần thiết định thư viện Microsoft Forms 2.0 Object Library.
Trong ví dụ dưới đây, "tuhocvba.net" đang được lưu trong biến số ký tự buf. Tiếp theo chúng ta sẽ cất kiểu dữ liệu đang được lưu trong Clipboard vào biến buf2.
Mã:
Sub Sample2()
    Dim buf As String, buf2 As String, CB As New DataObject
    buf = "tanaka"
    With CB
        .SetText buf        ''chung ta luu du lieu cua bien so vao DataObject
        .PutInClipboard     ''chung ta luu du lieu DataObject vao Clipboard
        .GetFromClipboard   ''Lay du lieu cua DataObject tu Clipboard
        buf2 = .GetText     ''Luu thong tin du lieu cua DataObject vao bien so
    End With
    MsgBox buf2
End Sub
DataObject không phải tính năng của Windows. Ở đây, nó như một cây cầu mà VBA cần tương tác để lấy được thông tin từ Clipboard.
Nguồn:
 
Top