Lấy Picture từ Clipboard ra bảng tính (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,958
Các cao thủ có ai biết lấy 1 hình từ Clipboard rồi đặt lên bảng tính không? Giúp mình với
(Đã tra google nhưng sao thấy mông lung quá)
 
Upvote 0
File này mình có xem hôm qua rồi nhưng hình như không đúng yêu cầu
Nó Save hình vào máy tính trong khi mình muốn lấy hình trong clipboard và đặt vào bảng tính cơ

Bạn định "đặt" lên bảng tính có nghĩa là "đặt" vào đâu? Range có phương thức PasteSpecial. Hay bạn định "dán" vào vd. Image1? Bạn không nói rõ nên tôi hỏi hơi "ngu ngơ"
Trong vd. bạn có thì trước khi ghi ra đĩa (hoặc thoát - OK) thì từ Clipboard được "dán" vào Image trên UserForm
 
Upvote 0
Bạn định "đặt" lên bảng tính có nghĩa là "đặt" vào đâu? Range có phương thức PasteSpecial. Hay bạn định "dán" vào vd. Image1? Bạn không nói rõ nên tôi hỏi hơi "ngu ngơ"
Trong vd. bạn có thì trước khi ghi ra đĩa (hoặc thoát - OK) thì từ Clipboard được "dán" vào Image trên UserForm
Nghĩ lại thấy không ôn.. vì hình trên sheet chỉ có thể có được bằng 2 cách:
- Ctrl + V để paste
- Insert Picture từ file trên ổ đĩa
Vậy chắc không thể có cách nào đó đưa hình từ clipboard vào cell trên sheet giống như cách đưa vào Image control nhi?
 
Upvote 0
Nghĩ lại thấy không ôn.. vì hình trên sheet chỉ có thể có được bằng 2 cách:
- Ctrl + V để paste
- Insert Picture từ file trên ổ đĩa
Vậy chắc không thể có cách nào đó đưa hình từ clipboard vào cell trên sheet giống như cách đưa vào Image control nhi?

Trời ơi là trời, sao tôi khổ thế này.
Tôi hỏi bạn là bạn "đặt" ở đâu nhưng không nhận được câu trả lời.
Nếu bạn muốn "đặt" vào cell thì Range.PasteSpecial
Nếu bạn có Image, vd. Image1 và bạn muốn đặt vào nó thì bạn mượn hàm PastePicture của tác giả rồi:
Mã:
Dim pic As MSForms.Image
Dim obj As OLEObject
...
Set obj = Sheets("Sheet1").OLEObjects("Image1")
If obj.progID = "Forms.Image.1" Then
    Set pic = obj.Object
    Set pic.Picture = PastePicture(lPicType)
End If
Tất nhiên phải bẫy lỗi.
Nếu bạn có Picture, Rectangle (shape) thì tôi cũng không rành lắm với các "vị" này nên chưa biết cách tiếp cận các thuộc tính và phương thức của các vị đó ra sao.
Cùng lắm thì "cực chẳng đã" ghi ra đĩa rồi load sau đó xóa trên đĩa.
 
Upvote 0
Trời ơi là trời, sao tôi khổ thế này.
Tôi hỏi bạn là bạn "đặt" ở đâu nhưng không nhận được câu trả lời.
Nếu bạn muốn "đặt" vào cell thì Range.PasteSpecial
Nếu bạn có Image, vd. Image1 và bạn muốn đặt vào nó thì bạn mượn hàm PastePicture của tác giả rồi:
Mã:
Dim pic As MSForms.Image
Dim obj As OLEObject
...
Set obj = Sheets("Sheet1").OLEObjects("Image1")
If obj.progID = "Forms.Image.1" Then
    Set pic = obj.Object
    Set pic.Picture = PastePicture(lPicType)
End If
Tất nhiên phải bẫy lỗi.
Nếu bạn có Picture, Rectangle (shape) thì tôi cũng không rành lắm với các "vị" này nên chưa biết cách tiếp cận các thuộc tính và phương thức của các vị đó ra sao.
Cùng lắm thì "cực chẳng đã" ghi ra đĩa rồi load sau đó xóa trên đĩa.
Dạ... vâng!
Đương nhiên là mình muốn cho hình vào cell nào đó rồi (đã nói ngay từ đầu)... nhưng mình lại không muốn Paste Special (định nghĩ xem còn cách nào khác không ấy mà)
Lý do vì: Nếu Paste Special thì những xử lý sau đó lại phải mất công dựa vào Selection (chẳng hạn Selection.Name = ???)
Có lẽ ghi tạm ra đĩa rồi load lên là giải pháp ổn nhất
Cảm ơn bạn nhé (có gì sẽ hỏi tiếp)
 
Upvote 0
Dạ... vâng!
Đương nhiên là mình muốn cho hình vào cell nào đó rồi (đã nói ngay từ đầu)... nhưng mình lại không muốn Paste Special (định nghĩ xem còn cách nào khác không ấy mà)
Lý do vì: Nếu Paste Special thì những xử lý sau đó lại phải mất công dựa vào Selection (chẳng hạn Selection.Name = ???)
Có lẽ ghi tạm ra đĩa rồi load lên là giải pháp ổn nhất
Cảm ơn bạn nhé (có gì sẽ hỏi tiếp)

Thực ra tôi vẫn còn lơ tơ mơ về cái bạn định làm.
Giả sử bạn có trên sheet vd. Picture 1, Picture 7, Picture 8
Bạn muốn dán từ ClipBoard vào Picture 7? Tất nhiên khi dán vào cell, sheet thì sẽ có Picture mới được tạo ra.
Tóm lại bạn muốn có "lõi" Picture 7 là cái đang nằm trong ClipBoard. Vậy trước tiên ta xóa "Picture 7", sau đó "lấy" từ ClipBoard, tiếp theo đổi tên Picture vừa tạo thành "Picture 7". Như thế này thì toàn bộ code tạo Picture và ghi ra đĩa rồi lại đọc từ đĩa không cần nữa. Vd.

Mã:
Dim pic As Object
    Set pic = ActiveSheet.Pictures("Picture 7")
    If Not pic Is Nothing Then
        pic.Delete
        Set pic = ActiveSheet.Pictures.Paste
        pic.Name = "Picture 7"
'        pic.Left = Range("K3").Left
'        pic.Top = Range("K3").Top
    End If

Tất nhiên trước khi dán thì kiểm tra xem ClipBoard có ảnh không.

Truy cập tới Picture cụ thể bằng cách: Sheet.Pictures(xyz)
 
Upvote 0
Thực ra tôi vẫn còn lơ tơ mơ về cái bạn định làm.
Giả sử bạn có trên sheet vd. Picture 1, Picture 7, Picture 8
Bạn muốn dán từ ClipBoard vào Picture 7? Tất nhiên khi dán vào cell, sheet thì sẽ có Picture mới được tạo ra.
Tóm lại bạn muốn có "lõi" Picture 7 là cái đang nằm trong ClipBoard. Vậy trước tiên ta xóa "Picture 7", sau đó "lấy" từ ClipBoard, tiếp theo đổi tên Picture vừa tạo thành "Picture 7". Như thế này thì toàn bộ code tạo Picture và ghi ra đĩa rồi lại đọc từ đĩa không cần nữa. Vd.

Mã:
Dim pic As Object
    Set pic = ActiveSheet.Pictures("Picture 7")
    If Not pic Is Nothing Then
        pic.Delete
        Set pic = ActiveSheet.Pictures.Paste
        pic.Name = "Picture 7"
'        pic.Left = Range("K3").Left
'        pic.Top = Range("K3").Top
    End If

Tất nhiên trước khi dán thì kiểm tra xem ClipBoard có ảnh không.

Truy cập tới Picture cụ thể bằng cách: Sheet.Pictures(xyz)
Cái này thì đúng ý mình rồi đấy!
Vấn đề là mình đang tìm hiểu liệu có cách nào khác ngoải cách Paste Special hay không thôi (hay nói đúng hơn là mình chẳng khoái tí nào cái Paste Special này)
 
Upvote 0
Em nghĩ mình cũng có thể dùng thuộc tính shape để làm việc này. Ví dụ mình có vài tấm ảnh ở bên sheet active bầy giờ copy qua sheet2 nếu ko muốn dùng paste special thì dùng code này

Mã:
Sub CopyPic()
Dim Anh As Shape
For Each Anh In ActiveSheet.Shapes
       If Anh.Type = msoPicture Then
       Anh.Copy
        With Sheets("Sheet2")
            .Select:            .Range(Anh.TopLeftCell.Address).Select
            .Paste
        End With
    End If
Next Anh
End Sub

Không biết ý anh vậy không em cũng thường dùng code này để copy ảnh
 
Upvote 0
Em nghĩ mình cũng có thể dùng thuộc tính shape để làm việc này. Ví dụ mình có vài tấm ảnh ở bên sheet active bầy giờ copy qua sheet2 nếu ko muốn dùng paste special thì dùng code này

Mã:
Sub CopyPic()
Dim Anh As Shape
For Each Anh In ActiveSheet.Shapes
       If Anh.Type = msoPicture Then
       Anh.Copy
        With Sheets("Sheet2")
            .Select:            .Range(Anh.TopLeftCell.Address).Select
            .Paste
        End With
    End If
Next Anh
End Sub

Không biết ý anh vậy không em cũng thường dùng code này để copy ảnh
Tức là trước đó tôi đã Ctrl + C để copy 1 tấm hình (copy ở đâu không cần biết, chỉ biết chắc ràng trong clipboard đang có 1 tấm hình)
Giờ muốn lấy hình trong clipboard ấy xuống 1 cell trên sheet
Vấn đề là tôi không muốn PASTE
Vì đang nghĩ không biết có cách nào khác không
Chắc là chỉ còn cách như siwtom nói: Lưu hình trong clipboard vào ổ đĩa rồi load ngược trở lại thôi
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom