Xin hỏi cách làm ẩn, hiện các text box

  • Thread starter nguyentronguyen
  • Ngày gửi
N

nguyentronguyen

Sơ cấp
12/5/04
19
0
0
#1
Tôi làm kế toán HCSN trên AC (không phải dân IT) xin hỏi các bạn cách giải quyết vấn đề sau:
Tôi có một form nhập liệu gồm các text box như sau: TKNO, TKCO, MAVT(Mã vật tư, sản phẩm), DVT(Đơn vị tính), SLUONG (Số lượng), DGIA (Đơn giá), TTIEN(thành tiền). Những Text box khác không liên quan không giới thiệu thêm rối.
Tôi muốn rằng: chỉ khi nào TKNO hoặc TKCO được nhập tài khoản là 152 hoặc 155 (nghiệp vụ nhập xuất) thì mới hiện các text box MAVT(Mã vật tư, sản phẩm), DVT(Đơn vị tính), SLUONG(Số lượng), DGIA(Đơn giá) còn bình thường thì nó phải ẩn đi để con trỏ khỏi nhảy vào đó khi nhập liệu nhằm tiết kiệm thời gian.

(Lưu ý: Tôi muốn nhập liệu trên 1 form chứ không muốn mở thêm một Form khác vì khi nhập liệu lại phải chuyển form qua lại rất bất tiện).

Xin trân trọng cảm ơn.
 
Sửa lần cuối:
M

mysterious_girl

Cao cấp
#2
nguyentronguyen nói:
Tôi làm kế toán HCSN trên AC (không phải dân IT) xin hỏi các bạn cách giải quyết vấn đề sau:
Tôi có một form nhập liệu gồm các text box như sau: TKNO, TKCO, MAVT(Mã vật tư, sản phẩm), DVT(Đơn vị tính), SLUONG (Số lượng), DGIA (Đơn giá), TTIEN(thành tiền). Những Text box khác không liên quan không giới thiệu thêm rối.
Tôi muốn rằng: chỉ khi nào TKNO hoặc TKCO được nhập tài khoản là 152 hoặc 155 (nghiệp vụ nhập xuất) thì mới hiện các text box MAVT(Mã vật tư, sản phẩm), DVT(Đơn vị tính), SLUONG(Số lượng), DGIA(Đơn giá) còn bình thường thì nó phải ẩn đi để con trỏ khỏi nhảy vào đó khi nhập liệu nhằm tiết kiệm thời gian.

(Lưu ý: Tôi muốn nhập liệu trên 1 form chứ không muốn mở thêm một Form khác vì khi nhập liệu lại phải chuyển form qua lại rất bất tiện).

Xin trân trọng cảm ơn.
Đầu tiên bạn cho các text box và label MAVT,DVT,SLUONG,DGIA ẩn. Bạn vào properties của từng text box chọn thẻ format-->visible-->No.

Ở sự kiện afterupdate của TKNO hoac TKCO bạn làm như sau:

Private Sub txttkno_afterupdate()
If txttkno = "152" Or txttkno = "155" Then
txtmavatu.Visible = True
lblmavatu.Visible = True
'Các textbox và label khác bạn gán tương tự nhé.
Else
txtmavatu.Visible = False
End If
End Sub
 
Sửa lần cuối:
Đào Việt Cường

Đào Việt Cường

Moderator
22/11/05
400
3
18
Khánh Hòa
#3
Dear mysterious_girl
-------------------
Trả lời của mysterious_girl theo anh chỉ vừa thôi chứ chưa đủ, anh bổ sung thêm thế này!

Dear nguyentronguyen,
----------------------
Trong VBA nói riêng và trong ngôn ngữ lập trình Windows nói chung, hầu hết các đối tượng (Objects) và điều khiển (Controls) đều có các thuộc tính cơ bản như: tên, màu sắc, chiều rộng, chiều cao, font... trong đó có 2 thuộc tính quan trọng giúp cho người lập trình điều khiển cách thức thể hiện của chúng, đó là: Enable và Visible
- Enable là thuộc tính làm vô hiệu hoá cách thức giao tiếp với người sử dụng. Nghĩa là người sử dụng có nhìn thấy điều khiển này (hơi mờ) khi thuộc tính này được thiết lập là FALSE
- Khác với Enable, thuộc tính Visible sẽ không cho người sử dụng nhìn thấy điều khiển đó trên màn hình (tàng hình) nếu được thiết lập là FALSE.
Dựa vào những đặc điểm này, bạn có thể nựa chọn cách điều khiển cho phù hợp với ứng dụng của bạn.
Trở lại yêu cầu của bạn, nếu "Ở sự kiện afterupdate của TKNO hoac TKCO bạn làm như sau" (như mysterious_girl nêu) thì chưa đủ mà phải là . Theo tôi, hai sự kiện này cùng thực hiện một công việc như nhau, vì vậy ta nên viết một thủ tục dùng chung, đơn giản và gọn hơn một chút như sau, mạn phép sửa lại:
Private Sub Me_AfterUpdate()
Dim blnVisible As Boolean
blnVisible = InStrRev("," & txbTKNO.Value & "," & txbTKCO.Value, ",15") > 0
If cmbLenh.Visible <> blnVisible Then cmbLenh.Visible = blnVisible
If OtherControl.Visible <> blnVisible Then OtherControl.Visible = blnVisible
End Sub
_________________________
Private Sub txbTKCO_AfterUpdate()
Me_AfterUpdate
End Sub
_________________________
Private Sub txbTKNO_AfterUpdate()
Me_AfterUpdate
End Sub
 
Sửa lần cuối:
HongViet

HongViet

Thành viên thân thiết
10/11/05
286
10
18
Đà nẵng
#4
Ms ACCESS Mờ - Tỏ:

Đào Việt Cường nói:
- Enable là thuộc tính làm vô hiệu hoá cách thức giao tiếp với người sử dụng. Nghĩa là người sử dụng có nhìn thấy điều khiển này (hơi mờ) khi thuộc tính này được thiết lập là FALSE :
Nếu bạn TrongNguyen Không thích 'MỜ' mà thích sáng như ban ngày thì dùng tính chất TabStop: Khi đi khỏi Control Nợ & Có nếu nó đúng í ta thì gán thuộc tính TabStop là Yes( hay No) cho các Cotrols muốn con trỏ nhãy vô nhập liệu!
Chúc vui vẽ & nhiều thành tựu!:two:
 
N

nguyentronguyen

Sơ cấp
12/5/04
19
0
0
#5
Xin trân trọng cảm ơn tất cả các bạn
Tôi đã làm theo và thành công.
Sau này tôi còn tiếp tục nhờ các bạn nữa vì tôi không biết viết code.
 
M

mysterious_girl

Cao cấp
#6
nguyentronguyen nói:
Sau này tôi còn tiếp tục nhờ các bạn nữa vì tôi không biết viết code.
Bạn ơi, ko biết thì có thể từ từ học mà. Tớ cũng ko biết nhiều.:biggrin:. Theo tớ thì bạn nên viết trước, có gì ko hiểu thì mới post lên hỏi,như vậy học được nhiều hơn là nhờ người khác viết hộ.
Chúc bạn cuối tuần vui vẻ và hạnh phúc!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
44
Hà nội
vnuni.net
#7
:)
Trong VBA nói riêng và trong ngôn ngữ lập trình Windows nói chung, hầu hết các đối tượng (Objects)điều khiển (Controls) đều có các thuộc tính cơ bản như: tên, màu sắc, chiều rộng, chiều cao, font... trong đó có 2 thuộc tính quan trọng giúp cho người lập trình điều khiển cách thức thể hiện của chúng, đó là: Enable và Visible
ActiveX Control cũng là Object đấy nhé. Object là 1 từ mang tính chất General, còn ActiveX Control chỉ là 1 loại object thôi.

Object có thuộc tính (properties) và phương thức (methods).

Ví dụ: Đối tượng Ô tô: có thuộc tính là có 4 bánh, có vô lăng, có trục quay, v.v...; có methods: Run, v.v..

:biggrin:
 
N

nguyentronguyen

Sơ cấp
12/5/04
19
0
0
#8
Cảm ơn tất cả các bạn, tôi không hiểu khúc đầu đoạn code của bạn Cường nên tôi lấy phần code của bạn Mysterious girl ghép với đoạn cuối của Bạn Cường và chế tạo thêm một số công dụng nữa (Như vậy là chạy rất tốt).
Theo ý của bạn Mysterious girl tôi in đoạn code này các bạn đừng cười nhé vì tôi không phải dân IT mà là dân kinh tế:

Private Sub Me_AfterUpdate()
If Combo104 = "152" Or Combo104 = "155" Or Combo106 = "152" Or Combo106 = "155" Or Combo106 = "511" Then
Combo38.Visible = True
Combo38_Label.Visible = True
DVT.Visible = True
Label70.Visible = True
SLUONG.Visible = True
Label44.Visible = True
DGIA.Visible = True
Label45.Visible = True

Else
Combo38.Visible = False
DVT.Visible = False
SLUONG.Visible = False
DGIA.Visible = False
End If

If Combo104 = "661" Then
MUC.Visible = True
Label47.Visible = True
TMUC.Visible = True
Label48.Visible = True

Else
MUC.Visible = False
TMUC.Visible = False
End If

If Combo106 = "111" Then
Combo42.Visible = False
Combo42_Label.Visible = False
Else
Combo42.Visible = True
Combo42_Label.Visible = True
End If

If Combo104 = "111" Then
Combo40.Visible = False
Combo40_Label.Visible = False
Else
Combo40.Visible = True
Combo40_Label.Visible = True
End If

End Sub

Private Sub Combo104_AfterUpdate()
Me_AfterUpdate
End Sub

Private Sub Combo106_AfterUpdate()
Me_AfterUpdate
End Sub

Private Sub Combo40_AfterUpdate()
If Combo40 > 0 Then
'Chỗ này tôi không biết nên viết vậy, tức là combo40 có nhập liệu
Label92.Visible = True
Label86.Visible = True
THUEKHOAN.Visible = True
Label50.Visible = True
NVLIEU.Visible = True
Label89.Visible = True
MMOC_TTBI.Visible = True
Label90.Visible = True
XDUNG_SCHUA.Visible = True
Label91.Visible = True
CHIKHAC.Visible = True

Else
Label92.Visible = False
Label86.Visible = False
THUEKHOAN.Visible = False
Label50.Visible = False
NVLIEU.Visible = False
Label89.Visible = False
MMOC_TTBI.Visible = False
Label90.Visible = False
XDUNG_SCHUA.Visible = False
Label91.Visible = False
CHIKHAC.Visible = False

End If

End Sub

Vấn đề này tôi dốt lắm các bạn đừng cười nhé.
Đoạn code trên nói rằng nếu TKNO hoặc TKCO thực hiện việc nhập xuất, hay thu sự nghiệp (vì cơ quan tôi hay thu sự nghiệp bằng sản phẩm có liên quan đến vật tư, hàng hóa) thì mới hiện các text box: mã vật tư, đơn vị tính, số lượng, đơn gía.
Nếu chi hoạt động bộ máy (661) thì phải hiện text box: mục lục ngân sách Nhà nước bình thường thì ẩn.
Nếu thu tiền mặt (111) thì không có text box mã đối tượng nợ
Nếu chi tiền mặt (111) thì không có text box mã đối tượng có.
Nếu chi dự án hay đề tài thì hiện các text box (các text box chi tiết): Thuê khoán, nguyên vật liệu, máy móc thiết bị, ... còn bình thường thì ẩn trốn.

Tôi làm kế toán HCSN trên AC tự chế tạo chỉ nhập số liệu trên 1 table chính (khoảng mười mấy cột) và 3 table phụ là Tài khoản, Mã đối tượng và mục lục Ngân sách NN, có thế thôi mà cũng rối lắm, cứ lâu lâu nghĩ ra cái gì thì hoàn thiện thêm cái đó theo yêu cầu của những nhà khoa học hay của ngành dọc.
Có một phần ở cái form nhập liệu mà rắc rối quá.
 
Sửa lần cuối:
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,012
125
63
44
Hà nội
vnuni.net
#9
Chắc chắn ko ai dám cười ai cả đâu. Bạn yên tâm.

If Combo104 = "152" Or Combo104 = "155" Or Combo106 = "152" Or Combo106 = "155" Or Combo106 = "511" Then
Tớ xin gợi ý với bạn 1 chút:
- Nếu bạn dùng tên của cái combo104 một cách tượng minh hơn, giả sử như cboTaiKhoan thì code của bạn sẽ sáng sủa và dễ hiểu hơn rất nhiều.
Tương tự như vậy: Labelxx, SLUONG, DGIA, v.v... --> lblSoLuong, txtSoLuong, txtDonGia, v.v...
- Trong cái lệnh If nói, các hằng số kiểu như 152, 155,... nên quản lý theo phương pháp khác thì hay hơn. Giả sử có sự thay đổi nghiệp vụ và nó ảnh hưởng đến số Tài khoản thì bạn phải sửa phần mềm đấy.
Vả lại, trong coding, cố gắng hạn chế viết trực tiếp các hằng số trong code mà nên "hằng số hóa" nó ra, ví dụ: cstTKVATTU = 152, v.v... thì khi bạn sửa bạn chỉ sửa ở mục khai báo hằng số thôi, code lúc đó cũng nhìn đẹp và dễ hiểu hơn rất nhiều.
- Nên thay cái lệnh If = Select Case
Ví dụ:
strMATK = IIf(cboTaiKhoan.ListIndex <> - 1, cboTaiKhoan.List(cboTaiKhoan.ListIndex), vbNullString)
Select Case strMATK
Case cst..., cst...
'//...
Case cst..., cst...
'//...
Case else
'//...
End Select

Regards,
 
Sửa lần cuối:
N

nguyentronguyen

Sơ cấp
12/5/04
19
0
0
#10
Cảm ơn bạn Hai2hai, những vấn đề trên tớ chỉ hiểu một phần thôi ví dụ như đặt tên cho các text box, combo thì được chứ những vấn đề về khai báo biến, hay khó hơn thì chịu chết. Mình chỉ nhờ AC làm giúp những gì có trong nó thôi (những cái có sẵn), cao hơn là bảo nó cộng trừ nhân chia đơn giản thôi chứ phứng tạp như viết code thì thua. Có mấy cái function VND, Dloopkup hay cai macro axec gì đó cũng phải đi xin trên diễn đàn đấy. Tuy nhiên lâu lâu đọc sách, lên mạng lại thấy mở mang đầu óc ra một tí rồi lại vọc một tí.
Một lần nữa xin cảm ơn bạn.
 

Thành viên trực tuyến

Không có thành viên trực tuyến.



Xem nhiều