Xác định Control đã gọi mở Form chọn mã.

  • Thread starter Thread starter sealand
  • Ngày gửi Ngày gửi
Liên hệ QC

sealand

Thành viên gạo cội
Tham gia
16/5/08
Bài viết
4,883
Được thích
7,688
Giới tính
Nam
Nghề nghiệp
Kế Toán
Bảng chọn mã của anh Lê Văn Duyệt áp dụng cho các tệp Excel đòi hỏi nhập nhiều mã khác nhau rất hay. Điều rất tiện là chỉ cần 1 Form cho tất cả các trang và các loại bảng mã. Khi trả về chỉ cần dùng lệnh:

ActiveCell=bgiatrichon

Nhưng trường hợp với nhiều form khác nhau thì bằng phương pháp nào để xác định điều khiển nào, thuộc Form nào đã gọi mở bảng chọn và trả về giá trị chọn cho nó như thế nào. Mong các bạn chỉ giúp.
 
Lần chỉnh sửa cuối:
Các bạn xem và giúp tôi với, suốt ngày qua và đêm qua không gq được.
 
Upvote 0
Bảng chọn mã của anh Lê Văn Duyệt áp dụng cho các tệp Excel đòi hỏi nhập nhiều mã khác nhau rất hay. Điều rất tiện là chỉ cần 1 Form cho tất cả các trang và các loại bảng mã. Khi trả về chỉ cần dùng lệnh:

ActiveCell=bgiatrichon

Nhưng trường hợp với nhiều form khác nhau thì bằng phương pháp nào để xác định điều khiển nào, thuộc Form nào đã gọi mở bảng chọn và trả về giá trị chọn cho nó như thế nào. Mong các bạn chỉ giúp.

Thực sự em chưa hình dung được bảng chọn mã mà bác đang nói tới là bảng nào? Bác không đưa file đính kèm thì không ai hình dung ra sự việc để giúp cả!
 
Upvote 0
Mình gửi File chưa hoàn thiện bạn kiểm tra giùm.Pass là tên người dùng. Bạn chọn phiếu chi và di chuyển Focus qua ô Ma DT (Neu trống bảng mã hiện ra cho bạn chọn)
 

File đính kèm

Upvote 0
Hình như file này có sử dụng ActiveX bên ngoài tên là Microsoft Hierachical FlexGrid Control 6.0. Em không có control này nên không làm ăn gì được cả +-+-+-+
 
Upvote 0
Mình xóa thử 1 số Object của VB6 nhưng bị lỗi loạn nên chưa load được File lên, mình xin mô tả như sau nhé:
1-Tạo 1 Form frm_chonma chọn mã như hướng dẫn của anh Duyệt, có thể load các loại bảng mã khác nhau: MaTK, MaKH, MaVT....và nó dùng chung cho tất cả các ô cần nhập mã của 3 Form :
-Chứng từ bằng tiền (P.thu, P.chi, B.nợ, B.Có...)
-Phiếu xuất nhập kho và bán hàng
-Chứng từ tổng hợp và công nợ
(Nói tóm lại lập 1 form chọn mã dùng chung cho tất cả các Form nhập dữ liệu)

2-Trên Form Frm_thuchi có ô Ma_KH: Khi ô này update nếu ="" hay mã nhập không có trong danh mục sẽ gọi mở frm_chonma và load DMKH để chọn.

3-Khi chọn rồi trả về Ma_KH đã chọn cho ô Ma_KH trên frm_thuchi như thế nào? Trong dự án của anh Duyệt dễ hơn với câu lệnh ActveCell= là ta gán mã được rồi. Trường hợp của mình không gán trực tiếp frm_thuchi.Ma_KH= giá trị chọn cố định được vì nó còn có thể trả về mã chọn cho nhiều ô khác nữa.
Mình đã thử 2 cách là:

+ Dùng 2 ô ẩn trên Forn frm_chonma để lưu tên Form và tên ĐK đã gọi bảng chọn.
+ Khai 2 biến Global là luu_frmluu_ctrl để lưu tên Form và tên ĐK đã gọi bảng chọn.

Khi chọn mã ví dụ "HANOI" mình không biết gán giá trị cho cái ô có tên = luu_ctrl trên Form có tên = luu_frm như thế nào ?
Bạn xem giúp mình với nhé. Cám ơn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn sealan thân:
Theo mình bạn nên dùng các combobox(CB) để nhập liệu. Nghĩa là trong 1 form(Fr) cụ thể nào đó, ví dụ thu chi. thì bạn cần có nhập mã khách hàng, thì bạn cần 1 CB là Ma_kh và 1 label là Ten_kh (label này chỉ để hiển thị tên khách). Như vậy khi ta load Fr thu_chi thì có:
- 1 CB ma_kh và 1 Label: Ten_kh.
- Khi CB được active thì nó liên kết với 1 bảng khách hang gồm (maKh, Ten_kh, Dia_chi, .....).
- CB có thể cho hiển thị 2 hay 3 cột tùy thích. Giá trị của CB là giá trị ma_kh mình chọn trên bảng khách hàng. từ đó bạn gán vào cho cell nào trên Sh của mình là do mình định.
- Tên khách hàng hiển thị theo cùng với mã khách khi mình di chuyển con trỏ trên CB đẻ mình biết khách hàng gì chứ không cần đưa vào sheet DL, khi đưa ra report (in hay xem thì ta mới lấy nó ra không khó).

* Yêu cầu là bảng danh sách KH hay TK (tài khoản ...) là bạn đã có sẵn.
* Bảng chi tiết (Sh lưu ctừ thu chi) không cần phải có tên KH, hay tên TK mà ta lưu bằng ma_kh/ ma_tk,...)
* Khi cần báo cáo (xem, in....) ta liên kết để lấy ra tên khách hay tên tài khoản.
** Fr của LVD như bạn nói tôi nghĩ nó sử dụng cho vệc tìm kiếm là hay nhất. (gõ 1 từ thì Listview hiển thị lên 1 loạt các tên có từ đó để mình chọn). Tôi đoán vậy vì tôi chưa xem Fr do LVD viết. Nêus bạn muốn nhận giá trị từ Fr của LVD thì như trước đây (trên VB) tôi làm thường dùng 1 biến Public(ví dụ MA) khi chọn xong ta gán giá trị chọn cho biến đó. Chẳng hạn, trước đó bạn đang ở trên Fr Thu_chi tại Texbox ma_kh và kích hoạt Fr đẻ chọn mã thì sau khi chọn bạn gán gtrị của biến public cho Texbox (Ma_kh =Ma) là được.
Không hiểu có đúng ý bạn không.
Chúc bạn thành công.
Thân
 
Upvote 0
Chào manhhung12, rất mừng là bạn không nản với Excel và bọn mình còn có dịp trao đổi với nhau.
Mình đã đã làm theo hướng đó nhưng không biết gán cho nó thế nào? Mình đã khai 2 biến Global (khai bằng lệnh Public ở đầu Module) . Theo bạn có phải gán như sau không:
Textbox(luu_ctrl)=MaKH
(MaKH là mã đã chọn, luu_ctrl là biến Global lưu tên của textbox gọi mở form chọn mã có tên là ma_dt)
và nó tương đương:
Textbox("ma_dt")=MaKH hay ma_dt=MaKH
Có phải như vậy không bạn.
 
Upvote 0
Ở đay phải tach rõ ra như sau:
1/ Dữ liệu: bảng khách hàng: DM_KH (Ma_kh, Ten_kh) . Ở đay bảng có 2 cột
2/Form (Fr):
a/Fr nhap phiếu thu chi: Fr_TC gồm có các Textbox (Tb) là Tb_MaKH, Tb_tenKH và gì đó nữa tùy ý bạn thiết kế.
b/Fr tìm kiếm mã và chọn mã khách Fr_TimMa gồm có các Textbox hoặc combobox (cb_ma, tb_ten): (cái này mình không rõ LVD làm như thế nào nhưng mình hình dung là khi Fr này được load thì có những combobox là những DS xổ xuống để mình tìm và chọn. Vì vậy sẽ có 1 combobox để ta chọn danh sách tìm kiếm (các bảng: DS_khách/Ds_taikhoan/Ds_...). Sau khi ta chọn DS tìm kiếm thì ứng với nó sẽ có 1 combobox xổ xuống gồm mã khách, tên KH hay mã tài khoản, tên TK tương ứng đẻ ta chọn.
Như vậy khi bạn đang ở trong Fr_TC tại Tb_maKH giả sử bạn dùng sự kiện keydown cùng với vệc kg gõ 1 ký tụ nào trên Tb_maKH cả thì chương trình sẽ gọi Fr_Timma.
Trên Fr_timMa giả sử bạn đã chọn được 1 Mã khách tưong ứng với tên khách nào đó. giá trị nó sẽ được gán vào biến (public ma_chon và ten_chon): Ma_chon.value=cb_ma.value và Ten_chon.value=tb_ten
Quay về Fr_TC, lúc nãy bạn đang ở Tb_maKH nên bạn thực hiện phép gán:
Fr_TC.Tb_maKH.value=Ma_chon, .... tương ứng cho tên khách.
Nhưng như tôi nói thì làm cách này kg hay mà Trên Fr_TC bạn dùng các Combobox (ma_kh và liên kết với 1 ds_khách) đẻ chọn trực tiếp trên fr_TC mà kg phải load thêm 1 Fr_Timma nữa. Nếu trên fr_TC còn có phải chọn mã TK thì ta tạo thêm Combobox cb_maTK và liên kết Cb này với DS các tài khoản mà chọn. Linh hoạt và kg dùng nhiều thao tác.
Thân. Chúc thành công.
 
Upvote 0
To Sealan: Bạn xem Frchcong trong bài của tớ. Tớ đã dùng combobox để chọn 1 nhân viên trong danh sách nhân viên (để trong 1 sheet). Tớ viết chưa xong. Ý tưởng của tớ là:
Khi đã chọn 1 nhân viên rồi, tớ lấy mã nhân viên này kết hợp với tháng làm việc làm tên Sheet. Kiểm tra nếu đã tồn tai Sheet này rồi thì select sheet này. nếu chưa thì tạo sheet có tên là: manv & tháng.
Thân. Chúc vui
 

File đính kèm

Upvote 0
Nhưng trường hợp với nhiều form khác nhau thì bằng phương pháp nào để xác định điều khiển nào, thuộc Form nào đã gọi mở bảng chọn và trả về giá trị chọn cho nó như thế nào. Mong các bạn chỉ giúp.
........ Mình đã khai 2 biến Global (khai bằng lệnh Public ở đầu Module) . Theo bạn có phải gán như sau không:
Textbox(luu_ctrl)=MaKH
(MaKH là mã đã chọn, luu_ctrl là biến Global lưu tên của textbox gọi mở form chọn mã có tên là ma_dt)
và nó tương đương:
Textbox("ma_dt")=MaKH hay ma_dt=MaKH
Có phải như vậy không bạn.

Chào bác,
Giả sử ta khai báo một biến toàn cục dạng Object như sau:
PHP:
Public UF2_Text As Object
Giả sử ta có ba Form: UserForm1, UserForm2UserForm3. Mặc định UserForm2 chứa 1 danh sách.
UserForm1 UserForm3 có nút chọn để hiện ra UserForm2 cho User tìm kiếm dữ liệu. Chọn xong dữ liệu ấn OK thì sẽ điền tự động vào một textbox trên UserForm2 hoặc UserForm3.

Xử lý sự kiện khi click nút gọi UserForm2 ra như sau:
Tại Form UserForm1
PHP:
Private Sub CommandButton1_Click()
Set UF2_Text = UserForm1.TextBox1 ''<=== gán Object nguồn lên biến toàn cục
UserForm2.Show
End Sub

Tại Form UserForm3
PHP:
Private Sub CommandButton1_Click()
Set UF2_Text = UserForm3.TextBox1  <=== gán Object nguồn lên biến toàn cục
UserForm2.Show
End Sub

Sau đó, xử lý sự kiện chọn dữ liệu xong ở Form UserForm2 xong, gán dữ liệu vào Form nguồn, như sau:
Tại Form UserForm2
PHP:
Private Sub CommandButton1_Click()
UF2_Text.Value = Me.ListBox1.Value  <=== gán Giá trị cho Object nguồn (đã khai báo và nhớ trên biến toàn cục)
Set UF2_Text = Nothing    ''<==== Xong rồi thì giải phóng biến khỏi bộ nhớ
Unload Me
End Sub

Bác nghiên cứu thêm file đính kèm nhé, rất đơn giản!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình nhận được trả lời của bạn chưa kịp thử, nhưng đang bí mừng quá, cám ơn Ca_dafi nhé.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom