Các bài viết trong bài này không giống như yêu cầu trong báo cáo của em. Để em gửi file lên để các anh chị giúp đỡ. Trong file có 3 sheet tên 273, 274, 275 (số lượng sheet không giới hạn tùy theo ngày ít hay nhiều) và em cũng đã có các file hình ảnh với các tên như thế, khi nhấn 1 nút nào đó thì hình ảnh sẽ tự dộng chèn vào vị trí em mong muốn giống như trong file. Xin cảm ơn!
(Sorry mọi người e quên attach file!)
Các bài viết trong bài này không giống như yêu cầu trong báo cáo của em. Để em gửi file lên để các anh chị giúp đỡ. Trong file có 3 sheet tên 273, 274, 275 (số lượng sheet không giới hạn tùy theo ngày ít hay nhiều) và em cũng đã có các file hình ảnh với các tên như thế, khi nhấn 1 nút nào đó thì hình ảnh sẽ tự dộng chèn vào vị trí em mong muốn giống như trong file. Xin cảm ơn!
(Sorry mọi người e quên attach file!)
Yêu cầu này càng dể!
Tôi làm cho bạn đây! Xem file đính kèm
Trong file này bạn không cần làm gì cả, chỉ cần chọn vào bất kỳ sheet nào thì lập tức có 1 hình tương ứng với tên sheet sẽ được chèn với đúng vị trí
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.ScreenUpdating = False
On Error Resume Next
With ActiveSheet
If .Name <> "report" Then
.Shapes(.Name).Delete
With .Pictures.Insert(ThisWorkbook.Path & "\" & .Name & ".jpg")
.Name = ActiveSheet.Name
.Left = Range("C12:O32").Left: .Top = Range("C12:O32").Top
.Width = Range("C12:O32").Width: .Height = Range("C12:O32").Height
End With
End If
End With
Application.ScreenUpdating = True
End Sub
Yêu cầu:
1> Bạn phải đặt tên hình phải trùng với tên sheet
2> File hình và file Excel phải nằm cùng 1 thư mục Lưu ý:
Với số lượng sheet lớn thì file Excel sẽ khá nặng (vì chứa nhiều hình)
Em cảm ơn bác ndu96081631 nhiều, bác đúng là siêu thật. File bác làm cho e thì ok rồi nhưng em cần thêm chút yêu cầu nhỏ trong file đó, e muốn hình tự điều chỉnh kích thước nằm vừa trong vị trí cần chèn có thể nhỏ hơn 1 chút. Vì công việc hàng ngày nhiều lắm e không có thời gian điều chỉnh. Bác ndu96081631 giúp e nhe. Thanks!
Em cảm ơn bác ndu96081631 nhiều, bác đúng là siêu thật. File bác làm cho e thì ok rồi nhưng em cần thêm chút yêu cầu nhỏ trong file đó, e muốn hình tự điều chỉnh kích thước nằm vừa trong vị trí cần chèn có thể nhỏ hơn 1 chút. Vì công việc hàng ngày nhiều lắm e không có thời gian điều chỉnh. Bác ndu96081631 giúp e nhe. Thanks!
Ở đây đang chỉnh:
- Cạnh trái của hình = cạnh trái của vùng C12:O32
- Cạnh trên của hình = cạnh trên của vùng C12:O32
Còn chỉnh kích thước hình là code này:
Ở đây đang chỉnh:
- Chiều rộng hình = chiều rộng vùng C12:O32
- Chiều cao hình = chiều cao vùng C12:O32
---------------
Vậy bạn muốn chỉnh thế nào thì có thể tự chỉnh lại theo ý!
Nhưng tôi nghĩ cách dể nhất là bạn định sẳn luôn vùng chứa hình, ví dụ có thể thay C12:O32 thành D13:N31 ---> Như vậy hình sẽ nằm chính xác trong vùng D13:N31, tức nhỏ hơn vùng C12:O32 1 tí
Bạn mở file lên, bấm Alt + F11, thay code củ thành code mới này xem:
PHP:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.ScreenUpdating = False
On Error Resume Next
If Sh.Name <> "report" Then
Sh.Shapes(Sh.Name).Delete
With Sh.Pictures.Insert(ThisWorkbook.Path & "\" & Sh.Name & ".jpg")
.Name = Sh.Name
.Left = Range("D13:N31").Left: .Top = Range("D13:N31").Top
.Width = Range("D13:N31").Width: .Height = Range("D13:N31").Height
End With
End If
Application.ScreenUpdating = True
End Sub
Chào bạn!
Sau khi xem kỹ lại file của bạn, tôi cảm thấy hầu như tất cả các sheet đều có cấu trúc giống nhau (ngoại trừ sheet report) ---> Vậy ta cần gì tạo ra nhiều sheet thế kia? Tôi nghĩ chỉ cần thêm 1 sheet nữa là đủ ---> Cần thông tin nào, ta hãy chọn nó bằng Validation thì nó sẽ trích ra tất cả
Bạn xem file đính kèm này nhé!
Nếu làm như tôi nói bạn sẽ có cái lợi:
- Cần thông tin nào, lấy ra thông tin nấy mà chẳng cần nhiều sheet
- Dung lượng file sẽ nhỏ đi rất nhiều vì tại 1 thời điểm, ta chỉ có duy nhất 1 tấm hình được chèn vào (điều này dể nhận ra khi bạn so sánh với file có từ 10 sheet trở lên)
Code như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$N$4" Then
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("Pic").Delete
With Me.Pictures.Insert(ThisWorkbook.Path & "\" & Target & ".jpg")
.Name = "Pic"
.Left = [D13:N31].Left: .Top = [D13:N31].Top
.Width = [D13:N31].Width: .Height = [D13:N31].Height
End With
Application.ScreenUpdating = True
End If
End Sub
--------------
Trong file tôi dùng hàm VLOOKUP để lấy thông tin (mục đích cho bạn tiện theo dỏi) ---> Nếu cần thiết ta có thể tự động hóa hoàn toàn bằng VBA... nghĩa là lấy thông tin bằng code VBA mà không cần dùng đến bất cứ công thức nào
Hãy xem file, nếu đồng ý ta cải tiến tiếp
Chào bạn!
Sau khi xem kỹ lại file của bạn, tôi cảm thấy hầu như tất cả các sheet đều có cấu trúc giống nhau (ngoại trừ sheet report) ---> Vậy ta cần gì tạo ra nhiều sheet thế kia? Tôi nghĩ chỉ cần thêm 1 sheet nữa là đủ ---> Cần thông tin nào, ta hãy chọn nó bằng Validation thì nó sẽ trích ra tất cả
Bạn xem file đính kèm này nhé!
Nếu làm như tôi nói bạn sẽ có cái lợi:
- Cần thông tin nào, lấy ra thông tin nấy mà chẳng cần nhiều sheet
- Dung lượng file sẽ nhỏ đi rất nhiều vì tại 1 thời điểm, ta chỉ có duy nhất 1 tấm hình được chèn vào (điều này dể nhận ra khi bạn so sánh với file có từ 10 sheet trở lên)
Code như sau:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$N$4" Then
Application.ScreenUpdating = False
On Error Resume Next
Me.Shapes("Pic").Delete
With Me.Pictures.Insert(ThisWorkbook.Path & "\" & Target & ".jpg")
.Name = "Pic"
.Left = [D13:N31].Left: .Top = [D13:N31].Top
.Width = [D13:N31].Width: .Height = [D13:N31].Height
End With
Application.ScreenUpdating = True
End If
End Sub
--------------
Trong file tôi dùng hàm VLOOKUP để lấy thông tin (mục đích cho bạn tiện theo dỏi) ---> Nếu cần thiết ta có thể tự động hóa hoàn toàn bằng VBA... nghĩa là lấy thông tin bằng code VBA mà không cần dùng đến bất cứ công thức nào
Hãy xem file, nếu đồng ý ta cải tiến tiếp
Việc cắt xén hình không phải là làm không được (đối với VBA)... nhưng tại sao bạn không tự edit hình trước rồi hẳn đưa vào Excel? Edit Picture trong Excel có phải là việc làm tốn kém không cần thiết không?
Nếu là tôi thì:
- Sau khi thu thập hình ảnh các nơi, tôi dùng các chương trình xử lý ảnh chỉnh sửa hình cho ưng ý trước, sau đó sẽ lưu lại
- Excel chỉ làm nhiệm vụ Show hình (không chỉnh sửa gì cả)
Bạn thấy sao?
Việc cắt xén hình không phải là làm không được (đối với VBA)... nhưng tại sao bạn không tự edit hình trước rồi hẳn đưa vào Excel? Edit Picture trong Excel có phải là việc làm tốn kém không cần thiết không?
Nếu là tôi thì:
- Sau khi thu thập hình ảnh các nơi, tôi dùng các chương trình xử lý ảnh chỉnh sửa hình cho ưng ý trước, sau đó sẽ lưu lại
- Excel chỉ làm nhiệm vụ Show hình (không chỉnh sửa gì cả)
Bạn thấy sao?
Ôi...
Thế bạn không biết tìm trên google để tải các phần mềm chỉnh sửa anh hàng loạt sao?
100 hình ăn nhằm gì ---> vài chục ngàn hình người ta còn chỉnh được nữa là
các bạn cho mình hỏi thêm , làm sao mà xác định được trong sheet có bao nhiêu picture , mục đích của mình là xóa tất cả các picture trong sheet , ngoại trừ hình nền , hoặc kể cả hình nền , rồi sẽ insert sau , mình đã ghi lại macro nhưng có vẻ rất khó làm , vì mỗi picture nó lại có tên ,
mình định làm theo kiểu đánh nhầm hơn bỏ xót :
on error resume next
for n = 1 to 500
ActiveSheet.Shapes("Picture " & n).Select
Selection.Delete
next n
kiểu này thì quá thủ công nhưng mà chắc là sẽ cho kết quả , bạn nào có code khác có thể cho mình xin , cảm ơn !
các bạn cho mình hỏi thêm , làm sao mà xác định được trong sheet có bao nhiêu picture , mục đích của mình là xóa tất cả các picture trong sheet , ngoại trừ hình nền , hoặc kể cả hình nền , rồi sẽ insert sau , mình đã ghi lại macro nhưng có vẻ rất khó làm , vì mỗi picture nó lại có tên ,
mình định làm theo kiểu đánh nhầm hơn bỏ xót :
on error resume next
for n = 1 to 500
ActiveSheet.Shapes("Picture " & n).Select
Selection.Delete
next n
kiểu này thì quá thủ công nhưng mà chắc là sẽ cho kết quả , bạn nào có code khác có thể cho mình xin , cảm ơn !
Bạn làm vầy nè:
- Bấm Ctrl + G (hoặc vào menu Edit, chọn Go To...)
- Trong hộp Go To, bấm nút Special...
- Check vào mục Objects rồi OK
- Cuối cùng là bấm nút Delete trên bàn phím
Một nhát xong tất tần tận các Object hiện có trong sheet