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:
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
Đã đổi Sub UserForm_Activate()--> Private Sub UserForm_Initialize() vẫn bị lỗi như ở dưới
compile error
ambiguous name detected
 
Upvote 0
Do sơ suất tôi viết thiếu, lẽ ra bạn phải hiểu
Toàn bộ cái dòng đó phải là

Private Sub UserForm_Initialize()

Nếu khác là không được.
 
Upvote 0
Do sơ suất tôi viết thiếu, lẽ ra bạn phải hiểu
Toàn bộ cái dòng đó phải là

Private Sub UserForm_Initialize()

Nếu khác là không được.
hihi, do mình viết tắt, đổi từ private Sub UserForm_Activate()--> Private Sub UserForm_Initialize() mà vẫn lỗi.
 
Lần chỉnh sửa cuối:
Upvote 0
Bây giờ tôi mới để ý là khi tôi bắt đầu viết trả lời bài #19 trong notepad thì bài #19 có nội dung khác và tập tin đính kèm là Mau2.xls, còn khi tôi dán vào GPE và gửi đi thì bạn đã sửa và bài #19 có nội dung hoàn toàn khác cùng với tập tin đính kèm có code khác.

1. Xóa toàn bộ code trong Sheet5 (DTCT)
2. code trong điểm 1 là thừa vì đã có trong Thisworkbook, tức đúng chỗ, nhưng cũng là sai chỗ vì mọi code Workbook_*** phải nằm trong Thisworkbook chứ không nằm trong các module của các sheet.
3. Nếu đã lấy tập tin nào đó làm điểm xuất phát thì mọi sửa đổi, thêm, xóa code tôi sẽ nói. Bạn không được phép tự thêm, xóa, sửa đổi. Nếu bạn còn tự ý thì tôi sẽ chấm dứt.

4. Tôi nhắc lại lần 2. Sẽ không có lần 3
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.

Nếu còn nói chung chung thì tôi sẽ chấm dứt.
nhưng xuất hiện lỗi ở "cmdThem" không thêm được công việc mới vào trong listbox.
Tức sau khi hiện Form thì phải nhập những gì, cụ thể những giá trị như thế nào, vào những đâu, đánh dấu cái gì, nhấn cái gì, ở đâu v...v để có may mắn chiêm ngưỡng lỗi? Tôi đã nói là sẽ không test, không dò code nên phải viết cụ thể các thao tác để tôi cứ thế mà làm theo. Nếu còn nói chung chung thì tôi sẽ chấm dứt.

Tôi gửi lại tập tin để lấy nó là điểm xuất phát.
 

File đính kèm

  • Mauhien.xls
    90 KB · Đọc: 10
Upvote 0
Bây giờ tôi mới để ý là khi tôi bắt đầu viết trả lời bài #19 trong notepad thì bài #19 có nội dung khác và tập tin đính kèm là Mau2.xls, còn khi tôi dán vào GPE và gửi đi thì bạn đã sửa và bài #19 có nội dung hoàn toàn khác cùng với tập tin đính kèm có code khác.

1. Xóa toàn bộ code trong Sheet5 (DTCT)
2. code trong điểm 1 là thừa vì đã có trong Thisworkbook, tức đúng chỗ, nhưng cũng là sai chỗ vì mọi code Workbook_*** phải nằm trong Thisworkbook chứ không nằm trong các module của các sheet.
3. Nếu đã lấy tập tin nào đó làm điểm xuất phát thì mọi sửa đổi, thêm, xóa code tôi sẽ nói. Bạn không được phép tự thêm, xóa, sửa đổi. Nếu bạn còn tự ý thì tôi sẽ chấm dứt.

4. Tôi nhắc lại lần 2. Sẽ không có lần 3


Nếu còn nói chung chung thì tôi sẽ chấm dứt.

Tức sau khi hiện Form thì phải nhập những gì, cụ thể những giá trị như thế nào, vào những đâu, đánh dấu cái gì, nhấn cái gì, ở đâu v...v để có may mắn chiêm ngưỡng lỗi? Tôi đã nói là sẽ không test, không dò code nên phải viết cụ thể các thao tác để tôi cứ thế mà làm theo. Nếu còn nói chung chung thì tôi sẽ chấm dứt.

Tôi gửi lại tập tin để lấy nó là điểm xuất phát.
Do mình sửa lui sửa tới nhiều lần quá. Mình sẽ rút kinh nghiệm.
- Sau khi hiện form, click vào listbox và chọn 1 công việc bất kỳ VD: mình chọn công việc có mà đơn giá AF11111 có tền công việc (bê tông .......M100) rồi chọn cmdxoa: xóa đi 1 hàng được chọn trong listbox , cmdsua: sửa nội dung tên công việc của 1 hàng nào đó trong listbox thì tự save vào listox tại hàng chỉnh sửa , cmdchọn: copy hàng được chọn vào excel "mauhien" bắt đầu từ cột A, thoát đều bình thường riêng cmdthem mờ đi.(lúc này chắc cmdthem không cho hoạt động)
- Còn nếu khi hiện form hiện lên mình gõ vào txtboxMĐG, (ví dụ V00001) cái này không trùng với các mã đã có, txtboxMĐM (trùng hoặc không trùng với txtboxMĐG) cũng được, txtboxtenCV (gõ tên công việc bất kỳ)
thì nút cmd Them bị mờ đi không cho click để thêm công việc mới vào trong listbox
- Trong form hiện tại chưa có code của
Private Sub LstDMCV_Enter()
If LstDMCV.ListIndex < 0 Then
LstDMCV.ListIndex = 0
LstDMCV.Selected(0) = True
End If
End Sub
Nếu thêm vào thì khi click đúp tại cột A thì sẽ hiện thông báo runtime error 380 (could not set the ListIndex property. Invalid property value). Debug thì báo lỗi tại dòng màu đỏ ở code trên.
 
Lần chỉnh sửa cuối:
Upvote 0
Code nhiều chỗ dùng TabIndex của các controls mà bạn đã bị mất FRX nên không biết họ thiết lập thứ tự TabIndex như thế nào.
Tôi tạm đoán là TabIndex theo thứ tự các trường trong csdl. Tôi đã thiết lập các TabIndex và thêm code cho Private Sub LstDMCV_Enter(). Bạn tải về tập tin mới và test xem.

TabIndex cho 7 TextBox trừ TxtMaVua: 0, 1, 3-7.
Hiện tôi chưa dò xem họ thiết lập TabIndex = 2 cho control nào.
 

File đính kèm

  • Mauhien.xls
    101 KB · Đọc: 5
Upvote 0
Code nhiều chỗ dùng TabIndex của các controls mà bạn đã bị mất FRX nên không biết họ thiết lập thứ tự TabIndex như thế nào.
Tôi tạm đoán là TabIndex theo thứ tự các trường trong csdl. Tôi đã thiết lập các TabIndex và thêm code cho Private Sub LstDMCV_Enter(). Bạn tải về tập tin mới và test xem.

TabIndex cho 7 TextBox trừ TxtMaVua: 0, 1, 3-7.
Hiện tôi chưa dò xem họ thiết lập TabIndex = 2 cho control nào.

Mình đang test thấy phát hiện những vấn đề sau:
1. Khi hiện form lên, mình mới click vào nút hình tam giác trên thanh cuộn listbox (để tìm công việc phù hợp) thì listbox đã mặc định chọn cho mình công việc đầu tiên trong listbox.
2. Khi hiện form lên, nếu mình không click vào nút tam giác mà chọn 1 hàng (hay 1 công việc) thì trong listbox được tô đậm 1 lúc 2 hàng (được chọn 2 hàng), có nghĩa hàng đầu luôn được chọn.
Mình thử phiên bản "mauhien.xls" hôm qua không bị như vây.
3. cmdthem đã hoạt động cũng như thêm được dữ liệu mới vào trong listbox với điều kiện là 3 txtboxVL, txtboxNC, txtboxMay (để nguyên dữ liệu thì được còn thay đổi là bị lỗi ).
Nếu nhập vào txtNC thì báo lỗi sub or Function not defined tại (bị lỗi ở dòng màu đỏ)
Private Sub TxtNC_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
KeyCode = CheckKeyCode(KeyCode)
End Sub
tương tự cũng bị vậy nếu nhập txtNC hoặc txtMay
4. Tại cmdsua, mình click vào 1 hàng và chọn vào txtTenCV để sửa thì vẫn được( số liệu vẫn được lưu vào listbox) nhưng khi đó listbox bị đơ
5. Tại cmdxoa, khi mình click chọn 1 hàng nào đó để xóa, khi xóa xong thì trong lisbox tự chọn hàng và nhảy về hàng đầu tiên (hàng số 1) phiên bản hôm qua thì chỉ nhảy lên 1 hàng kế tiếp thôi
 
Upvote 0
Mình đang test thấy phát hiện những vấn đề sau:
1. Khi hiện form lên, mình mới click vào nút hình tam giác trên thanh cuộn listbox (để tìm công việc phù hợp) thì listbox đã mặc định chọn cho mình công việc đầu tiên trong listbox.
2. Khi hiện form lên, nếu mình không click vào nút tam giác mà chọn 1 hàng (hay 1 công việc) thì trong listbox được tô đậm 1 lúc 2 hàng (được chọn 2 hàng), có nghĩa hàng đầu luôn được chọn.
Mình thử phiên bản "mauhien.xls" hôm qua không bị như vây.
Nếu không muốn thế thì xóa
Mã:
Private Sub LstDMCV_Enter()
If LstDMCV.ListIndex < 0 Then
LstDMCV.ListIndex = 0
LstDMCV.Selected(0) = True
End If
End Sub
3. cmdthem đã hoạt động cũng như thêm được dữ liệu mới vào trong listbox với điều kiện là 3 txtboxVL, txtboxNC, txtboxMay (để nguyên dữ liệu thì được còn thay đổi là bị lỗi ).
Thực ra hiện thời code không thực hiện theo ý người viết.
Ý người viết là ban đầu thì có CmdThem.Caption = "Thêm". Nếu user nhấn nút thì nó chả thêm thắt gì cả mà chỉ "mở khóa" các TextBox để có thể nhập dữ liệu, và đổi thành CmdThem.Caption = "Lưu"
Mã:
If CmdThem.Caption = "Thêm" Then
        CmdThem.Caption = "Lưu": CmdThem.Enabled = False
        OnOffTxt True
        TxtMDG.ForeColor = vbBlack: TxtTenCV.ForeColor = vbBlack
    Else
Lúc đó bạn nhập dữ liệu và nhấn nút CmdThem với hàm ý lưu (vì hiện tại thì nhìn trên nút có chữ Lưu) thì mới có chuyện thêm vào csdl và ListBox, "khóa" các TextBox, và lại đổi thành CmdThem.Caption = "Thêm".
Mã:
Else
...
End If
Tiếp theo muốn thêm nữa thì lại phải nhấn nút để trở về kia và mọi chuyện lại lặp lại.

Đó là dụng ý của người viết code, tôi không muốn sửa, vì sửa thì phải viết lại toàn bộ thì mới đồng bộ. Chắp vá nhiều cách viết của nhiều người khác nhau không hay.

Do bạn có "THÊM" chứ không phải là "Thêm" nên khi nhấn nút thì rõ ràng điều kiện CmdThem.Caption = "Thêm" không thỏa, tức ngay lập tức code thực hiện phần Else, trái với dụng ý.
Nếu nhập vào txtNC thì báo lỗi sub or Function not defined tại (bị lỗi ở dòng màu đỏ)
Private Sub TxtNC_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
KeyCode = CheckKeyCode(KeyCode)
End Sub
tương tự cũng bị vậy nếu nhập txtNC hoặc txtMay
Do trong toàn bộ tập tin không có code CheckKeyCode, thế thôi. Tôi có thể đoán là người ta sẽ kiểm tra phím nhấn và không chấp nhận một số phím nào đó. Có thể tự viết code cho CheckKeyCode, nhưng làm sao mà đoán được người ta muốn loại bỏ / cấm những phím nào.
Tôi đề nghị tìm tất cả những dòng có CheckKeyCode và biến chúng thành chú thích - vd. gõ ký tự nháy đơn ở đầu. Còn khi nhập liệu thì tránh nhập những ký tự mà phần đó không chấp nhận.
4. Tại cmdsua, mình click vào 1 hàng và chọn vào txtTenCV để sửa thì vẫn được( số liệu vẫn được lưu vào listbox) nhưng khi đó listbox bị đơ
Thì vẫn vấn đề như CmdThem thôi
Mã:
Private Sub CmdSua_Click()
  TxtMDG.ForeColor = vbBlack
    TxtTenCV.ForeColor = vbBlack
    If CmdSua.Caption = "Sua" Then
        CmdSua.Caption = "Xong"
        OnOffTxt True
    Else
        Dim ID As Long
        ID = LstDMCV.ListIndex
        With RsDmcv
            .Fields("MADG") = TxtMDG.Text
            .Fields("TENCV") = TxtTenCV.Text
            .Update
            .Requery
        End With
        UpdataToListBox
        LstDMCV.ListIndex = ID
        LstDMCV.TopIndex = ID
        LstDMCV.Selected(ID) = True
        CmdSua.Caption = "Sua"
        OnOffTxt False
    End If
End Sub
Bạn thêm được như thế là trái với dụng ý tác giả. Dụng ý là: ở thời điểm chào buổi sáng thì CmdSua.Caption = "Sửa" (Sua). Khi user nhấn nút thì chưa sửa gì cả mà chỉ đổi thành CmdSua.Caption = "Xong", và "mở khóa" các TextBox để có thể sửa. Khi đã sửa xong trong các TextBox thì nhấn nút với dụng ý Xong (vì lúc ấy trên nút nhìn thấy Xong) thì lần này code mới sửa trong csdl và làm mới ListBox, đổi lại thành CmdSua.Caption = "Sua" và "khóa" các TextBox.

Bạn nhấn Sửa mà đã đươc sửa ngay là trái với dụng ý của người viết code. Nguyên nhân là do là bạn có Caption của CmdSua là "SUA", nên điều kiện If CmdSua.Caption = "Sua" Then không thỏa nên code thực hiện luôn nhánh Else ... End If

Khi đã sửa được có nghĩa là nhánh Else ... End If được thực hiện, mà trong đó có
Xem code của OnOffTxt có
Mã:
Private Sub OnOffTxt(Ebl As Boolean)
    Dim Ctl As Control
    For Each Ctl In Me.Controls
        If Ctl.TabIndex >= 3 And Ctl.TabIndex <= 8 Then
            Ctl.Enabled = Ebl
        End If
    Next
End Sub
Tức khi đã sửa được thì 6 control có TabIndex từ 3 đến 8 sẽ bị khóa. Kiểm tra lại thì thấy hiện thời ListBox có TabIndex = 8 nên nó bị khóa, bị đơ.

Bạn có 8 TextBox, trong csdl có 8 trường. Nhưng tôi thấy code chỉ thêm vào MDB có 7 trường
Mã:
If Ctl.TabIndex < 2 Then
                        .Fields(Ctl.TabIndex) = Ctl.Text
                    ElseIf Ctl.TabIndex > 2 And Ctl.TabIndex < 8 Then
                        .Fields(Ctl.TabIndex - 1) = Replace(Ctl.Text, ".", "")
                    End If
Tức thêm từ 7 Text có TabIndex = 0, 1 (< 2), và từ 3 đến 7 (nhánh Else). Vậy thì control nào có TabIndex = 8?

Tôi sẽ sửa để cho TxtMaVua có TabIndex = 8. Tức mọi thao tác "mở khóa" và "Khóa" TextBox nói ở trên (Thêm, Sửa) là thực hiện cho 6 TextBox, ngoại trừ TxtMDG và TxtTenCV luôn Enabled.

Tôi đã sửa, xóa, thêm và thiết lập TabIndex cho 8 TextBox.

Tôi biến các Sub

TxtIndex_KeyDown, TxtMay_KeyDown, TxtMay_KeyUp, TxtNC_KeyDown, TxtNC_KeyUp, TxtVL_KeyDown, TxtVL_KeyUp

thành chú thích vì không có các hàm CheckKeyCode FormatTxt

và thêm TxtVL_Change, TxtNC_Change, TxtMay_Change

Tải tập tin đính kèm và test.
 

File đính kèm

  • Mauhien.xls
    98.5 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Nếu không muốn thế thì xóa
Mã:
Private Sub LstDMCV_Enter()
If LstDMCV.ListIndex < 0 Then
LstDMCV.ListIndex = 0
LstDMCV.Selected(0) = True
End If
End Sub

Thực ra hiện thời code không thực hiện theo ý người viết.
Ý người viết là ban đầu thì có CmdThem.Caption = "Thêm". Nếu user nhấn nút thì nó chả thêm thắt gì cả mà chỉ "mở khóa" các TextBox để có thể nhập dữ liệu, và đổi thành CmdThem.Caption = "Lưu"
Mã:
If CmdThem.Caption = "Thêm" Then
        CmdThem.Caption = "Lưu": CmdThem.Enabled = False
        OnOffTxt True
        TxtMDG.ForeColor = vbBlack: TxtTenCV.ForeColor = vbBlack
    Else
Lúc đó bạn nhập dữ liệu và nhấn nút CmdThem với hàm ý lưu (vì hiện tại thì nhìn trên nút có chữ Lưu) thì mới có chuyện thêm vào csdl và ListBox, "khóa" các TextBox, và lại đổi thành CmdThem.Caption = "Thêm".
Mã:
Else
...
End If
Tiếp theo muốn thêm nữa thì lại phải nhấn nút để trở về kia và mọi chuyện lại lặp lại.

Đó là dụng ý của người viết code, tôi không muốn sửa, vì sửa thì phải viết lại toàn bộ thì mới đồng bộ. Chắp vá nhiều cách viết của nhiều người khác nhau không hay.

Do bạn có "THÊM" chứ không phải là "Thêm" nên khi nhấn nút thì rõ ràng điều kiện CmdThem.Caption = "Thêm" không thỏa, tức ngay lập tức code thực hiện phần Else, trái với dụng ý.

Do trong toàn bộ tập tin không có code CheckKeyCode, thế thôi. Tôi có thể đoán là người ta sẽ kiểm tra phím nhấn và không chấp nhận một số phím nào đó. Có thể tự viết code cho CheckKeyCode, nhưng làm sao mà đoán được người ta muốn loại bỏ / cấm những phím nào.
Tôi đề nghị tìm tất cả những dòng có CheckKeyCode và biến chúng thành chú thích - vd. gõ ký tự nháy đơn ở đầu. Còn khi nhập liệu thì tránh nhập những ký tự mà phần đó không chấp nhận.

Thì vẫn vấn đề như CmdThem thôi
Mã:
Private Sub CmdSua_Click()
  TxtMDG.ForeColor = vbBlack
    TxtTenCV.ForeColor = vbBlack
    If CmdSua.Caption = "Sua" Then
        CmdSua.Caption = "Xong"
        OnOffTxt True
    Else
        Dim ID As Long
        ID = LstDMCV.ListIndex
        With RsDmcv
            .Fields("MADG") = TxtMDG.Text
            .Fields("TENCV") = TxtTenCV.Text
            .Update
            .Requery
        End With
        UpdataToListBox
        LstDMCV.ListIndex = ID
        LstDMCV.TopIndex = ID
        LstDMCV.Selected(ID) = True
        CmdSua.Caption = "Sua"
        OnOffTxt False
    End If
End Sub
Bạn thêm được như thế là trái với dụng ý tác giả. Dụng ý là: ở thời điểm chào buổi sáng thì CmdSua.Caption = "Sửa" (Sua). Khi user nhấn nút thì chưa sửa gì cả mà chỉ đổi thành CmdSua.Caption = "Xong", và "mở khóa" các TextBox để có thể sửa. Khi đã sửa xong trong các TextBox thì nhấn nút với dụng ý Xong (vì lúc ấy trên nút nhìn thấy Xong) thì lần này code mới sửa trong csdl và làm mới ListBox, đổi lại thành CmdSua.Caption = "Sua" và "khóa" các TextBox.

Bạn nhấn Sửa mà đã đươc sửa ngay là trái với dụng ý của người viết code. Nguyên nhân là do là bạn có Caption của CmdSua là "SUA", nên điều kiện If CmdSua.Caption = "Sua" Then không thỏa nên code thực hiện luôn nhánh Else ... End If

Khi đã sửa được có nghĩa là nhánh Else ... End If được thực hiện, mà trong đó có

Xem code của OnOffTxt có
Mã:
Private Sub OnOffTxt(Ebl As Boolean)
    Dim Ctl As Control
    For Each Ctl In Me.Controls
        If Ctl.TabIndex >= 3 And Ctl.TabIndex <= 8 Then
            Ctl.Enabled = Ebl
        End If
    Next
End Sub
Tức khi đã sửa được thì 6 control có TabIndex từ 3 đến 8 sẽ bị khóa. Kiểm tra lại thì thấy hiện thời ListBox có TabIndex = 8 nên nó bị khóa, bị đơ.

Bạn có 8 TextBox, trong csdl có 8 trường. Nhưng tôi thấy code chỉ thêm vào MDB có 7 trường
Mã:
If Ctl.TabIndex < 2 Then
                        .Fields(Ctl.TabIndex) = Ctl.Text
                    ElseIf Ctl.TabIndex > 2 And Ctl.TabIndex < 8 Then
                        .Fields(Ctl.TabIndex - 1) = Replace(Ctl.Text, ".", "")
                    End If
Tức thêm từ 7 Text có TabIndex = 0, 1 (< 2), và từ 3 đến 7 (nhánh Else). Vậy thì control nào có TabIndex = 8?

Tôi sẽ sửa để cho TxtMaVua có TabIndex = 8. Tức mọi thao tác "mở khóa" và "Khóa" TextBox nói ở trên (Thêm, Sửa) là thực hiện cho 6 TextBox, ngoại trừ TxtMDG và TxtTenCV luôn Enabled.

Tôi đã sửa, xóa, thêm và thiết lập TabIndex cho 8 TextBox.

Tôi biến các Sub

TxtIndex_KeyDown, TxtMay_KeyDown, TxtMay_KeyUp, TxtNC_KeyDown, TxtNC_KeyUp, TxtVL_KeyDown, TxtVL_KeyUp

thành chú thích vì không có các hàm CheckKeyCode FormatTxt

và thêm TxtVL_Change, TxtNC_Change, TxtMay_Change

Tải tập tin đính kèm và test.
Quá tuyệt vời luôn bạn ơi, Không biết nói gì hơn là chân thành cám ơn bạn nhiều.
Bạn có thể giúp mình thêm chút nữa nhé. Chả là trong file "mauhien.xls" có 1 module2, trong đó có code mà mình không biết làm sao để gọi nó ?
Mục đích cửa code đó là:
Ví vụ tại sheet DTCT mình đã chọn được (1 dòng) công việc từ uerform có Mã Đ.giá là:
AF11111, thì tại sheet PTVT sẽ xuất hiện các loại vật liệu, nhân công mà Mã hiệu ĐM AF11110 có được lấy từ Định mức 24. Mình có mô tả trong excel
(nói chung là chọn được 1 hạng mục công việc bên sheetDTCT thì bến sheet PTVT sẽ xuất hiện 1 hạng mục tương ứng nhưng phân tích ra nhiều công việc con để hình thành 1 công việc mang tên AF11111)
Một lần nữa cám ơn bạn nhiều nhé
 

File đính kèm

  • Mauhien.xls
    122.5 KB · Đọc: 13
  • DinhMuc24.rar
    291.7 KB · Đọc: 6
Upvote 0
Trong code của Sub PhanTichVT có:

FormPhanTichVatTu.ChkVL.Value = True 'Checkbox tręn form, có th? thay th? b?ng di?u ki?n khác'
FormPhanTichVatTu.ChkNC.Value = True
FormPhanTichVatTu.ChkMay.Value = True
FormPhanTichVatTu.Prg 'Progressbar theo dői ti?n trěnh'

Tức tập tin còn có Form với tên là FormPhanTichVatTu, mà trên đó có ít nhất là 3 CheckBox, Progressbar: ChkVL, ChkNC, ChkMay, Prg. Ai mà biết nó còn gì. Nó cũng có thể có code.

Bạn không có form FormPhanTichVatTu.

Nghỉ chơi.
 
Upvote 0
Trong code của Sub PhanTichVT có:

FormPhanTichVatTu.ChkVL.Value = True 'Checkbox tręn form, có th? thay th? b?ng di?u ki?n khác'
FormPhanTichVatTu.ChkNC.Value = True
FormPhanTichVatTu.ChkMay.Value = True
FormPhanTichVatTu.Prg 'Progressbar theo dői ti?n trěnh'

Tức tập tin còn có Form với tên là FormPhanTichVatTu, mà trên đó có ít nhất là 3 CheckBox, Progressbar: ChkVL, ChkNC, ChkMay, Prg. Ai mà biết nó còn gì. Nó cũng có thể có code.

Bạn không có form FormPhanTichVatTu.

Nghỉ chơi.
:(:(
 
Upvote 0
Web KT
Back
Top Bottom