Phục hồi userform từ file frm và code

Liên hệ QC

duytmd

Thành viên chính thức
Tham gia
28/7/10
Bài viết
81
Được thích
2
Do chưa biết nhiều về VBA nên gặp khó khăn khi muốn tạo userform từ file frm và code có sẵn, nên em nhờ các anh chị trên diễn đàn khối phục giúp em 1 userform.
code nằm trong file mẫu excel, code userform nằm trong file formdongia và các code có liên quan.
Public DbConDG As ADODB.Connection

Public Sub ChenMaDonGia(MDG As String, Rn As Long)
Dim Rs As ADODB.Recordset
If DbConDG Is Nothing Then
Set DbConDG = CreateObject("ADODB.Connection")
DbConDG.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\DonGia1728.mdb"
End If
Set Rs = CreateObject("ADODB.RecordSet")
Rs.Open "SELECT MADG, MAVUA, MADM, TENCV, DONVI, '' , DGVL, DGNC, DGMAY FROM [DonGia] Where Ucase(MADG) = '" & UCase(MDG) & "'", DbConDG, adOpenKeyset, adLockPessimistic
Cells(Rn, 1).CopyFromRecordset Rs
Rs.Close
Set Rs = Nothing
End Sub
Public Sub ShowDonGia()
FormDonGia.Show
End Sub
Em xin cám ơn.
 

File đính kèm

  • Mau.xls
    40.5 KB · Đọc: 11
  • FormDonGia.rar
    2.7 KB · Đọc: 8
  • DonGia1728.rar
    256.6 KB · Đọc: 7
Lần chỉnh sửa cuối:
Do file frm đưa lên không được
Lý do sao không đưa lên được? Sao mình không nói là không đưa lên được?
Nhiều cách vô số kể luôn nhé.
- Úp file đó lên "đám mây" nào đó rồi gửi link qua đây. Ví dụ: Google Drive, Dropbox, Mediafire, Fshare, OneDrive....
- Đóng gói file đó thành dạng file nén (như bài #4 đó).
 
Upvote 0
Lý do sao không đưa lên được? Sao mình không nói là không đưa lên được?
Nhiều cách vô số kể luôn nhé.
- Úp file đó lên "đám mây" nào đó rồi gửi link qua đây. Ví dụ: Google Drive, Dropbox, Mediafire, Fshare, OneDrive....
- Đóng gói file đó thành dạng file nén (như bài #4 đó).
Đấy bạn.
 

File đính kèm

  • FormDonGia.rar
    2.7 KB · Đọc: 5
Upvote 0
File .frx có các thông tin các đối tượng trên userform mà không có thì bó tay rồi.
MÌnh cũng dựa vào file frm và một số code đã tạo lại userform trên, nhưng còn 1 số lỗi và chưa đầy đủ. Bạn có thể xem form trong file đính kèm
 

File đính kèm

  • Mau.xls
    90.5 KB · Đọc: 2
Upvote 0
Có anh chị nào đi ngang giúp e 1 tay với.
 
Upvote 0
Nếu có giúp thì người ta cũng chỉ giúp những cái bạn chưa biết làm chứ không ai làm hộ cái mà bạn tự làm được.
1. code trong bài #1 ở đâu? Tôi không thấy nó trong tập tin Mau.xls. Nếu nó ở 1 Module nào đó thì tự thêm Module rồi sao chép code vào đó. Cái này bạn tự làm được mà sao không làm?

2. Tôi đã hướng dẫn rất kỹ trong chủ đề khác là phải tự thêm UserForm (nhìn thấy FormDonGia.Show thì sau khi thêm UserForm phải đổi tên từ UserForm1 sang FormDonGia) rồi sao chép code có trong tập tin FRM vào FormDonGia. Tôi cũng nói rõ chỉ sao chép từ dòng nào. Bây giờ tôi không thấy Form nào trong tập tin Mau.xls. Cái này tôi đã hướng dẫn và chắc chắn bạn làm được, vậy sao không làm?

3. Sau khi có code trong FormDonGia rồi thì dò thôi. Vd. trong code có:
- CmdFirst_Click,
Tạm đoán là trên Form có CommandButton có tên là CmdFirst. Vậy thì thả 1 CommandButton xuống Form rồi đổi tên thành CmdFirst. Thế thôi. Tương tự với các Cmd***_Click khác.

- LstDMCV_***
Tạm đoán là trên Form có ListBox có tên là LstDMCV. Là tương tự như trên thôi.

- TxtDVT_Change
Tạm đoán là trên Form có TextBox có tên là TxtDVT. Làm tương tự

- TxtIndex_***
Tạm đoán là trên Form có TextBox có tên là TxtIndex. Làm tương tự

- TxtMaDM_Change
Tạm đoán là trên Form có TextBox có tên là TxtMaDM. Làm tương tự

- TxtMay_***
Tạm đoán là trên Form có TextBox có tên là TxtMay. Làm tương tự

- TxtMDG_Change
Tạm đoán là trên Form có TextBox có tên là TxtMDG. Làm tương tự
...
Tương tự khi thấy TxtNC_***,TxtTenCV_Change, TxtVL_***

Nếu bây giờ chạy code mà thấy lỗi thì xem đó là lỗi gì. Vd. chỗ lỗi đó có tham chiếu tới 1 control nào đó mà chưa có trên Form. Thì đặt control đó trên Form thôi.

Đây mới chỉ là thả những control cần có vào Form. Cứ hãy thế, còn chuyện sắp xếp cho lôgíc, chuẩn, đẹp thì làm sau.

4. Từ tập tin FRM cũng chỉ biết cần có những control nào, còn chuyện "người ta" đã thay đổi các thuộc tính của chúng trong design time như thế nào thì chịu. Đôi khi có thể "đoán" được. Vd. trong code có đoạn truy cập tới cột 5 (cột có chỉ số 4) trong ListBox thì ListBox đó phải có ít nhất 5 cột - ColumnCount = 5

Nói chung nếu tải tập tin của ai đó vd. từ mạng về mà đã làm mất hoặc không tải về tập tin FRX thì bây giờ rất mất công. Nhưng muốn người khác tìm lỗi thì trước hết phải làm những cái tôi hướng dẫn. Không ai làm hộ những cái mà bạn tự làm được.
 
Upvote 0
Nếu có giúp thì người ta cũng chỉ giúp những cái bạn chưa biết làm chứ không ai làm hộ cái mà bạn tự làm được.
1. code trong bài #1 ở đâu? Tôi không thấy nó trong tập tin Mau.xls. Nếu nó ở 1 Module nào đó thì tự thêm Module rồi sao chép code vào đó. Cái này bạn tự làm được mà sao không làm?

2. Tôi đã hướng dẫn rất kỹ trong chủ đề khác là phải tự thêm UserForm (nhìn thấy FormDonGia.Show thì sau khi thêm UserForm phải đổi tên từ UserForm1 sang FormDonGia) rồi sao chép code có trong tập tin FRM vào FormDonGia. Tôi cũng nói rõ chỉ sao chép từ dòng nào. Bây giờ tôi không thấy Form nào trong tập tin Mau.xls. Cái này tôi đã hướng dẫn và chắc chắn bạn làm được, vậy sao không làm?

3. Sau khi có code trong FormDonGia rồi thì dò thôi. Vd. trong code có:
- CmdFirst_Click,
Tạm đoán là trên Form có CommandButton có tên là CmdFirst. Vậy thì thả 1 CommandButton xuống Form rồi đổi tên thành CmdFirst. Thế thôi. Tương tự với các Cmd***_Click khác.

- LstDMCV_***
Tạm đoán là trên Form có ListBox có tên là LstDMCV. Là tương tự như trên thôi.

- TxtDVT_Change
Tạm đoán là trên Form có TextBox có tên là TxtDVT. Làm tương tự

- TxtIndex_***
Tạm đoán là trên Form có TextBox có tên là TxtIndex. Làm tương tự

- TxtMaDM_Change
Tạm đoán là trên Form có TextBox có tên là TxtMaDM. Làm tương tự

- TxtMay_***
Tạm đoán là trên Form có TextBox có tên là TxtMay. Làm tương tự

- TxtMDG_Change
Tạm đoán là trên Form có TextBox có tên là TxtMDG. Làm tương tự
...
Tương tự khi thấy TxtNC_***,TxtTenCV_Change, TxtVL_***

Nếu bây giờ chạy code mà thấy lỗi thì xem đó là lỗi gì. Vd. chỗ lỗi đó có tham chiếu tới 1 control nào đó mà chưa có trên Form. Thì đặt control đó trên Form thôi.

Đây mới chỉ là thả những control cần có vào Form. Cứ hãy thế, còn chuyện sắp xếp cho lôgíc, chuẩn, đẹp thì làm sau.

4. Từ tập tin FRM cũng chỉ biết cần có những control nào, còn chuyện "người ta" đã thay đổi các thuộc tính của chúng trong design time như thế nào thì chịu. Đôi khi có thể "đoán" được. Vd. trong code có đoạn truy cập tới cột 5 (cột có chỉ số 4) trong ListBox thì ListBox đó phải có ít nhất 5 cột - ColumnCount = 5

Nói chung nếu tải tập tin của ai đó vd. từ mạng về mà đã làm mất hoặc không tải về tập tin FRX thì bây giờ rất mất công. Nhưng muốn người khác tìm lỗi thì trước hết phải làm những cái tôi hướng dẫn. Không ai làm hộ những cái mà bạn tự làm được.
Theo như bạn nói ở chủ đề khác thì mình đã làm được 1 phần rồi nhưng còn lỗi ở txtindex, txt DVT và listDMCV ( lỗi ở dòng này "LblTongSo.Caption = "Trong tôÒng sôì: " & .ListCount & " muòc") nhờ bạn xem giúp. Xem them code nằm trong file formDonGia
 

File đính kèm

  • Mau.xls
    104 KB · Đọc: 4
  • FormDonGia.rar
    2.7 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
1. Xóa hết code trong sheet ̃7 (PTVT)

2.
Cái này tôi cũng đã viết rồi
Nếu bây giờ chạy code mà thấy lỗi thì xem đó là lỗi gì. Vd. chỗ lỗi đó có tham chiếu tới 1 control nào đó mà chưa có trên Form. Thì đặt control đó trên Form thôi.
Đọc kỹ và làm theo thôi.

Mã:
LblTongSo.Caption = "Trong tôŇng sôě: " & .ListCount & " muňc"
cho thấy phải có Label với tên là LblTongSo. Đã có chưa? Nếu đã thả xuống Form thì phải đổi tên từ Label*** thành LblTongSo

3. Tốt nhất nên chỉ ra cụ thể nơi bị lỗi. Thậm chí liệt kê từ đầu đến cuối các thao tác để có lỗi: sau khi hiện Form thì nhập cái này, cái kia tại đây và tại kia ... thì xuất hiện lỗi ở chỗ này... Không phải ai cũng muốn test vài lần để nhìn thấy lỗi. Có những lỗi không phải lúc nào cũng xuất hiện mà tùy vào giá trị cụ thể. Không phải ai cũng muốn phân tích tỉ mỉ từng dòng code để phát hiện ra sự không bình thường.
 
Upvote 0
1. Xóa hết code trong sheet ̃7 (PTVT)

2.
Cái này tôi cũng đã viết rồi

Đọc kỹ và làm theo thôi.

Mã:
LblTongSo.Caption = "Trong tôŇng sôě: " & .ListCount & " muňc"
cho thấy phải có Label với tên là LblTongSo. Đã có chưa? Nếu đã thả xuống Form thì phải đổi tên từ Label*** thành LblTongSo

3. Tốt nhất nên chỉ ra cụ thể nơi bị lỗi. Thậm chí liệt kê từ đầu đến cuối các thao tác để có lỗi: sau khi hiện Form thì nhập cái này, cái kia tại đây và tại kia ... thì xuất hiện lỗi ở chỗ này... Không phải ai cũng muốn test vài lần để nhìn thấy lỗi. Có những lỗi không phải lúc nào cũng xuất hiện mà tùy vào giá trị cụ thể. Không phải ai cũng muốn phân tích tỉ mỉ từng dòng code để phát hiện ra sự không bình thường.
Mình đã thêm các txtVL, TxtMay.... nói chung là userform hoạt động được nhưng xuất hiện lỗi ở "cmdThem" không thêm được công việc mới vào trong listbox.
Nếu thêm sub này vào userform bị lỗi
Private Sub CheckCmdThem()
If TxtMDG.Text <> "" And TxtTenCV.Text <> "" And TxtDVT.Text <> "" _
And TxtMaDM.Text <> "" And (TxtVL.Text <> "" Or TxtNC.Text <> "" Or TxtMay.Text <> "") Then
CmdThem.Enabled = True
Else
CmdThem.Enabled = False
End If
End Sub
Nhờ bạn xem giúp mình với nhé.
 

File đính kèm

  • Mauhien.xls
    117.5 KB · Đọc: 4
Lần chỉnh sửa cuối:
Upvote 0
Hãy thay

Private Sub UserForm_Activate()

bằng

Private Sub UserForm_Initialize()

Lại test tiếp nhé. Chú ý là trong cùng thư mục với tập tin Excel phải có tập tin DonGia1728.mdb
 
Upvote 0
Web KT
Back
Top Bottom