TextBox và VBA

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi levanduyet, 15 Tháng mười 2005.

10,375 lượt xem

  1. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Lược dịch từ http://www.cpearson.com/excel/TextBox.htm

    Nếu bạn đang dùng VBA Userform, hầu như bạn có dùng TextBox control và trong nhiều trường hợp bạn muốn ngăn chặn hay chỉ cho phép người sử dụng nhập vào một số từ hay ký từ quy định mà thôi như bạn chỉ muốn ngừơi sử dụng nhập vào số mà thôi. Thật không may, không có một thuộc tính nào giúp ta làm việc này. Tuy nhiên chúng ta có cách đơn giản để thực hiện điều này bằng thủ tục sự kiện KeyPress của TextBox.

    Ví dụ, giả sử ta có textbox tên TextBox1. Đọan mã sau sẽ chỉ cho phép chúng ta nhập vào số từ 0-9, dấu "." và "-"

    Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case Asc("0") To Asc("9"), Asc("-")
    Case Asc(".")
    If InStr(1, Me.TextBox1.Text, ".") > 0 Then
    KeyAscii = 0
    End If
    Case Else
    KeyAscii = 0
    End Select
    End Sub



    Nếu muốn thêm các ký tự khác thì bạn đưa thêm vào "Select ...Case"

    Lê Văn Duyệt
     
    #1
  2. adam_tran

    adam_tran Steel Partner

    Bài viết:
    1,373
    Đã được thích:
    32
    Nơi ở:
    Goooogle
    Tuyệt vời, học VBA e học hoài không hết.
    Có cách nào để resize textbox manually khi form đang chạy?
    :dog1:
    :dog2:
    :dog3:
     
    #2
  3. the7habitsman

    the7habitsman Thành viên sơ cấp

    Bài viết:
    89
    Đã được thích:
    0
    Nơi ở:
    Hà nội
    Kìa, các bác VBA trả lời câu hỏi này đi chứ??? :)

    Không chỉ làm với textbox, end user có khi còn muôn tự layout (kéo thả, di chuyển vị trí, phóng to thu nhỏ, đặt lại thuộc tính,...) cho từng object trên 1 form bằng ....chuột trong chế độ Runtime ấy. Các bác lập trình đáp ứng đi :)

    Bài limit chars for textbox là bài vỡ lòng rồi (và có 1 cách làm advance hơn nhiều). Nhưng bài mà adam-tran đưa ra cũng vào loại hơi advance 1 tý đấy :)
     
    #3
  4. levanduyet

    levanduyet Welcome

    Bài viết:
    535
    Đã được thích:
    11
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Thực sự ra người ta chỉ thường resize khi người dùng resize cái form thôi. Còn mục đích để resize textbox cũng ít thôi.
    Để làm điều này thì "giải thuật" là dựa vào sự kiện Mouse down, mouse move, mouse up mà thực hiện.
    Thân,
    Lê Văn Duyệt
     
    #4
  5. workman

    workman Thành viên hoạt động

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Khà khà, bác chính là chuyên gia VBA!!!!, còn kêu gọi ai nữa :).

    Thôi thì kỷ niệm cái bài post thứ 100 của "nick" mới, bác làm luôn đi.
     
    #5
  6. the7habitsman

    the7habitsman Thành viên sơ cấp

    Bài viết:
    89
    Đã được thích:
    0
    Nơi ở:
    Hà nội
    Mọi người chạy thử cái này DlgDesigner

    Đây là 1 ví dụ (mã đã dịch rồi) viết = VB (vì thế để chạy được thì cần VBRuntime nhé). Hình như trong About có địa chỉ email, website của tác giả đấy. Mọi người có thể vào đó mà download srccode nhé.

    Dùng MouseMove, MouseDown, v.v...ko đủ để làm được đâu ạ. Phải biết được Mouse Position (Dùng API thôi) và nhiều thứ khác.

    Private Type POINTAPI
    X As Long
    Y As Long
    End Type

    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    ....


    Có lẽ ý của Adam_tran ko phải là ý naỳ rồi.
     
    #6
  7. vfupv

    vfupv Thành viên hoạt động

    Bài viết:
    25
    Đã được thích:
    0
    Nơi ở:
    Thái Nguyên
    Dear các cao thủ,
    Tôi thiết kế một form nhập số tiền vào một textbox nhưng không biết cách định dạng kiểu số có dấu phân cách cho textbox đó. Rất mong nhận được sự giúp đỡ của các cao thủ. (Tôi chỉ nhập được vào: 123456 ==> tôi muốn có thể nhập được 123,456 tức là có dấu (,) ngăn cách sau 3 số).
    Các bác mau giúp tôi nhanh nhé.
    Trân trọng cảm ơn!
    Phạm Văn Vinh
    vfupv@yahoo.com
     
    #7
  8. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Dùng sự kiện Key_press để ngăn chặn các ký tự ngoài các ký tự chữ số và dấu chấm (.) (hoặc dấu phẩy (,)) để tiếp nhận việc ghi nhận số.
    - Nếu muốn format theo yêu cầu ngay từ khi nhập số thì cũng dùng sự kiện key_press để thêm các dấu phân cách.
    - Nếu chỉ muốn format sau khi nhập số thì dùng sự kiện Exit. Sau khi Exit mới format lại số.

    (vài lời sàm tấu mong các bác chỉ giáo thêm)
     
    #8
  9. hai2hai

    hai2hai VNUNI Makes a difference

    Bài viết:
    2,012
    Đã được thích:
    128
    Nơi ở:
    Hà nội
    Không phải đâu, để TextBox làm được như MaskEdit control thì ... viết code hơi bị nhiều (mà nếu ko viết kỹ thì thì gõ vài cái là ... tòi cái lỗi ra ngay).

    Còn Lost Focus rồi format, Focus thì Unformat thì chả nói làm gì. Nhỉ.

    Sao ko dùng các control như MaskEdit Control đi (Tuy nhiên cái maskedit control này của VB lỗi lắm)
     
    #9
  10. vfupv

    vfupv Thành viên hoạt động

    Bài viết:
    25
    Đã được thích:
    0
    Nơi ở:
    Thái Nguyên
    Các bác có thể hướng dẫn chi tiết cách sử dụng sự kiện key_press để định dạng cho textbox ngay khi nhập số vào để được dấu phân cách không ?

    (em không thạo khoản này lắm và rất muốn học hỏi)

    Cảm ơn các bác nhé
     
    #10
  11. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Format sau mỗi lần nhập chữ số --> chạy chậm
    Format sau khi loss focus

    Tận dụng đoạn code của bác Duyệt.

    Dùng textbox_keypress không ổn lắm nên chuyển sang dùng textbox_Change
     
    #11
  12. vfupv

    vfupv Thành viên hoạt động

    Bài viết:
    25
    Đã được thích:
    0
    Nơi ở:
    Thái Nguyên
    Lại một tình hống nữa cần sự giúp đỡ của các bác cao thủ đây:
    Em thiết kế Form nhập dữ liệu, sau khi nhập xong nhấn vào nút Add để thực hiện việc nhập dữ liệu vào bảng tính excel --> xuất hiện một msgbox hoặc form thứ 2 thông báo là đã nhập thành công và hỏi có muốn nhập tiếp không (Yes/No).
    Nếu chọn Yes thì vẫn giữ nguyên form trên màn hìnhnhìn thấy dữ liệu đã được add vào bảng tính, nếu chọn No thì kết thúc công việc.
    Các bác giúp em xử lý tìn huống in đậm trên đây nhé.
     
    #12
  13. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
     
    #13
  14. vfupv

    vfupv Thành viên hoạt động

    Bài viết:
    25
    Đã được thích:
    0
    Nơi ở:
    Thái Nguyên
    Em đã làm như cách này của bác Bình rồi nhưng vấn đề đặt ra là nếu muốn nhập liên tiếp > 02 chứng từ thì sẽ không nhìn thấy các chứng từ đã được nhập vào bảng tính. Chỉ khi nào đóng form lại mới xuất hiện các các chứng từ đã được thêm vào ???
    Vậy sẽ phải xử lý như thế nào đây các bác ?
     
    #14
  15. Bình_OverAC

    Bình_OverAC Over Abnormal / Crazy

    Bài viết:
    845
    Đã được thích:
    7
    Nơi ở:
    Nha Trang
    Bác ơi. Với em thì em chỉ có thể cách tra tới từng box mà clear nó đi thôi àh.
    Xuất hiện thế nào hả bác. Nếu là hiện trong phần dử liệu thì bác cứ show dữ liệu cho người ta coi. Nếu muốn chỉ show những thứ vừa nhập thì bác lọc lại vậy.
     
    #15
  16. vfupv

    vfupv Thành viên hoạt động

    Bài viết:
    25
    Đã được thích:
    0
    Nơi ở:
    Thái Nguyên
    Em nhập dữ liệu như saU:
    .....
    Sheets("SheetDL").Select
    FormNHAPLIEU.show
    .....

    Em muốn sau khi chọn nut Add trên form NHAPLIEU thì sẽ nhìn thấy dòng chứng từ mới nhập xuất hiện trên bảng tính (form vẫn đang show trên màn hình).

    Có cách nào sau khi thực hiện lệnh End hoặc Unload Me thì dữ liệu trong textbox tự động xoá đi không các bác ?
     
    #16
  17. cartoon18

    cartoon18 Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    qingdao
    Ðề: TextBox và VBA

    Liên quan tới textbox Cho em hỏi em muốn tạo một textbox nhập ngày tháng. khi chưa nhập hiển thị sẽ là ../../.... và người nhập chỉ được nhập số, nếu không nhập đầy đủ ngày tháng năm thì sẽ thông báo bằng msgbox Em đã tìm nhiều trên mạng mà không thấy có câu trả lời :wall: , mong các Bro giúp đỡ. /thanhk
     
    Last edited: 2 Tháng tám 2013
    #17

Chia sẻ trang này