Tự động tính thành tiền khi thay đổi số lượng hoặc đơn giá trong userform VBA

Trong VBA bạn có thể tạo ra 1 mẫu biểu (form) nhập dữ liệu theo ý muốn, để từ dữ liệu trên form đó đưa vào trong Excel. Tuy nhiên trong một số mẫu form chúng ta muốn nội dung trong 1 textbox tự động thay đổi, tự động tính toán khi thay đổi giá trị trong 1 textbox khác. Cụ thể là trong trường hợp này chúng ta muốn textbox Thành tiền sẽ tự động thay đổi khi thay đổi giá trị trong các textbox Số lượng hoặc Đơn giá. Việc này làm thế nào? Hãy cùng học Excel tìm hiểu cách thiết lập tự động tính thành tiền khi thay đổi số lượng hoặc đơn giá trong userform VBA:

1. Tạo mẫu Userform

Để tạo được mẫu UserForm này, chúng ta sẽ mở cửa sổ VBA trong Excel lên (sử dụng phím tắt Alt + F11)

Trong cửa sổ VBA bạn click chuột phải vào phần Project và chọn Insert > UserForm

Trong Userform1 (là Userform vừa mới Insert ra) bạn tạo các mục như sau:

  • Tạo 3 label có tên là Số lượng / Đơn giá / Thành tiền
  • Tạo 3 Textbox tương ứng với 3 label trên
  • Tạo 2 nút bấm (command button) và đổi tên là OK và Cancel (2 nút bấm cơ bản của 1 userform)

Tiếp theo chúng ta sẽ đổi tên các textbox lần lượt là:

  • Textbox tương ứng với label Số lượng thì có tên là tbSL
  • Textbox tương ứng với label Đơn giá thì có tên là tbDG
  • Textbox tương ứng với label Thành tiền thì có tên là tbTT

Phần tạo mẫu Userform này mình chỉ hướng dẫn sơ qua vì đây chỉ là khâu chuẩn bị, còn nội dung chính của chúng ta là ở phần sau.

2. Tạo sự kiện thay đổi Textbox trong Userform

Việc nội dung trong Textbox Thành tiền (tbTT) tự động thay đổi mỗi khi chúng ta thay đổi giá trị trong Textbox Số lượng (tbSL) hoặc Textbox Đơn giá (tbDG) được diễn đạt lại theo logic sau:

  • Khi thay đổi giá trị trong tbSL thì sẽ tính lại nội dung trong tbTT. Đây chính là sự kiện tbSL_Change
  • Khi thay đổi giá trị trong tbDG thì sẽ tính lại nội dung trong tbDG. Đây chính là sự kiện tbDG_Change

Để tạo sự kiện này chúng ta sẽ bấm double click chuột vào tbSL và tbDG (tạo 2 sự kiện riêng)

Chúng ta có thể thêm 1 sự kiện là khi Userform mới được mở lên thì các textbox sẽ có nội dung là bằng 0 với sự kiện UserForm_Initialize. Đây là giá trị ban đầu của các textbox.

Kết quả như sau:

3. Viết lệnh trong sự kiện thay đổi đơn giá và số lượng

a. Thay đổi Số lượng

Việc tính toán khi thay đổi số lượng phải tuân theo 1 số nguyên tắc như sau:

  • Không tính toán được khi tbSL hoặc tbDG không có giá trị gì (ô trống)
  • Khi tbSL và tbDG đồng thời >=0 thì mới thực hiện tính toán cho tbTT = tbSL * tbDG

Nội dung này được viết thành code như sau:

b. Thay đổi Đơn giá

Việc tính toán khi thay đổi đơn giá phải tuân theo 1 số nguyên tắc như sau:

  • Không tính toán được khi tbSL hoặc tbDG không có giá trị gì (ô trống)
  • Khi tbSL và tbDG đồng thời >=0 thì mới thực hiện tính toán cho tbTT = tbSL * tbDG

Nội dung này được viết thành code như sau:

Có thể thấy câu lệnh trong 2 Private Sub này là giống nhau, chỉ khác là áp dụng trên sự kiện nào mà thôi. Bởi vì việc tính toán trong textbox Thành tiền phụ thuộc đồng thời vào 2 textbox trên nên phải viết đồng thời trong cả 2 sự kiện thay đổi textbox.

Bây giờ chúng ta có thể chạy thử Userform để kiểm tra kết quả.

Các bạn có thể tải về file mẫu tại địa chỉ: http://bit.ly/2J70Y9f

4. Nâng cao kiến thức VBA

Phần phía trên mình mới giới thiệu đến các bạn cách viết lệnh đơn giản nhất để hiểu về logic cũng như cách chuyển từ logic sang code trên VBA. Tuy nhiên để có thể hoàn thiện yêu cầu trên chúng ta còn phải tìm hiểu về:

  • Thiết lập làm sao để chỉ nhập dữ liệu dạng số trong tbSL và tbDG? Bởi nếu nhập ký tự text vào trong các textbox này thì không thể tính toán được, sẽ có lỗi.
  • Khi số liệu là số lớn (hàng nghìn, hàng triệu, hàng tỉ…) thì chúng ta muốn có thêm dấu ngăn cách các thành phần trong số đó (đặc biệt là ở textbox thành tiền), để khi nhập dữ liệu vào thì tự động hiển thị số có dấu ngăn cách hàng nghìn, hàng triệu, hàng tỉ… thì làm thế nào?
  • Làm thế nào để đưa dữ liệu từ userform vào trong worksheet?
  • Làm thế nào để đóng userform lại, hoặc mở userform ra?

Rất nhiều câu hỏi phải không nào. Để giúp các bạn nâng cao kiến thức về VBA thì Học Excel Online xin giới thiệu với các bạn khóa học VBA101 – Tự động hóa Excel với lập trình VBA dành cho người mới bắt đầu. Đây là khóa học rất hữu ích dành cho bạn. Hãy cùng khám phá nào


Tác giả: duongquan211287

· · ·

Khóa học mới xuất bản