Thay đổi dạng đồ thị bằng listbox hoặc combobox

Liên hệ QC

ptm0412

Bad Excel Member
Thành viên BQT
Administrator
Tham gia
4/11/07
Bài viết
14,165
Được thích
36,765
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Consultant
Chọn kiểu biểu đồ bằng 1 Listbox hoặc Combobox

Bài này giới thiệu hai cách để thay đổi dạng đồ thị bằng cách sử dụng listbox hoặc combobox.
Nếu 1 đồ thị nằm chung sheet với dữ liệu, bạn có thể dùng cả listbox trong thanh công cụ form và listbox trong thanh công cụ Control Toolbox. Nếu đồ thị nằm trong 1 sheet riêng của mình nó, bạn chỉ có thể dùng listbox của thanh công cụ form.

1. Cách thứ nhất:
Bạn cần có 1 danh sách các hằng số VBA đại diện cho các dạng biểu đồ (thuộc tính ChartType gủa object Chart), thí dụ đồ thị dạng cột thông thường có giá trị ChartType = 51. Hoặc nếu bạn có thể thuộc tên và không sợ gõ sai chính tả, thì đồ thị dạng cột có ChartType = xlColumnClustered hoặc 1 dạng đồ thị khác xlCylinderBarStacked.
Các hằng số và tên type này có thể tra cứu trong Object Browser của cửa sổ VBA, mục xlChartType.

ChangeChartType01.gif

Các bước thực hiện:

Lập 1 danh sách các hằng VBA này kèm theo dạng biểu đồ, thí dụ 4 dạng biểu đồ quen thuộc: Dạng đường thẳng, dạng vùng, dạng pie tròn, dạng cột. Danh sách này giả sử đặt ở vùng A16:B19. bạn có thể đặt name cho vùng này chẳng hạn như Source1.
ChangeChartType02.gif


2. Từ vùng dữ liệu A1:B9, vẽ 1 biểu đồ có dạng bất kỳ.
ChangeChartType03.gif

3. Dùng chuột chọn listbox trong thanh công cụ Control Toolbox, vẽ 1 cái. Kinh nghiệm tôi thường dùng các control của thanh công cụ này.
4. Nhấn nút Design, chọn cái listbox, nhấn Property trong thanh công cụ này, gán các Property như sau:
- Name = Select1
- List Fill Range = A16:B19 hoặc Source1 nếu đã đặt tên vùng này
- Linked cell = C16
- Column count = 2
- Bound Column = 1
- List Width = 0;100

ChangeChartType04.gif


5. Để nguyên tình trạng Design, nhấn nút Show code trên thanh công cụ control Toolbox, cửa sổ code hiện ra, gõ đọan code sau:

PHP:
Private Sub Select1_Change()
ActiveSheet.ChartObjects(1).Chart.ChartType = Range("C16").Value1
End Sub

Quay lại cửa sổ Excel, ra khỏi chế độ Design, click chọn 1 trong các giá trị của listbox, xem kết quả.

ChangeChartType05.gif

Ghi chú về code:
Do sheet chỉ có 1 đồ thị, nên khi chọn ChartObjects(1) đương nhiên là chọn biểu đồ này, nếu không ta phải chọn tên đồ thị thí dụ ChartObjects(“Chart 1”).Chart.ChartType
=Range("C16").Value có thể thay bằng
= Cells(16,3).Value hoặc gán trực tiếp
= Select1.Value


 
Cách 2

Chọn kiểu biểu đồ bằng 1 Listbox hoặc Combobox (tiếp theo)
Cách 2:
Làm như cách 1 bài trước, Excel sẽ tự cho màu và tự định dạng các thành phần của đồ thị như vùng đồ thị, trục tung và trục hoành, các tiêu đề đồ thị, tiêu đề trục toạ độ,…
Ta có thể không muốn rằng mọi dạng đồ thị có định dạng tự động như thế. Viết code nhiều để định dạng theo ý muốn thì ta không biêt hoặc làm biếng.

Cách 2 sẽ yêu cầu bạn thực hiện tất cả các dạng đồ thị với kích thước bằng nhau, định dạng theo ý muốn, xếp chúng chồng khít lên nhau.

Cái listbox bây giờ sẽ có source (List fill Range) là 1 vùng có tên của các đồ thị đã vẽ, mặc định Excel sẽ đặt tên là Chart 1, Chart 2, …

ChangeChartType09.gif

Vùng dữ liệu A1:C9 dùng để vẽ các biểu đồ sau, chú ý vẽ xong đừng di chuyển chúng, cái sau sẽ tự đè lên cái trước, và tất cả sẽ bằng nhau.

ChangeChartType06.gif

ChangeChartType07.gif

ChangeChartType08.gif

Tạo 1 listbox với các property như bài 1
Và tạo code cũng đơn giản y như vậy:
PHP:
Private Sub Select2_Change()
ActiveSheet.ChartObjects(Cells(11, 3).Value).BringToFront
End Sub

Mục đích của code là đưa cái biểu đồ ta chọn lên trên cùng, che khuất những cái kia.

Ghi chú về code:
1. Ta có thể không chắc tên của đồ thị nào là chart 1, chart 2, vì dù Excel tự đặt tên theo thứ tự tăng dần và theo thứ tự vẽ, nhưng có thể ta đã lỡ xoá 1 cái, và tên bị nhảy số. Vậy trong cửa sổ Immediate của VBA, gõ các câu lệnh sau:
?activesheet.chartobjects(1).name
?activesheet.chartobjects(2).name
?activesheet.chartobjects(3).name

Ta sẽ có lần lượt các câu trả lời cho các tên. Còn nếu chartobjects(2) lại có tên là Chart 5 thì ta hãy sửa tên bằng cách gõ dòng lệnh sau cũng trong vùng Immediate:
activesheet.chartobjects(2).name = “Chart 2”
Hoặc bằng bất cứ tên gì ta thích.

2. ChartObjects(Cells(11, 3).Value) có thể thay bằng ChartObjects(Select2.Value)
 
Gởi file đính kèm cho bài trên.
 

File đính kèm

  • ChangeChartType.xls
    40 KB · Đọc: 165
thanks bạn nhiều nha

bạn ơi cho mình hỏi nếu mình có nhiều mặt hàng cần vẽ đồ thị (mỗi mặt hàng có số liệu tương ứng đều phải vẽ 4 loại đồ thị cơ bản đó), có cách nào để mỗi khi chọn 1 mặt hàng thì cũng chọn đc từng loại đồ thị tương ứng như bạn làm ko

thanks bạn
 
Chỉnh sửa lần cuối bởi điều hành viên:
có cách nào để mỗi khi chọn 1 mặt hàng thì cũng chọn đc từng loại đồ thị tương ứng như bạn làm ko
Đó là 1 dạng đồ thị động, cụ thể là vùng dữ liệu động. Bạn có thể kết hợp vào vụ chọn loại đồ thị. Tìm kiếm thêm về vùng dữ liệu động cho đồ thị.
 
bạn ơi làm phiền bạn lần nữa, vì ban đầu mình thấy kiểu bài "tương tác với biểu đồ bằng combobox hoặc listbox" có vẻ hợp với đề án của mình rồi nhưng giờ giảng viên mình yêu cầu phải làm rõ 2 mục đích sau:
1. cho người sử dụng chọn được loại biểu đồ (là giống với file "ChangeChartType" của bạn gửi)
2. chọn được cột dữ liệu muốn vẽ tức là bài của mình có nhiều cột dữ liệu phải vẽ í (đúng là hơi giống bài "ChartByComboboxorCheckbox" )
các bạn có cách nào giúp mình với, mình đang cần rất gấp, cám ơn nhiều
 
Gần 1 năm trôi qua, tưởng bạn vẽ được rồi chứ. Thôi bạn muốn vẽ thì phải có dữ liệu, đưa dữ liệu lên đi.
 
trời đất mới có 2 tuần chứ 1 năm đâu hả bạn ^^!
mình vẽ dữ liệu tự do bạn ạ nên bạn giúp đc mình thì dùng số liệu nào cũng ok, chỉ cần thỏa mãn 2 đk mình nói ở trên là đc
hi thanks bạn
 
Hai năm thì phải. Dữ liệu tự do thì dễ rồi. Vẫn dùng 2 cách, chọn serie data trong ô màu xanh, chọn loại biểu đồ trong list box.
 

File đính kèm

  • ChangeChartType&Data.rar
    15.4 KB · Đọc: 125
hi, đúng là cái mình cần rùi, với bạn là 2 năm mà với mình thì mới bik topic này có 2 tuần à. mà bạn ui có thể chỉ mình cách làm đc ko, cách làm kiểu 1 value thì mình hiểu rùi, nhưng cách nhiều value này làm sao vậy bạn? thanks bạn nhiều nhe
 
Bữa nay 29/12, còn 2 ngày nữa là qua năm 2010, chẳng kéo dài 2 năm còn gì.

Đó là dữ liệu động, do name động mà có. Bạn vào define name mà xem
 
Lần chỉnh sửa cuối:
cám ơn bạn mình sẽ tìm hiểu xem sao
 
bạn Ptm có thể post hướng dẫn thêm cách làm cho file changecharttype&data đc ko. mình ko hiểu lắm sau khi tạo đc cái define name rồi thì làm thế nào vẽ đc biểu đồ? mình đang cần cái này để làm đề án báo cáo thống kê thị trường du lịch cho kì tới. thanks bạn
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom