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.
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.
2. Từ vùng dữ liệu A1:B9, vẽ 1 biểu đồ có dạng bất kỳ.
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
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:
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ả.
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
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.

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.

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

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

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ả.

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