- 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á)
(Đã tra google nhưng sao thấy mông lung quá)
File này mình có xem hôm qua rồi nhưng hình như không đúng yêu cầu
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ơ
Nghĩ lại thấy không ôn.. vì hình trên sheet chỉ có thể có được bằng 2 cách: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?
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
Dạ... vâng!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:
Tất nhiên phải bẫy lỗ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
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)
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
Cái này thì đúng ý mình rồi đấy!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)
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
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)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