Kết quả 1 đến 3 của 3

Chủ đề: Tạo Form bằng DialogSheet

  1. #1
    mantrangchu Guest

    Tạo Form bằng DialogSheet

    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
    40px

    Ở đâ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:

    Mã nguồn 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 iEnd 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:

    Mã nguồn PHP:
    DialogSheets("Tên sheet").EditBoxes("Tên EditBox").Text = "Gì gì đó"  
    - Để gán 1 chuổi vào Label, ta viết:

    Mã nguồn PHP:
    DialogSheets("Tên sheet").Labels("Tên Label").Caption = "Gì gì đó"  
    - Gán giá trị cho Checkbox

    Mã nguồn PHP:
    DialogSheets("Tên sheet").CheckBoxes("Tên CheckBox").Value= True 'hoặc False  
    - Điều khiển thuộc tính Enable cho object

    Mã nguồn PHP:
    DialogSheets("Tên sheet").EditBoxes("Tên EditBox").Enabled = True 'hoặc False  
    - Set Focus cho control

    Mã nguồn 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é)

  2. #2
    hieuind1 Guest
    Trích dẫn Gửi bởi hoacatdang
    Theo cách chỉ dẫn như trên, tôi có thể thiết kế và gọi Dialog tùy thích. Nhưng có một vấn đề khác là, nếu như disable macro thi nút lệnh vẫn gọi được Dialog. Có ai bít xin chỉ giáo dùm!
    Disalbe maco rồi thì còn gọi được cái gì nữa chứ ---> Mọi code đều bị "khóa" bạn à!

  3. #3
    benjamin239 Guest
    Theo cách chỉ dẫn như trên, tôi có thể thiết kế và gọi Dialog tùy thích. Nhưng có một vấn đề khác là, nếu như disable macro thi nút lệnh vẫn gọi được Dialog. Có ai bít xin chỉ giáo dùm!

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •