anhtuan1066
Thành viên gạo cội




- Tham gia
- 10/3/07
- Bài viết
- 5,802
- Được thích
- 6,912
Mổi khi có nhu cầu tạo Form để làm công việc gì đó, chúng ta thường dùng UserForm mà quên rằng Excel có 1 công cụ khá đơn giản, đó là DialogSheet
Bài viết này không có tham vọng hướng dẩn tất cả về DialogSheet, chỉ dùng File ví dụ để minh họa đôi nét DialogSheet và các thuộc tính của nó
Tôi lấy đề tài điều khiển các dấu phân cách trong Tools\Options\International, mời các bạn tham khảo:
1> Tạo Form:
Mở 1 file Excel trắng, click phải vào tên sheet và chọn Insert\MS Excel 5.0 Dialog
2> Vẽ thêm các Control vào form
Ở đây tôi vẽ thêm 2 Label và 1 Shape (Rectangle) như hình:
3> Tiến hành viết code
Các bạn cứ viết sub bình thường, sau đó muốn Control nào gọi sub nào thì chi việc click phải vào Control và chon Assign Macro... nhé:
Đây là các sub có trong file
Ở đây tôi dùng thêm hàm UniConvert để hổ trợ chuyển kiểu gõ VNI thành tiếng Việt có dấu:
4> Chạycode
Bấm Alt + F8, chọn ShowForm, các bạn sẽ thấy giao diện form thế này:
Nó sẽ thể hiện đúng kiểu dấu phân cách đang được thiết lập trên máy tính của bạn
5> Nâng cấp:
Code trên chỉ cho ta biết được các thiết lập về dấu phân cách. Giờ ta nâng cấp thêm bằng cách vẽ thêm 1 số control vào DialogSheet để có thể điều khiển luôn các thiết lập này... Đại khái giao diện form như sau:
(xem file DialogSheetForm_02.xls)
Lưu ý về các thuộc tính:
- Để gán 1 chuổi vào EditBox, ta viết:
- Để gán 1 chuổi vào Label, ta viết:
- Gán giá trị cho Checkbox
- Điều khiển thuộc tính Enable cho object
- Set Focus cho control
Sơ lược vài nét về DialogSheet, mời xem file đính kèm và tự khám phá thêm. Nếu khéo léo, các bạn có thể thiết kế 1 DialogSheet hoành tráng không kém UserForm đâu
(Các bạn vào menu Format\Sheet\Unhide để cho hiện DialogSheet nhé)
Bài viết này không có tham vọng hướng dẩn tất cả về DialogSheet, chỉ dùng File ví dụ để minh họa đôi nét DialogSheet và các thuộc tính của nó
Tôi lấy đề tài điều khiển các dấu phân cách trong Tools\Options\International, mời các bạn tham khảo:
1> Tạo Form:
Mở 1 file Excel trắng, click phải vào tên sheet và chọn Insert\MS Excel 5.0 Dialog
2> Vẽ thêm các Control vào form
Ở đây tôi vẽ thêm 2 Label và 1 Shape (Rectangle) như hình:
3> Tiến hành viết code
Các bạn cứ viết sub bình thường, sau đó muốn Control nào gọi sub nào thì chi việc click phải vào Control và chon Assign Macro... nhé:
Đây là các sub có trong file
a) Sub để Show Form
b) Sub để chạy code khi Form load
Vấn đề là làm thế nào để DialogSheet hiểu rằng code trên sẽ chạy khi Form load?
Các bạn chỉ cần click phải vào tiêu đề của Dialogsheet, chọn Assign Macro... và gõ vào khung Macro Name dòng chữ Form_Initialize (tên sub mà bạn muốn chạy), bấm OK là xong!
PHP:
Sub ShowForm()
DialogSheets("Dialog1").Show
End Sub
PHP:
Private Sub Form_Initialize()
Dim DecSym As String, DigSym As String
If Application.UseSystemSeparators Then
DecSym = Application.International(xlDecimalSeparator)
DigSym = Application.International(xlThousandsSeparator)
Else
DecSym = Application.DecimalSeparator
DigSym = Application.ThousandsSeparator
End If
With DialogSheets("Dialog1")
.Labels("LB1").Caption = UniConvert("Da61u pha6n ca1ch nga2n tre6n ma1y ba5n la2 da61u " & IIf(DigSym = ",", "pha63y", "cha61m"))
.Labels("LB2").Caption = UniConvert("Da61u tha65p pha6n tre6n ma1y ba5n la2 da61u " & IIf(DecSym = ",", "pha63y", "cha61m"))
.Shapes("RT1").TextFrame.Characters.Text = 1 & DigSym & 234 & DigSym & 567 & DecSym & 89
.Focus = "BT1"
End With
End Sub
Các bạn chỉ cần click phải vào tiêu đề của Dialogsheet, chọn Assign Macro... và gõ vào khung Macro Name dòng chữ Form_Initialize (tên sub mà bạn muốn chạy), bấm OK là xong!
Ở đây tôi dùng thêm hàm UniConvert để hổ trợ chuyển kiểu gõ VNI thành tiếng Việt có dấu:
PHP:
Private Function UniConvert(Text As String) As String
Dim VNMethod, CharCode, i As Long
UniConvert = Text
VNMethod = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
"e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
"o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
"e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
"o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
For i = 0 To UBound(VNMethod)
UniConvert = Replace(UniConvert, VNMethod(i), CharCode(i))
UniConvert = Replace(UniConvert, UCase(VNMethod(i)), UCase(CharCode(i)))
Next i
End Function
4> Chạycode
Bấm Alt + F8, chọn ShowForm, các bạn sẽ thấy giao diện form thế này:
Nó sẽ thể hiện đúng kiểu dấu phân cách đang được thiết lập trên máy tính của bạn
5> Nâng cấp:
Code trên chỉ cho ta biết được các thiết lập về dấu phân cách. Giờ ta nâng cấp thêm bằng cách vẽ thêm 1 số control vào DialogSheet để có thể điều khiển luôn các thiết lập này... Đại khái giao diện form như sau:
(xem file DialogSheetForm_02.xls)
Lưu ý về các thuộc tính:
- Để gán 1 chuổi vào EditBox, ta viết:
PHP:
DialogSheets("Tên sheet").EditBoxes("Tên EditBox").Text = "Gì gì đó"
PHP:
DialogSheets("Tên sheet").Labels("Tên Label").Caption = "Gì gì đó"
PHP:
DialogSheets("Tên sheet").CheckBoxes("Tên CheckBox").Value= True 'hoặc False
PHP:
DialogSheets("Tên sheet").EditBoxes("Tên EditBox").Enabled = True 'hoặc False
PHP:
DialogSheets("Tên sheet").Focus = "Tên Control"
Sơ lược vài nét về DialogSheet, mời xem file đính kèm và tự khám phá thêm. Nếu khéo léo, các bạn có thể thiết kế 1 DialogSheet hoành tráng không kém UserForm đâu
(Các bạn vào menu Format\Sheet\Unhide để cho hiện DialogSheet nhé)