Tạo ListBoxt với RowSoure là các hình vẽ

  • Thread starter Thread starter viehoai
  • Ngày gửi Ngày gửi
Liên hệ QC

viehoai

Thành viên gắn bó
Tham gia
22/5/09
Bài viết
2,599
Được thích
2,908
Tôi muốn tạo một Form thực hiện như sau:
1. Khi nhấn nút "Tra hình" Một Form xuất hiện trong đó có 1 Listbox với nguồn là các đối tượng (hình vẽ) Ở Sheet2
2. Khi chọn một đối tượng nào đó, thì hình đó sẽ chèn vào đúng giữa hàng theo trình tự (giống như ..End(xlup))
Xin các anh chị giúp đỡ. Cảm ơn các anh chị
viehoai
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi muốn tạo một Form thực hiện như sau:
1. Khi nhấn nút "Tra hình" Một Form xuất hiện trong đó có 1 Listbox với nguồn là các đối tượng (hình vẽ) Ở Sheet2
2. Khi chọn một đối tượng nào đó, thì hình đó sẽ chèn vào đúng giữa hàng theo trình tự (giống như ..End(xlup))
Xin các anh chị giúp đỡ. Cảm ơn các anh chị
viehoai
Việc dùng ImageCombo đã từng đề cập trên diễn đàn rồi:
http://www.giaiphapexcel.com/forum/showthread.php?7146-Đố-vui-về-VBA!/page25
Nếu Object là 1 Picture hoặc là 1 Image thì dễ đưa vào ImageList. Tuy nhiên với Shape thì tôi chẳng biết làm cách nào
(Đã thử Save Shape thành file hình GIF nhưng khi đưa vào ImageCombox, hình trông rất xấu)
 
Upvote 0
http://www.mediafire.com/?zuu2wmulnzz

Hic, trình độ em dốt nát, chưa biết về cái này. Có ai hướng dẫn dùm em với được không ạ. Em cũng ko hiểu cái ảnh nó nằm ở đâu mà giỏi thế, hjc hjc. Thực tình không hiểu mặc đù đã đọc qua mấy bài viết mà mọi người đã bàn luận ở cái link anh ndu đưa cho. hjc
 
Upvote 0
Cái này chỉ làm việc với combobox thôi, nếu muốn dạng listbox thì phải dùng Listview
 
Upvote 0
http://www.mediafire.com/?zuu2wmulnzz

Hic, trình độ em dốt nát, chưa biết về cái này. Có ai hướng dẫn dùm em với được không ạ. Em cũng ko hiểu cái ảnh nó nằm ở đâu mà giỏi thế, hjc hjc. Thực tình không hiểu mặc đù đã đọc qua mấy bài viết mà mọi người đã bàn luận ở cái link anh ndu đưa cho. hjc
Thì bạn đã làm được rồi đấy thôi, còn hỏi gì nữa?
Muốn cho hình vào ComboBox thì:
- Trước tiên cần 2 món đồ chơi: ImageList và ImageCombo
- ImageList dùng để chứa hình (như cái kho lưu trử)
- ImageCombo để hiển thị những hình có trong ImageList
- Code để load hình (đã có trong file)
 
Upvote 0
Thì bạn đã làm được rồi đấy thôi, còn hỏi gì nữa?
Muốn cho hình vào ComboBox thì:
- Trước tiên cần 2 món đồ chơi: ImageList và ImageCombo
- ImageList dùng để chứa hình (như cái kho lưu trử)
- ImageCombo để hiển thị những hình có trong ImageList
- Code để load hình (đã có trong file)
Không anh ơi, cái link trên là file của một người nào đó đã làm, em lần theo cái link anh cho và lấy về đó ạ.
thực sự em vẫn chưa hiểu imagelist nằm ở đâu và cách làm ra làm sao.

Em cảm ơn anh.
 
Upvote 0
Không anh ơi, cái link trên là file của một người nào đó đã làm, em lần theo cái link anh cho và lấy về đó ạ.
thực sự em vẫn chưa hiểu imagelist nằm ở đâu và cách làm ra làm sao.

Em cảm ơn anh.
Đọc tiếp bài 257 sẽ thấy mà:
http://www.giaiphapexcel.com/forum/showthread.php?7146-%C4%90%E1%BB%91-vui-v%E1%BB%81-VBA%21&p=234994#post234994
Quan trọng là vẽ cái ImageList ấy ra bảng tính rồi chèn hình vào thôi
Còn nếu không nhìn thấy ImageList có nghĩa là người ta cố tính giấu đi ---> Bấm nút Design Mode, chuyện sang cột AZ sẽ thấy
(Trong file mà bạn đưa lên thì chỉ cần bấm nút Design Mode đã thấy ngay ImageList tại cell A1)
 
Lần chỉnh sửa cuối:
Upvote 0
Các bạn tham khảo kỹ thuật BSAC nhé.

DrawingImage.jpg


Lập trình để thay đổi Items trong Combobox và Lisbox:
http://www.bluesofts.net/Products/BSAC/Demos/BSCanvasWithDrawing/BSCanvasWithDrawing.html

Lập trình nâng cao, thêm ảnh vào Items trong Combobox và Lisbox:
http://www.bluesofts.net/Products/BSAC/Demos/DrawingItemWithImage/DrawingItemWithImage.html

Tôi làm cái này để phục vụ cho các giải pháp phần mềm của Bluesofts.
 
Lần chỉnh sửa cuối:
Upvote 0
Các bạn tham khảo kỹ thuật BSAC nhé.

DrawingImage.jpg


Lập trình để thay đổi Items trong Combobox và Lisbox:
http://www.bluesofts.net/Products/BSAC/Demos/BSCanvasWithDrawing/BSCanvasWithDrawing.html

Lập trình nâng cao, thêm ảnh vào Items trong Combobox và Lisbox:
http://www.bluesofts.net/Products/BSAC/Demos/DrawingItemWithImage/DrawingItemWithImage.html

Tôi làm cái này để phục vụ cho các giải pháp phần mềm của Bluesofts.
Xin hỏi: Kỹ thuật BSAC là gì?
Vả lại, VBA cho ta sẳn các Control ImageListImageCombo để chuyên làm việc này rồi, đâu cần phải làm thêm gì nữa chứ
 
Lần chỉnh sửa cuối:
Upvote 0
Xin hỏi: Kỹ thuật BSAC là gì?
Vả lại, VBA cho ta sẳn các Control ImageListImageCombo để chuyên làm việc này rồi, đâu cần phải làm thêm gì nữa chứ

+ ImageCombo không hỗ trợ ảnh nhưng không hỗ trợ unicode.
+ Listbox trong Userform không hỗ trợ ảnh.
+ Tất cả các controls của MSCOMCTL.OCX (treeview, listview, combo, lisbox,...) đều không hỗ trợ unicode.

BSAC cung cấp đầy đủ bộ controls hỗ trợ unicode, đặc biệt cho phép người dùng thay đổi hình dạng của các items/mục trong nó. Điều đáng nói nữa là BSAC hỗ trợ tạo Taskpane trong VBA. Microsoft chỉ hỗ trợ kỹ thuật tạo Taskpane cho Office 2003 (SP3), và từ Office 2007 trở lên với trong bộ VSTO trong lập trình .NET.


DemoBSACCtrls.jpg


BSTaskPane1.1.JPG

 
Upvote 0
+ ImageCombo không hỗ trợ ảnh nhưng không hỗ trợ unicode.
+ Listbox trong Userform không hỗ trợ ảnh.
+ Tất cả các controls của MSCOMCTL.OCX (treeview, listview, combo, lisbox,...) đều không hỗ trợ unicode.
Thật ra có 1 vấn đề mà tôi đang quan tâm (cả viethoai cũng quan tâm), đó là liệu có thể đưa hình vẽ (Drawing Object) vào ImageCombo hay không? Còn những thứ khác thì chưa mấy quan trọng (ít nhất là ở trình độ hiện tại)
 
Upvote 0
Thật ra có 1 vấn đề mà tôi đang quan tâm (cả viethoai cũng quan tâm), đó là liệu có thể đưa hình vẽ (Drawing Object) vào ImageCombo hay không? Còn những thứ khác thì chưa mấy quan trọng (ít nhất là ở trình độ hiện tại)

Nếu muốn dùng ImageCombo mà ảnh lấy từ đối tượng Drawing/Shape là vô cùng khó khắn vì phải làm gián tiếp: đầu tiên phải copy ảnh vào clipboard, sau đó đưa dữ liệu ảnh từ clipboard vào một đối tượng ảnh được tạo bởi hàm API, rồi lại đưa handle của đối tượng ảnh này vào trong ListImages có cái này rồi ta mớil ại dùng ImageCombo bình thường. Nói như vậy để biết cái mọi người muốn không đơn giản tí gì. Làm được như vậy cũng phải tầm chuyên gia lập trình Windows API.

Có một cách đỡ vất vả hơn cách trên là không dùng Shape mà dùng đối tượng Image trong mục ActiveX (Controls Toolbox) và dùng ListImages nạp handle ảnh của đối tượng này vào rồi ta mới lại dùng ImageCombo.

Thực ra cái BSAC em nói ra để mọi người thấy có một ActiveX đơn giản và hiệu quả ứng dụng thôi chứ dùng nó là phải người có đầu tư về tài chính và xác định kết quả làm việc của mình là một một sản phẩm trong VBA thực sự chuyên nghiệp. Ví dụ sản phẩm Dự toán Delta 7.0 của cty cổ phần Delta đang dùng BSAC.
 
Upvote 0
Nhân tiện, anh Tuân cho hỏi cú pháp nạp cho combo,list... trong BSAC ngoài Add ra sử dụng ListFillRange, List(), Rowsouce... cú pháp ra sao nhỉ. Mình nạp không thành công.

Xin lỗi chủ topic và GPE nha vì chen ngang chút.
 
Upvote 0
Nhân tiện, anh Tuân cho hỏi cú pháp nạp cho combo,list... trong BSAC ngoài Add ra sử dụng ListFillRange, List(), Rowsouce... cú pháp ra sao nhỉ. Mình nạp không thành công.

Xin lỗi chủ topic và GPE nha vì chen ngang chút.

Vâng, việc tạo property như ListFillRange, List(), Rowsource trong các controls của BSAC lại chưa có. Cái này dễ ở chỗ chỉ là nhận range rồi cho vòng lặp nhận từng dòng một, trong thiết kế BSAC tác giả rất khó thực hiện sao cho khi dữ liệu trong trong Range thay đổi thì giá trị trong combo, listbox cũng thay đổi theo. Đây lại là yếu điểm của BSAC so với các controls của Userform :(.
 
Upvote 0
Đền bạn đây, theo mình nên làm đơn giản thế này thôi, vì mình là GPE mà.Mình dùng 1 sheet làm thư viện Shape rồi tra trên đó. Đưa con trỏ tới ô có hình cần chọn rồi nhấn chọn là OK. Bạn xem thử file ví dụ nha.
Nếu được bạn làm tiếp phần xoá hình và chống nhập chồng hình nha
 

File đính kèm

Upvote 0
Vâng, việc tạo property như ListFillRange, List(), Rowsource trong các controls của BSAC lại chưa có. Cái này dễ ở chỗ chỉ là nhận range rồi cho vòng lặp nhận từng dòng một, trong thiết kế BSAC tác giả rất khó thực hiện sao cho khi dữ liệu trong trong Range thay đổi thì giá trị trong combo, listbox cũng thay đổi theo. Đây lại là yếu điểm của BSAC so với các controls của Userform :(.

Điều anh Tuân nói cũng không sao, có chăng ảnh hưởng chút tốc độ và code nap hơi gò bó 1 chút. Việc làm tươi dữ liệu thì ta phải chủ động chứ mấy khi mà mong các Control AutoRefresh được.
Cám ơn anh Tuân đã free 1 thư viện đối tượng thực sự ấn tượng về mỹ quan và ngôn ngữ. Nhưng cái khó là làm sao khi sang máy không cài BSAC vẫn sử dụng được.
Anh hướng dẫn đoạn code khi mở file Excel kiểm tra hệ thống, nếu chưa có BSAC thì tự động cài BSAC với. Cám ơn anh Tuân.
 
Upvote 0
Điều anh Tuân nói cũng không sao, có chăng ảnh hưởng chút tốc độ và code nap hơi gò bó 1 chút. Việc làm tươi dữ liệu thì ta phải chủ động chứ mấy khi mà mong các Control AutoRefresh được.
Cám ơn anh Tuân đã free 1 thư viện đối tượng thực sự ấn tượng về mỹ quan và ngôn ngữ. Nhưng cái khó là làm sao khi sang máy không cài BSAC vẫn sử dụng được.
Anh hướng dẫn đoạn code khi mở file Excel kiểm tra hệ thống, nếu chưa có BSAC thì tự động cài BSAC với. Cám ơn anh Tuân.

Vâng. Khi file Excel có dùng ít nhất một control của BSAC thì nó đã Reference tới thư viện BSAC. Nếu file Excel này chạy trên máy không cài BSAC thì lập tức bị báo lỗi file không chạy đc, trong VBE->Reference báo lỗi "MISSING....BSAC...". Vấn đề này là chung cho tất cả các ứng dụng dùng ActiveX.

Vậy khi viết một ứng dụng mà dùng các thư viện cũng như ActiveX Controls (DLL, OCX) thì nên tạo bộ cài đặt và cài luôn các thư viện này. Trên mạng có nhiều pm tạo bộ cài đặt miễn phí, em đang dùng InnoSetup, hỗ trợ unicode. Nếu không tạo bộ cài đặt thì đặt các thư viện này vào trong cùng thư mục file Excel rồi tạo một file Huongdan.txt với nội dung hướng dẫn cài các thư viện vào System32. Lưu ý, bộ controls của BSAC nằm trong 1 file duy nhất BSAC.OCX.
 
Upvote 0
Anh có thể chạy hàm này trên một file chưa nhúng BSAC để kiểm tra độc lập xem BSAC đã được cài chưa.

Mã:
Function BSACIsReady() As Boolean
    Dim objBSAC As Object
    
    On Error Resume Next
    Set objBSAC = CreateObject("BSAC.BSToolTip")
    BSACIsReady = Not objBSAC Is Nothing
    If BSACIsReady Then
        objBSAC.Title = "BSAC - Bluesofts ActiveX Controls"
        objBSAC.Prompt = "BSAC is ready!"
        objBSAC.Icon = 1
        objBSAC.Active = True
        MsgBox objBSAC.Prompt, vbInformation, objBSAC.Title
        Set objBSAC = Nothing
    End If
    
End Function
 
Upvote 0
Web KT

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

Back
Top Bottom