Quí Hảo La
Quí Hảo La
Thảo luận 20 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 125 lượt xem

Chào Gitiho Tôi xin nhờ Gitiho hỗ trợ giúp tôitrong 1 sub tôi gọi 1 userform có

Chào Gitiho. Tôi xin nhờ Gitiho hỗ trợ giúp tôi!

trong 1 sub tôi gọi 1 userform có 2 comantbutton để người dùng lựa chọn nếu người dùng click comantbutton 1 thì thực hiện câu lệnh 1 trong sub, click comantbutton 2 thì thực hiện câu lệnh 2 trong sub, nếu người dùng chọn dấu x đóng userform thì exit sub luôn

Xin cảm ơn Gitiho

Thảo luận 20 câu trả lời
Lượt xem 125 lượt xem
Vỗ tay vỗ tay
Quí Hảo La 22:09 - Sep 06, 2021

còn nữa là khi click 1 trong 2 comantbutton đều đóng userform 

Vỗ tay vỗ tay
Quí Hảo La 13:09 - Sep 07, 2021

Chào bạn bạn mở userform  tạo sự kiện với nút bấm bạn chỉ cần gọi nút đó là được nếu đóng from bạn sẽ xử dụng unload me nhé.

Vỗ tay vỗ tay
Quí Hảo La 09:09 - Sep 08, 2021

Tôi chưa hiểu lắm gitiho cho tôi xin 1 đoạn code vị dụ được không ạ

Xin cảm ơn

Vỗ tay vỗ tay
Quí Hảo La 09:09 - Sep 08, 2021

Chào bạn đây là một vidu nhé

với code như sau

Option Explicit
Private Sub CommandButton1_Click()
    MsgBox "Gitiho", vbInformation, "Excel"
End Sub
Private Sub CommandButton2_Click()
    Unload Me
End Sub

nút 1 tương ứng với CommandButton1

nút 2 tương ứng với CommandButton2

Vỗ tay vỗ tay
Quí Hảo La 09:09 - Sep 08, 2021

Cảm ơn Gitiho ví dụ này thì tôi hiểu nhưng khi áp dụng vào tình huống này của tôi thì tôi lại rối nhờ Gitiho vui lòng hướng dẫn tôi thêm chỗ này



Vỗ tay vỗ tay
Quí Hảo La 09:09 - Sep 08, 2021
Option Explicit
Sub goi_userform_tuong_tac_nguoi_dung()
    PA.Show
    'Neu nguoi dung click Nut 1 thi thuc hien cau lenh 1
     a = b + c
    'Neu nguoi dung click Nut 2 thi thuc hien cau lenh 2
    a = b - c
    'Neu nguoi dung dong hop thoi thi thoat chuong trinh
    Exit Sub
End Sub








Vỗ tay vỗ tay
Quí Hảo La 10:09 - Sep 08, 2021

Chào bạn bạn kích vào hai nút đó sẽ sinh ra code bạn nhé 

Private Sub CommandButton1_Click()
    dim a, b, c a = b+c msgbox a
End Sub
Private Sub CommandButton2_Click()
    dim a, b, c a = b-c msgbox a
End Sub




Vỗ tay vỗ tay
Quí Hảo La 10:09 - Sep 08, 2021

tôi cần thực hiện câu lệnh thực hiện trong sub, tức là khi click thì giá trị của userform được gán vào sub 

tôi đang rối nên chưa biết nói sao để gitiho hiểu rõ ý muốn của tôi

Vỗ tay vỗ tay
Quí Hảo La 10:09 - Sep 08, 2021

Chào bạn nghĩa là bạn kích vào một nút sẽ thực hiện một hành động bạn làm theo thế này nhé

với code như sau

Option Explicit
Private Sub CommandButton1_Click()
    MsgBox "Gitiho", vbInformation, "Excel"
End Sub
Private Sub CommandButton2_Click()
    Unload Me
End Sub

nút 1 tương ứng với CommandButton1

nút 2 tương ứng với CommandButton2

kích đúp vào nút 1 và nút nút 2 sẽ tự động sinh ra 

Private Sub CommandButton2_Click()
end sub






Vỗ tay vỗ tay
Quí Hảo La 10:09 - Sep 08, 2021

Toàn bộ code của tôi, tôi vẫn chưa giải được nhờ gitiho xem giúp tôi cái này nhé. tôi đang vướng ở phần tô đậm

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target = "" Then

    Exit Sub

Else

    Dim DC_DBN As Single

    DC_DBN = WB_CDB.Sheet5.Range("D" & Rows.CountLarge).End(xlUp).Row

    If Not Application.Intersect(Target, Range("D3:D" & DC_DBN)) Is Nothing Then

        'Tat cap nhat man hinh

        Application.ScreenUpdating = False

        'Hien sheet Lenh San Xuat

        WB_CDB.Sheet11.Visible = xlSheetVisible

        'Xoa het du lieu cu

            'Xoa Ngay

            WB_CDB.Sheet11.Range("A1, A16, A31, A46, A61, A76, A91").ClearContents

            'Xoa Gio

            WB_CDB.Sheet11.Range("B1, B16, B31, B46, B61, B76, B91").ClearContents

            'Xoa Ma Form

            WB_CDB.Sheet11.Range("D1:I1, D16:I16, D31:I31, D46:I46, D61:I61, D76:I76, D91:I91").ClearContents

            'Xoa SO

            WB_CDB.Sheet11.Range("K1:N1, K16:N16, K31:N31, K46:N46, K61:N61, K76:N76, K91:N91").ClearContents

            'Xoa Packing Method

            WB_CDB.Sheet11.Range("P1:T1, P16:T16, P31:T31, P46:T46, P61:T61, P76:T76, P91:T91").ClearContents

            'Xoa Dich Den

            WB_CDB.Sheet11.Range("V1:AB1, V16:AB16, V31:AB31, V46:AB46, V61:AB61, V76:AB76, V91:AB91").ClearContents

            'Xoa PO

            WB_CDB.Sheet11.Range("A4:A7, A19:A22, A34:A37, A49:A52, A64:A67, A79:A82, A94:A97").ClearContents

            'Xoa Ma Giay

            WB_CDB.Sheet11.Range("B4:B7, B19:B22, B34:B37, B49:B52, B64:B67, B79:B82, B94:B97").ClearContents

            'Xoa Mau

            WB_CDB.Sheet11.Range("C4:C7, C19:C22, C34:C37, C49:C52, C64:C67, C79:C82, C94:C97").ClearContents

            'Xoa Xuat Hang

            WB_CDB.Sheet11.Range("D4:D7, D19:D22, D34:D37, D49:D52, D64:D67, D79:D82, D94:D97").ClearContents

            'Xoa So Luong

            WB_CDB.Sheet11.Range("F4:AA8, F19:AA23, F34:AA38, F49:AA53, F64:AA68, F79:AA83, F94:AA98").ClearContents

            'Xoa Chuyen

            WB_CDB.Sheet11.Range("AB3:AB4, AB18:AB19, AB33:AB34, AB48:AB49, AB63:AB64, AB78:AB79, AB93:AB94").ClearContents

            'Xoa Ket

            WB_CDB.Sheet11.Range("AB5:AB7, AB20:AB22, AB35:AB37, AB50:AB52, AB65:AB67, AB80:AB82, AB95:AB97").ClearContents

            'Xoa vong form

            WB_CDB.Sheet11.Range("E99:AA106").ClearContents

    'Cap nhat du lieu moi

        'Dien PO

        WB_CDB.Sheet11.Range("A4, A19, A34, A49, A64, A79, A94") = Target.Value

        'Dien Ma Giay

        WB_CDB.Sheet11.Range("B4, B19, B34, B49, B64, B79, B94") = Target.Offset(, 1).Value

        'Dien Mau

        WB_CDB.Sheet11.Range("C4, C19, C34, C49, C64, C79, C94") = Target.Offset(, 2).Value

        'Dien Xuat Hang

        WB_CDB.Sheet11.Range("D4, D19, D34, D49, D64, D79, D94") = Target.Offset(, 4).Value

        'Dien SO

        WB_CDB.Sheet11.Range("K1, K16, K31, K46, K61, K76, K91") = Target.Offset(, -1).Value

        'Dien Packing Method

        If Target.Offset(, 6).Value = "" Or Target.Offset(, 6).Value <= 0 Then

            MsgBox "Chua xac dinh Packing Method, vui long cap nhat lai thong tin", vbInformation + vbOKOnly, "Canh bao"

            WB_CDB.Sheet5.Activate

            Target.Offset(, 6).Activate: Exit Sub

        Else

            WB_CDB.Sheet11.Range("P1, P16, P31, P46, P61, P76, P91") = Target.Offset(, 6).Value

        End If

        'Dien Dich Den

        WB_CDB.Sheet11.Range("V1, V16, V31, V46, V61, V76, V91") = Target.Offset(, 3).Value

        'Dien line

        WB_CDB.Sheet11.Range("AB3, AB18, AB33, AB48, AB63, AB78, AB93") = "C" & Target.Offset(, 7).Value

        'Dien Ma Form

        WB_CDB.Sheet11.Range("D1, D16, D31, D46, D61, D76, D91") = Target.Offset(, -3).Value

        'Dien so luong form

            'Hien sheet form

            WB_CDB.Sheet12.Visible = xlSheetVisible

            'Dong cuoi danh sach form

            Dim DC_Fo, f As Single

            DC_Fo = WB_CDB.Sheet12.Range("C" & Rows.CountLarge).End(xlUp).Row

            f = 3

            Do

                'Neu dung ma form thi den xet ma giay

                If WB_CDB.Sheet12.Range("C" & f).Value = Target.Offset(, -3).Value Then

                        'Ha form

                        If WB_CDB.Sheet12.Range("A" & f).Value = Target.Offset(, 1).Value Then

                            WB_CDB.Sheet11.Range("F4:Y4") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F19:Y19") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F34:Y34") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F49:Y49") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F64:Y64") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F79:Y79") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F94:Y94") = WB_CDB.Sheet12.Range("E" & f & ":X" & f).Value

                            Exit Do

                        'Nang form

                        ElseIf WB_CDB.Sheet12.Range("B" & f).Value = Target.Offset(, 1).Value Then

                            WB_CDB.Sheet11.Range("G4:Z4") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            WB_CDB.Sheet11.Range("G19:Z19") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            WB_CDB.Sheet11.Range("G34:Z34") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            WB_CDB.Sheet11.Range("G49:Z49") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            WB_CDB.Sheet11.Range("G64:Z64") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            WB_CDB.Sheet11.Range("G79:Z79") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            WB_CDB.Sheet11.Range("G94:Z94") = WB_CDB.Sheet12.Range("D" & f & ":W" & f).Value

                            Exit Do

                        Else

                        'Dung form

                            WB_CDB.Sheet11.Range("F4:Z4") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F19:Z19") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F34:Z34") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F49:Z49") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F64:Z64") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F79:Z79") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            WB_CDB.Sheet11.Range("F94:Z94") = WB_CDB.Sheet12.Range("D" & f & ":X" & f).Value

                            f = f + 1

                        End If

                Else 'Nguoc lai thi tiep tuc ma form khac

                    f = f + 1

                    If f > DC_Fo And Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F4:Z4")) = 0 Then

                        MsgBox "Form chua dung: co the thua khoang trang hoac chua co", vbInformation + vbOKOnly, "Thong bao"

                        WB_CDB.Sheet5.Activate

                        Target.Offset(, -3).Activate: Exit Sub

                    End If

                End If

            Loop Until f > DC_Fo

            'An sheet FORM

                WB_CDB.Sheet12.Visible = xlSheetVeryHidden

        'Tinh Tong Form

        WB_CDB.Sheet11.Range("AA4, AA19, AA34, AA49, AA64, AA79, AA94") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F94:Z94"))

        'Dien SLKH

         If Dir("D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\NHAP KHO BTP-SK GO KG.xlsx") = "" Then _

                MsgBox " File D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\NHAP KHO BTP-SK GO KG.xlsx khong ton tai" & _

                vbCrLf & "Vui long kiem tra lai thu muc", vbInformation & vbOKOnly, "Thong bao": _

                Exit Sub

        'Gan file nhap vua mo vao bien

            Dim WB_Nhap As Workbook

            Set WB_Nhap = Workbooks.Open("D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\NHAP KHO BTP-SK GO KG.xlsx", UpdateLinks:=0)  'Mo file nhap, khong cap nhat

            Windows("CAN DONG BO.xlsm").Activate

        'Xoa loc

            If WB_Nhap.Sheets("SLKH").AutoFilterMode Then WB_Nhap.Sheets("SLKH").AutoFilter.ShowAllData

        'Dong cuoi SLKH sheet Nhap

            Dim DC_SLKH As Single

            DC_SLKH = WB_Nhap.Sheets("SLKH").Range("D" & Rows.CountLarge).End(xlUp).Row

        'Gan vung PO SLKH

        Dim PO_SLKH, PO As Range

        Set PO_SLKH = WB_Nhap.Sheets("SLKH").Range("D5:D" & DC_SLKH)

        For Each PO In PO_SLKH

            If PO = "" Then

            Else

               If PO.Value = Target.Value Then

                WB_CDB.Sheet11.Range("F5:V5") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W5:Z5") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                WB_CDB.Sheet11.Range("F20:V20") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W20:Z20") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                WB_CDB.Sheet11.Range("F35:V35") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W35:Z35") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                WB_CDB.Sheet11.Range("F50:V50") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W50:Z50") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                WB_CDB.Sheet11.Range("F65:V65") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W65:Z65") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                WB_CDB.Sheet11.Range("F80:V80") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W80:Z80") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                WB_CDB.Sheet11.Range("F95:V95") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 5), PO.Offset(, 21)).Value

                WB_CDB.Sheet11.Range("W95:Z95") = WB_Nhap.Sheets("SLKH").Range(PO.Offset(, 23), PO.Offset(, 26)).Value

                Exit For

               End If

            End If

        Next PO

        'Tinh Tong SLKH

        WB_CDB.Sheet11.Range("AA5, AA20, AA35, AA50, AA65, AA80, AA95") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F95:Z95"))

        'Dien Thieu Ke Hoach

        'Kiem tra file co ton tai khong

            If Dir("D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\XUAT KHO BTP-SK GO KG.xlsx") = "" Then _

                MsgBox " File D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\XUAT KHO BTP-SK GO KG.xlsx khong ton tai" & _

                vbCrLf & "Vui long kiem tra lai thu muc", vbInformation & vbOKOnly, "Thong bao": _

                Exit Sub

        'Gan file xuat vua mo vao bien

            Dim WB_Xuat As Workbook

            Set WB_Xuat = Workbooks.Open("D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\XUAT KHO BTP-SK GO KG.xlsx", UpdateLinks:=0)  'Mo file xuat, khong cap nhat

            Windows("CAN DONG BO.xlsm").Activate

        'Xoa loc sheet Xuat Mu

            If WB_Xuat.Sheets("XUAT MU").AutoFilterMode Then WB_Xuat.Sheets("XUAT MU").AutoFilter.ShowAllData

        'Dong cuoi PO Xuat Mu

            Dim DC_XM As Single

            DC_XM = WB_Xuat.Sheets("XUAT MU").Range("B" & Rows.CountLarge).End(xlUp).Row

        'Gan vung PO Xuat Mu

            Dim PO_XM, XM As Range

            Dim i, j As Single

            Set PO_XM = WB_Xuat.Sheets("XUAT MU").Range("B8:B" & DC_XM)

            If Target.Offset(, 8).Value = Target.Offset(, 5).Value Then

                For j = 6 To 96 Step 15

                    For i = 6 To 27

                        WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(j - 1, i)

                    Next i

                Next j

            Else

                For Each XM In PO_XM

                    If XM = "" Then

                    Else

                        If XM.Value = Target.Value Then

                            For j = 6 To 96 Step 15

                                For i = 6 To 26

                                    WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(j - 1, i) - Application.WorksheetFunction.SumIf(PO_XM, Target, PO_XM.Offset(, i + 1))

                                Next i

                            Next j

                        Exit For

                        End If

                    End If

                Next XM

                'Tinh Tong TKH

                 WB_CDB.Sheet11.Range("AA6, AA21, AA36, AA51, AA66, AA81, AA96") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F96:Z96"))

            End If

      'Dien SLSX

        If Target.Offset(, 10).Value = Target.Offset(, 8).Value Then  'Neu Tong Dong Bo Ngay = TKH Xuat thi ra lenh ket

            'Dien SLSX tung size lenh ket

            For j = 7 To 97 Step 15

                For i = 6 To 27

                    WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(j - 1, i).Value

                Next i

            Next j

            'Dien tong SLSX

            WB_CDB.Sheet11.Range("AA7, AA22, AA37, AA52, AA67, AA82, AA97") = Target.Offset(, 10).Value

        Else 'Nguoc lai Tong DBN <> TKH Xuat thi ra lenh thuong

            'Xac dinh Packing Method

            Dim Str, TiLe As String, Mng, Dng, k As Single

            Str = Replace(WB_CDB.Sheet11.Range("P91").Value, " ", "") 'Xoa khoan trong

            Mng = InStr(Str, "(") 'Vi tri mo ngoac

            Dng = InStr(Str, ")") 'Vi tri dong ngoac

            If Mng > 0 And Dng > 0 Then 'Ti le size dong thung

                TiLe = Mid(Str, Mng + 1, Dng - Mng - 1)

                If Len(TiLe) = Application.WorksheetFunction.CountIf(WB_CDB.Sheet11.Range("F5:Z5"), ">0") Then

                    PA.Show 'Goi userform de nguoi dung lua chon phuong phap tinh

                    'Neu dong hop thoai thi thoat chuong trinh

                    Exit Sub

                    

                    'Click Nut 2 thi dong userform va thuc hien nhung cau lenh duoi

                        For j = 7 To 97 Step 15

                            For i = 6 To 26

                                WB_CDB.Sheet11.Cells(j, i) = Target.Offset(, i + 5).Value

                            Next i

                        Next j

                        WB_CDB.Sheet11.Range("AA7, AA22, AA37, AA52, AA67, AA82, AA97") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F7:Z7"))

                    

                    'Click Nut 1 thi dong userform va thuc hien nhung cau lenh duoi

                        If IsNumeric(TiLe) = True Then 'Trong dau () la so ti le thi lam tron

                            For i = 6 To 26

                                If WB_CDB.Sheet11.Cells(5, i).Value > 0 Then

                                    k = k + 1

                                    If Target.Offset(, i + 5).Value > 0 Then

                                        WB_CDB.Sheet11.Cells(7, i) = Application.WorksheetFunction.Floor(Target.Offset(, i + 5).Value, Mid(TiLe, k, 1)) / Mid(TiLe, k, 1) 'chia ra so thung tung size

                                    End If

                                End If

                            Next i

                                Dim sothung As Single

                                    sothung = Application.WorksheetFunction.Min(WB_CDB.Sheet11.Range("F7:Z7")) 'So thung nho nhat

                                    k = 0

                                For i = 6 To 26

                                    If WB_CDB.Sheet11.Cells(5, i).Value > 0 Then

                                        k = k + 1

                                        WB_CDB.Sheet11.Cells(7, i) = Mid(TiLe, k, 1) * sothung

                                    End If

                                Next i

                                'Tinh tong SLSX

                                WB_CDB.Sheet11.Range("AA7") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F7:Z7"))

                                WB_CDB.Sheet11.Range("AA8, AA23, AA38, AA53, AA68, AA83, AA98") = WB_CDB.Sheet11.Range("AA7") / Left(Str, Mng - 1)

                                WB_CDB.Sheet11.Range("F22:AA22") = WB_CDB.Sheet11.Range("F7:AA7").Value

                                WB_CDB.Sheet11.Range("F37:AA37") = WB_CDB.Sheet11.Range("F7:AA7").Value

                                WB_CDB.Sheet11.Range("F52:AA52") = WB_CDB.Sheet11.Range("F7:AA7").Value

                                WB_CDB.Sheet11.Range("F67:AA67") = WB_CDB.Sheet11.Range("F7:AA7").Value

                                WB_CDB.Sheet11.Range("F82:AA82") = WB_CDB.Sheet11.Range("F7:AA7").Value

                                WB_CDB.Sheet11.Range("F97:AA97") = WB_CDB.Sheet11.Range("F7:AA7").Value

                        Else 'Nguoc lai trong dau ngoac khong phai la so ti le ma la chuoi thi khong can lam trong chi chan nhap so luong

                             For j = 7 To 97 Step 15

                                For i = 6 To 26

                                    If Target.Offset(, i + 5).Value > 0 Then

                                        WB_CDB.Sheet11.Cells(j, i) = Target.Offset(, i + 5).Value

                                    End If

                                Next i

                            Next j

                            'Dien tong SLSX

                            WB_CDB.Sheet11.Range("AA7, AA22, AA37, AA52, AA67, AA82, AA97") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F97:Z97"))

                        End If

                Else

                    MsgBox "Packing Method khong dung voi so luong size ke hoach", vbInformation + vbOKOnly, "Thong bao"

                    WB_CDB.Sheet5.Activate

                    Target.Offset(, 6).Activate: Exit Sub

                End If

            ElseIf Mng > 0 And Dng = 0 Then 'Thieu dong ngoac kiem tra du lieu

                MsgBox "Packing Method sai hoac thieu )", vbInformation + vbOKOnly, "Thong bao"

                WB_CDB.Sheet5.Activate

                Target.Offset(, 6).Activate: Exit Sub

            ElseIf Mng = 0 And Dng > 0 Then 'Thieu mo ngoac kiem tra du lieu

                MsgBox "Packing Method sai hoac thieu )", vbInformation + vbOKOnly, "Thong bao"

                WB_CDB.Sheet5.Activate

                Target.Offset(, 6).Activate: Exit Sub

            ElseIf Mng = 0 And Dng = 0 Then 'Khong co ngoac co the la size run hoac ti le dong thung lon Cosco

                If IsNumeric(Str) = True Then 'Neu khong co ngoac va la so thi size run => lam tron so

                    For j = 7 To 97 Step 15

                        For i = 6 To 26

                            If Target.Offset(, i + 5).Value > 0 Then

                                WB_CDB.Sheet11.Cells(j, i) = Application.WorksheetFunction.Floor(Target.Offset(, i + 5).Value, Str) 'Lam tron

                                WB_CDB.Sheet11.Cells(j + 1, i) = WB_CDB.Sheet11.Cells(j, i) / Str 'Chia thung

                            End If

                        Next i

                    Next j

                    'Dien tong SLSX

                    WB_CDB.Sheet11.Range("AA7, AA22, AA37, AA52, AA67, AA82, AA97") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F97:Z97")) 'Tong SLSX

                    WB_CDB.Sheet11.Range("AA8, AA23, AA38, AA53, AA68, AA83, AA98") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F98:Z98")) 'Tong so thung

                Else 'Nguoc lai khong dong ngoac va la chuoi kieu cosco => nhap so khong can lam tron

                    For j = 7 To 97 Step 15

                        For i = 6 To 26

                            If Target.Offset(, i + 5).Value > 0 Then

                                WB_CDB.Sheet11.Cells(j, i) = Target.Offset(, i + 5).Value

                            End If

                        Next i

                    Next j

                    'Dien tong SLSX

                    WB_CDB.Sheet11.Range("AA7, AA22, AA37, AA52, AA67, AA82, AA97") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F97:Z97"))

                End If

            End If

        End If

    'Chuan bi chia vong form

    If WB_CDB.Sheet11.Range("AA97").Value >= 250 Then 'Neu SLSX >= 250 thi chia vong form

    Dim r, Vf, d As Integer

        r = 250

        Do

            If WB_CDB.Sheet11.Range("AA97").Value Mod r = 0 Then 'Neu tong SLSX chia het cho 250 thi

                Vf = WB_CDB.Sheet11.Range("AA97").Value / r             'Xac dinh so vong form

                r = r + 1                                                                 'Tiep tuc chia de tim vong form co so lon nhat

            Else 'Nguoc lai neu chia du thi them 1 roi chia lai

                r = r + 1

            End If

        Loop Until r = 500 'Cho den khi r = 280 thi thoi, se thay the = quan so * PPH se chinh xac hon

        'Chia vong form

        For j = 99 To 98 + Vf

            WB_CDB.Sheet11.Cells(j, 5) = "Vf" & j - 98 'Dien Vf

            For i = 6 To 26

                'Neu SLSX > 0 thi

                If WB_CDB.Sheet11.Cells(97, i).Value > 0 Then

                    'Neu SLSX chi vf co du thi

                    If WB_CDB.Sheet11.Cells(97, i).Value Mod Vf > 0 Then 'Tinh so du

                        If (WB_CDB.Sheet11.Cells(97, i).Value \ Vf) * Vf + j - 98 <= WB_CDB.Sheet11.Cells(97, i).Value Then 'Neu sodu < so du

                            WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(97, i).Value \ Vf + 1 'Thi chia lay phan nguyen +1

                        Else 'Cho den khi sodu = so du thi khong cong nua

                            WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(97, i).Value \ Vf

                        End If

                    Else 'Nguoc lai khong du thi chia deu

                        WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(97, i).Value / Vf

                    End If

                End If

            Next i

        Next j

    Else

        WB_CDB.Sheet11.Cells(99, 5) = "Vf1"

            For i = 6 To 26

                    WB_CDB.Sheet11.Cells(99, i) = WB_CDB.Sheet11.Cells(97, i).Value

            Next i

    End If

    'Kiem tra co vuot so form khong neu co thi chia lai size do

    Dim solech As Single

    For i = 6 To 26

        If WB_CDB.Sheet11.Cells(99, i).Value > WB_CDB.Sheet11.Cells(94, i).Value Then

            If WB_CDB.Sheet11.Cells(97, i).Value Mod WB_CDB.Sheet11.Cells(94, i).Value = 0 Then

                Vf = WB_CDB.Sheet11.Cells(97, i).Value / WB_CDB.Sheet11.Cells(94, i).Value

                For j = 99 To 99 + Vf

                    WB_CDB.Sheet11.Cells(j, 5) = "Vf" & j - 98

                    WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(94, i).Value

                Next j

            Else

                Vf = WB_CDB.Sheet11.Cells(97, i).Value \ WB_CDB.Sheet11.Cells(94, i).Value

                For j = 99 To 98 + Vf

                    WB_CDB.Sheet11.Cells(j, 5) = "Vf" & j - 98

                    WB_CDB.Sheet11.Cells(j, i) = WB_CDB.Sheet11.Cells(94, i).Value

                Next j

                    WB_CDB.Sheet11.Cells(j, 5) = "Vf" & j - 98

                    WB_CDB.Sheet11.Cells(99 + Vf, i).Value = WB_CDB.Sheet11.Cells(97, i).Value - Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range(WB_CDB.Sheet11.Cells(99, i), WB_CDB.Sheet11.Cells(98 + Vf, i)))

            End If

        End If

    Next i

    'Tong so form tung vong

    Dim DC_VF As Single

    DC_VF = WB_CDB.Sheet11.Range("E" & Rows.CountLarge).End(xlUp).Row

    For j = 99 To DC_VF

        WB_CDB.Sheet11.Range("AA" & j) = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F" & j & ":Z" & j))

    Next j

    'Xoa bot dong

    If DC_VF > 106 Then

        For j = 101 To DC_VF

            If WB_CDB.Sheet11.Range("AA" & j).Value < WB_CDB.Sheet11.Range("AA99").Value Then

                WB_CDB.Sheet11.Range("E" & j - 1) = "Vf..."

                For i = 6 To 27

                    If WB_CDB.Sheet11.Cells(j - 1, i) > 0 Then WB_CDB.Sheet11.Cells(j - 1, i) = "....."

                Next i

                If j - (DC_VF - 105) >= 101 Then

                    WB_CDB.Sheet11.Range("E" & j - 1 & ":AA" & DC_VF).Copy

                    WB_CDB.Sheet11.Range("E" & j - (DC_VF - 105)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

                Else

                    WB_CDB.Sheet11.Range("E" & DC_VF - (106 - j) & ":AA" & DC_VF).Copy

                    WB_CDB.Sheet11.Range("E" & j).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

                End If

                WB_CDB.Sheet11.Range("E107: AA" & DC_VF).ClearContents

                Exit For

            Else

                WB_CDB.Sheet11.Range("E102") = "Vf..."

                For i = 6 To 27

                    If WB_CDB.Sheet11.Cells(102, i) > 0 Then WB_CDB.Sheet11.Cells(102, i) = "....."

                Next i

                WB_CDB.Sheet11.Range("E" & DC_VF - 3 & ":AA" & DC_VF).Copy

                WB_CDB.Sheet11.Range("E103").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

                WB_CDB.Sheet11.Range("E107: AA" & DC_VF).ClearContents

                Exit For

            End If

        Next j

    End If

    'NOTE KET

        If WB_CDB.Sheet11.Range("AA95").Value = WB_CDB.Sheet11.Range("AA96").Value And WB_CDB.Sheet11.Range("AA95").Value = WB_CDB.Sheet11.Range("AA97").Value Then

                WB_CDB.Sheet11.Range("AB5, AB20, AB35, AB50, AB65, AB80, AB95") = "K" & ChrW(7870) & "T PO M" & ChrW(7898) & "I" 'KET PO MOI

        Else

            If WB_CDB.Sheet11.Range("AA95").Value = WB_CDB.Sheet11.Range("AA96").Value Then

                    WB_CDB.Sheet11.Range("AB5, AB20, AB35, AB50, AB65, AB80, AB95") = "PO M" & ChrW(7898) & "I - K" & ChrW(7870) & "T " & WB_CDB.Sheet11.Range("AA97").Value & "**" 'PO MOI - KET

            ElseIf WB_CDB.Sheet11.Range("AA96").Value = WB_CDB.Sheet11.Range("AA97").Value Then

                    WB_CDB.Sheet11.Range("AB5, AB20, AB35, AB50, AB65, AB80, AB95") = "K" & ChrW(7870) & "T PO" 'KET PO

            Else

                    WB_CDB.Sheet11.Range("AB5, AB20, AB35, AB50, AB65, AB80, AB95") = "K" & ChrW(7870) & "T " & WB_CDB.Sheet11.Range("AA97").Value & "**" 'KET

            End If

        End If

        'To mau & active sheet Lenh San Xuat

         With Target.Interior

            .Pattern = xlSolid

            .PatternColorIndex = xlAutomatic

            .Color = 13434828

            .TintAndShade = 0

            .PatternTintAndShade = 0

        End With

    Else

        Exit Sub

    End If

End If

    WB_CDB.Sheet11.Activate

    WB_CDB.Sheet11.Range("A91").Activate

End Sub



Vỗ tay vỗ tay
Quí Hảo La 11:09 - Sep 08, 2021

Chào bạn ở đây bạn đang dùng trên sheet mà có phải là from đâu

Vỗ tay vỗ tay
Quí Hảo La 12:09 - Sep 08, 2021

Thì trên sheet trong sự kiện đó tôi gọi ra 1 userform ra để tương tác với người dùng

Vỗ tay vỗ tay
Quí Hảo La 15:09 - Sep 08, 2021

Chào bạn câu lệnh gọi from chỉ đơn giản là 

sub goifom
   tenfrom.show
end sub


Vỗ tay vỗ tay
Quí Hảo La 16:09 - Sep 08, 2021

gọi from thì tôi biết rồi nhưng phần sau trong in đậm của code ở phần trên đó tôi chưa giải được nhờ Gitiho hỗ trợ giúp tôi ở phần đó

Xin cảm ơn

Vỗ tay vỗ tay
Quí Hảo La 16:09 - Sep 08, 2021

PA.Show 'Goi userform de nguoi dung lua chon phuong phap tinh

                    'Neu dong hop thoai thi thoat chuong trinh

                    Exit Sub

                    

                    'Click Nut 2 thi dong userform va thuc hien nhung cau lenh duoi

                        For j = 7 To 97 Step 15

                            For i = 6 To 26

                                WB_CDB.Sheet11.Cells(j, i) = Target.Offset(, i + 5).Value

                            Next i

                        Next j

                        WB_CDB.Sheet11.Range("AA7, AA22, AA37, AA52, AA67, AA82, AA97") = Application.WorksheetFunction.Sum(WB_CDB.Sheet11.Range("F7:Z7"))

                    

                    'Click Nut 1 thi dong userform va thuc hien nhung cau lenh duoi

                        If IsNumeric(TiLe) = True Then 'Trong dau () la so ti le thi lam tron

                            For i = 6 To 26

                                If WB_CDB.Sheet11.Cells(5, i).Value > 0 Then

                                    k = k + 1

                                    If Target.Offset(, i + 5).Value > 0 Then

                                        WB_CDB.Sheet11.Cells(7, i) = Application.WorksheetFunction.Floor(Target.Offset(, i + 5).Value, Mid(TiLe, k, 1)) / Mid(TiLe, k, 1) 'chia ra so thung tung size

                                    End If

                                End If



Vỗ tay vỗ tay
Quí Hảo La 00:09 - Sep 10, 2021

Chào bạn với nút bấm nào thì bạn gán cho nó sự kiện đó là xong nhé.

Vỗ tay vỗ tay
Quí Hảo La 15:09 - Sep 15, 2021

gán sao Gitiho tôi chưa hiểu lắm. Ở đoạn code trên nhờ Gitiho điền vào giúp tôi để tôi hiểu hơn

Tôi xin nói lại để Gitiho hiểu rõ hơn là ý của tôi muốn như thế này:

trong code sự kiện Double_Click của sheet1. Khi tôi doubleclick trong sheet 1 thì sẽ hiện lên một userform thông báo cho tôi có 2 comanbutton. Nếu tôi click comanbutton 1 thì biến a trong private sub double_Click, a= 1 còn tôi click comanbutton 2 thì biến a = 2, nếu tôi click vào dấu x đóng userform thì exit sub. 

Gitiho không cần phải xem nội dung của code trên tôi miêu tả vậy cho nó đơn giản, tôi chỉ đang gặp khó khăn ở chỗ lựa chọn của người dùng thôi à

Vỗ tay vỗ tay
Quí Hảo La 16:09 - Sep 15, 2021

1. Khi tôi doubleclick trong sheet 1 thì sẽ hiện lên một userform:

Bạn lập trình sự kiện trong Sheet, cụ thể là sự kiện BeforeDoubleClick.

Trong đoạn code bạn đặt lệnh Userform.Show là được

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    UserForm1.Show
End Sub

2. Nếu tôi click comanbutton 1 thì biến a trong private sub double_Click, a= 1 còn tôi click comanbutton 2 thì biến a = 2, nếu tôi click vào dấu x đóng userform thì exit sub

Cái này bạn phải lập trình trong Userform.

Khi double_click thì biến a = 1, tức là trong sự kiện Userform_Initialize khi userform mở lên sẽ xác định sẵn giá trị a = 1

Private Sub UserForm_Initialize()
Dim a As Long
a = 1
End Sub

Khi click và nút bấm command button thì a thay đổi giá trị = 2 bạn cần lập trình cho nút này

Private Sub CommandButton1_Click()
a = 2
End Sub

Khi bấm vào nút dấu x thì đóng userform (nút dấu x này được hiểu là 1 command button khác)

Private Sub CommandButton2_Click()
Unload Me
End Sub

Câu lệnh là Unload me chứ không phải exit sub nhé, mục đích là đóng Userform hướng dẫn này.

Vỗ tay vỗ tay
Quí Hảo La 21:09 - Sep 15, 2021

cảm ơn gitiho

sau khi biến a có giá trị làm sao tôi sử dụng giá trị a đó trong sub sự kiện double_click, và sau khi unload me sub sự kiện double_click của tôi vẫn chưa exit sub hả Gitiho

Tôi còn vướng chỗ này

Vỗ tay vỗ tay
Quí Hảo La 08:09 - Sep 16, 2021

Chào bạn Unload Me là sự kiện khi bạn click thì nó tự động đóng form bạn nhé 

Vỗ tay vỗ tay
Câu hỏi liên quan
@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông