Thêm 1 dạng PicForm (2 người xem)

Liên hệ QC

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

Thay vì Select, rồi lại Selection.ClearContents. Bạn có thể gộp lại thành:
Range([B5], [B5].End(xlDown).Resize(, 1)).ClearContents
Tuy nhiên, dùng End(xlDown) có khi bị "sa bẫy" trong trường hợp cột B có cell rổng ở giữa nha
Vâng , vì nó load ảnh tự động lần lượt vào các cell , không phải chèn bằng tay nên chắc không "rỗng " ạ .Trừ phi ta del nó . Cám ơn thày !
 
Upvote 0
Vâng , vì nó load ảnh tự động lần lượt vào các cell , không phải chèn bằng tay nên chắc không "rỗng " ạ .Trừ phi ta del nó . Cám ơn thày !
Thì tôi đang nói đến cái vụ "trừ phi" này nè
Tức là trước khi load ảnh, trên bảng tính đã có ảnh và dữ liệu. Mà dữ liệu cột B lại không liên tục, End(xlDown) sẽ bị "ngắt ngang" giữa chừng ---> Ý là vậy đấy
(Tôi làm việc gì, nhất là những việc QUAN TRỌNG rất ghét bị "ngắt ngang" lắm... Ẹc... Ẹc... --=0)
 
Upvote 0
Thì tôi đang nói đến cái vụ "trừ phi" này nè
Tức là trước khi load ảnh, trên bảng tính đã có ảnh và dữ liệu. Mà dữ liệu cột B lại không liên tục, End(xlDown) sẽ bị "ngắt ngang" giữa chừng ---> Ý là vậy đấy
(Tôi làm việc gì, nhất là những việc QUAN TRỌNG rất ghét bị "ngắt ngang" lắm... Ẹc... Ẹc... --=0)
Dạ, vậy thì dùng End(xlUp) được không ạ ? Thày giúp em câu lệnh chọn từ B5 đén ô cuối từ dưới lên với ạ ? lắm lúc do không quen nhà em cứ loay hoay mãi mà viết không đúng , nó không nghe, nó "cãi" ghê lắm ạ .Nếu nó là con, nhà em cho nó "mấy que vào đít " rồi . Nói thày đừng cười , nhà em VBA cò gà mờ lắm ạ !
Dạ, nó nghe rồi thày ạ !
Range([A5], [B65536].End(xlUp).Resize(, 1)).ClearContents
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, nó nghe rồi thày ạ !
Range([A5], [B65536].End(xlUp).Resize(, 1)).ClearContents

Chổ màu đỏ là thừa nha!
Ngoài ra bạn hãy thí nghiệm cho trường hợp đặc biệt này: Load ảnh khi cột B không có bất cứ dữ liệu nào còn cột A thì có dữ liệu từ A1 đến A4
Bạn sẽ thấy code trên xoá nhầm dữ liệu đấy
Bởi vậy khi viết code tôi rất ghét cái vụ End(xlUp) hoặc End(xlDown) ---> Bạn dự trù dữ liệu đến đâu thì cứ xoá đến nấy đi. Đơn giản là Range("A5:B1000").ClearContents mà chơi thôi
 
Upvote 0
Xin thưa với Thầy là Insert Pictures thì được, tức câu lệnh này:

Target.Parent.Pictures.Insert(PicPath)

Nhưng xoá Pictures thì câu này lại không được:

Target.Parent.Pictures(Target.Address).Delete

Còn tại sao thì hỏi Anh Bill thôi! Hic

----------------

Cũng như câu này:

Sheet1.Pictures(Application.Caller)

Đối với Ex2003 nó không hiểu, nhưng câu dưới lại hiểu:

Sheet1.Shapes(Application.Caller)
Bài này đúng ra đã giải quyết xong nhưng thật lòng tôi vẫn ấm ức. Đánh chết tôi cũng không tin rằng Pictures object không dùng được trên Excel 2003
Mày mò tìm phần mềm Portable 2003 để thử, cuối cùng cũng phát hiện ra nguyên nhân: Trên Excel 2003, code VBA sẽ không làm việc nếu trong tên của Picture có ký tự "$"
Vậy là xong! Chỉ cần đặt lại tên file ảnh không có ký tự chết tiệt này (thay Address bằng Address(0,0) ) là mọi chuyện được giải quyết
Mời thử file
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cám ơn thày! mấy hôm nay nhà em thấy buồn buồn không vào mạng nên không biết thày vẫn còn giải quyết vấn đề đang vướng hôm trước, xin cám ơn thày .
 
Upvote 0
Bài này đúng ra đã giải quyết xong nhưng thật lòng tôi vẫn ấm ức. Đánh chết tôi cũng không tin rằng Pictures object không dùng được trên Excel 2003
Mày mò tìm phần mềm Portable 2003 để thử, cuối cùng cũng phát hiện ra nguyên nhân: Trên Excel 2003, code VBA sẽ không làm việc nếu trong tên của Picture có ký tự "$"
Vậy là xong! Chỉ cần đặt lại tên file ảnh không có ký tự chết tiệt này (thay Address bằng Address(0,0) ) là mọi chuyện được giải quyết
Mời thử file
Đúng là nhờ cái việc ấm ức này mà Thầy đã tìm ra nguyên nhân chính là do ký tự đặc biệt đã ảnh hưởng đến câu lệnh.

Không những ký tự $ không thôi mà còn nhiều ký tự như @, &, #, v.v... khi ta đặt tên hình có các ký tự đó sẽ bị lỗi khi dùng câu lệnh này:

Sheet1.Pictures("Picture***").Delete

(với *** là ký tự đặc biệt)

Nhưng với câu lệnh này:

Sheet1.Shapes("Picture***").Delete

Thì không hề bị lỗi đó.

Cho nên, khi gặp rủi ro thì ta cố gắng chọn những rủi ro ít gây thiệt hại nhất để thực hiện, vậy thì theo em, em sẽ chọn phương án SHAPES thay cho phương án PICTURES, đó là một câu lệnh tối ưu, xét về thời gian thì cả 2 câu lệnh tương đương nhau, đôi khi dùng SHAPES để xóa còn nhanh hơn tí xíu (cho 2000 hình)
 
Upvote 0
Cho nên, khi gặp rủi ro thì ta cố gắng chọn những rủi ro ít gây thiệt hại nhất để thực hiện, vậy thì theo em, em sẽ chọn phương án SHAPES thay cho phương án PICTURES, đó là một câu lệnh tối ưu, xét về thời gian thì cả 2 câu lệnh tương đương nhau, đôi khi dùng SHAPES để xóa còn nhanh hơn tí xíu (cho 2000 hình)

Sở dĩ tôi không chọn SHAPES mà chọn PICTURES vì quan điểm cua tôi là: Luôn gọi Object đúng với KIỂU của nó
Ví dụ:
- Với hình vuông, tôi sẽ dùng Rectangles
- Với đường thằng, tôi sẽ dùng Lines
vân vân... tương tự vậy với Pictures. Mục đích là gọi cái nào ra cái đó, không chơi kiểu gọi chung chung (trừ trường hợp bất khả kháng)
Về tốc độ tôi nghĩ chưa chắc là giống nhau đâu. Bởi SHAPES là nói chung chung cho mọi object (kể cả ActiveX control). Vậy đương nhiên bộ nhớ phân phối cho nó phải lớn hơn so với việc ta phân biệt rõ ràng cái nào thuộc về loại object nào
 
Upvote 0
Xin nhờ các cao thủ GPE chỉ giúp mình viết code chèn hình từ thư mục. Hình sau khi chèn phải nằm ở trong khung như file đính kèm dưới và lấy tên file chèn vào dưới hình.
Trong bài trên bác ndu96081631 đã có code chèn hình rồi, nhưng hình sau khi chèn ở các ô kế tiếp nhau. Nay mình muốn chèn hình trong các ô cách xa nhau khoảng 12 dòng.
Xin cảm ơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
hic... sao không có ai giúp mình hết vậy

Mình góp ý với bạn thế này.
Vấn đề mà bạn hỏi bạn hoàn toàn có thể tự mình thực hiện được nếu bạn bỏ một chút thời gian ra để đọc toàn bộ Topic này. Bạn hãy tập thói quen là tự mày mò tìm hieeurvaf làm thử theo tất cả các bài viết trên GPE, đến khi không thể thục hiện được thì bạn mới hỏi.
Có thể nhận thấy vấn đề bạn hỏi đã được lặp lại rất nhiều lần từ rất nhiều người trên topic này.
Mình hoàn toàn không có kiến thức gì về VBA cả, mình cũng mất cả tuần lễ để ngồi ngâm cứu mấy thứ các thày viết trên này, để rồi cũng có thể giúp cho bạn hoàn thành được File yêu cầu.
Ý mình muốn nói là mọi người(chứ không phải nói riêng với bạn), đừng lặp đi lặp lại nhiều lần một nội dung, một câu hỏi trong khi những vấn đề đó đã được các thày trả lời trước đó ở những topic khác. Nếu cứ như vậy có thể các Thày cũng không muốn trả lời, đó cũng chính là lý do mà bạn hỏi cả hơn nửa năm nay mà không ai trả lời cho bạn.
Đó là chia sẻ của mình, có thể làm cho bạn và nhiều người khác phản đối, nhưng theo mình thì tìm hiểu rồi sau đó tự mình vọc thử sẽ giúp mình hiểu kĩ vấn đề hơn, đó cũng là một phương pháp học tập.
Còn dưới đây là File mình đã làm cho bạn, không biết có đúng ý bạn hay kjhoong. Bạn tham khảo, nếu có thể giúp thì mình sẽ giúp. VBA mình ko biết gì nên cũng chỉ là gà mù đi giúp gà mờ thôi bạn nhé.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom