chọn checkbox1 thì lưu vào sheet4, chọn checkbox2 thì lưu vào sheet5

Liên hệ QC

NguyenthiH

Thành viên mới đăng ký
Tham gia
11/12/16
Bài viết
965
Được thích
175
Giới tính
Nữ
Chào các anh chị, em có tạo form nhập liệu, trên form có 2 checkbox(1 và 2) và nút lưu.
Em muốn khi chọn checkbox1 và nhấn nút lưu thì dữ liệu trên form sẽ lưu vào sheet4, và khi chọn checkbox2 và nhấn nút lưu thì dữ liệu trên form sẽ lưu vào sheet5.
Hai sheet4 và sheet5 có cấu trúc giống nhau.
Code nút lưu:
Mã:
Private Sub cb_Luu_Click()
Dim i As Integer, N As Long
    If tb_Ngay = "" Or tb_SP = "" Then MsgBox ("Ban chua nhap ngay hoac so phieu"), vbExclamation: Exit Sub
    If ListBox1.ListCount = 0 Then MsgBox ("ban chua cap nhat Noi dung  vao Listbox"), vbExclamation: Exit Sub

Application.ScreenUpdating = False 'giup code chay. nhanh hon
    irow = Sheet4.Cells(Rows.count, "A").End(xlUp).Offset(1, 0).Row 'xac dinh row cuoi cung` chua' du~ lieu

    For i = 0 To ListBox1.ListCount - 1
        Sheet4.Cells(irow + N, 1) = irow + N - 3
        Sheet4.Cells(irow + N, 2) = CDate(tb_Ngay)
        Sheet4.Cells(irow + N, 3) = UCase(tb_SP)
        Sheet4.Cells(irow + N, 4) = UCase(tb_NN)
        Sheet4.Cells(irow + N, 5) = "'" & UCase(tb_DH)
        With ListBox1
            Sheet4.Cells(irow + N, 5) = "'" & UCase(.List(i, 1))         'don hang
            Sheet4.Cells(irow + N, 6) = "'" & UCase(.List(i, 2))         'ma vai
            Sheet4.Cells(irow + N, 7) = .List(i, 3)                      'loai vai
            Sheet4.Cells(irow + N, 8) = .List(i, 4)                      'mau vai
            Sheet4.Cells(irow + N, 9) = .List(i, 5)                      'DVT
            Sheet4.Cells(irow + N, 10) = CDbl(.List(i, 6))               'so luong xuat
            Sheet4.Cells(irow + N, 11) = .List(i, 7)
            Sheet4.Cells(irow + N, 12) = .List(i, 8)                'ghi chu
        End With
        N = N + 1
    Next
    Sheet4.Cells(irow, 10).Resize(N).NumberFormat = "#,##0.00"
    Sheet4.Cells(irow, 1).Resize(N, 12).Borders.LineStyle = 1
    Sheet4.Cells(irow, 1).Resize(N, 12).Borders.ThemeColor = 5
    tb_Ngay = "": tb_SP = "": tb_NN = "":  tb_DH = "": tb_MaVai = "": tb_Nhom = ""
    tb_LoaiVai = "": cb_MauVai = "": tb_DVT = "": tb_SLX = "":  tb_GhiChu = ""
ListBox1.Clear
Application.ScreenUpdating = True
MsgBox ("cap nhat xong"), , "GPE"
tb_Ngay.SetFocus
End Sub
Em nhờ các anh chị viết dùm code để thực hiện điều đó ạ.
Bài đã được tự động gộp:

Hình form:
218782
 
Lần chỉnh sửa cuối:
Góp ý: đặt biến wSh As Worksheet, thêm điều kiện của CheckBox để gán wSh.Name thành tên sheet cần dán dữ liệu.
 
Upvote 0
Anh @leonguyenz viết giúp em code đi ạ.
Em chưa rành code(toàn nhờ không à)
 
Upvote 0
Anh @leonguyenz viết giúp em code đi ạ.
Em chưa rành code(toàn nhờ không à)
Tham khảo code và file giả lập sau:
218785
Mã:
Private Sub CommandButton1_Click()
Dim wSh As Worksheet
With ThisWorkbook
    Set wSh = Sheets(IIf(CheckBox1.Value, _
        CheckBox1.Caption, CheckBox2.Caption))
End With

MsgBox wSh.Name

If TextBox1.Text <> "" Then
    wSh.Range("A2") = TextBox1.Text
End If
End Sub

Private Sub CommandButton2_Click()
    Unload Me
End Sub

Private Sub CheckBox1_Click()
    CheckBox1.Value = IIf(CheckBox1.Value, False, True)
    CheckBox2.Value = IIf(CheckBox1.Value, False, True)
End Sub

Private Sub CheckBox2_Click()
    CheckBox2.Value = IIf(CheckBox2.Value, False, True)
    CheckBox1.Value = IIf(CheckBox2.Value, False, True)
End Sub

Private Sub UserForm_Initialize()
    CheckBox1.Value = True
    CheckBox2.Value = False
End Sub
 

File đính kèm

Upvote 0
Chào các anh chị, em có tạo form nhập liệu, trên form có 2 checkbox(1 và 2) và nút lưu.
Em muốn khi chọn checkbox1 và nhấn nút lưu thì dữ liệu trên form sẽ lưu vào sheet4,
và khi chọn checkbox2 và nhấn nút lưu thì dữ liệu trên form sẽ lưu vào sheet5.
Sao không dùng 1 checkbox như: Chọn thì lưu sheet4, không chọn thì lưu sheet5 ?

Hoặc dùng 2 radio button , chọn cái này thì cái còn lại tự tắt.
 
Upvote 0
Em mò theo cách của anh @leonguyenz còn chưa ra.
Vậy anh @phuocam có thể làm cho em cách của anh được không?
 
Upvote 0
Tập làm nghề thầy bói:
PHP:
Private Sub cb_Luu_Click()
Dim I As Integer, N As Long:                                                    Dim Sh As Worksheet
If tb_Ngay = "" Or tb_SP = "" Then
    MsgBox ("Ban chua nhap ngay hoac so phieu"), vbExclamation:                 Exit Sub
End If
If ListBox1.ListCount = 0 Then
    MsgBox ("ban chua cap nhat Noi dung  vao Listbox"), vbExclamation:          Exit Sub
End If
Application.ScreenUpdating = False 'Giup Code Chay. Nhanh Hon  '

If Me!CheckBox1 Then
    Set Sh = ThisWorkbook.Worksheets("Sheet4")
    iRow = Sh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row    'Xác Dinh Row Cuoi Cùng` Có Du Lieu '
Else
    Set Sh = ThisWorkbook.Worksheets("Sheet5")
   iRow = Sh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row    'Xác Dinh Row Cuoi Cùng` Có Du Lieu '
End If
For I = 0 To ListBox1.ListCount - 1
    Sh.Cells(iRow + N, 1) = iRow + N - 3:         Sh.Cells(iRow + N, 2) = CDate(tb_Ngay)
    Sh.Cells(iRow + N, 3) = UCase(tb_SP):         Sh.Cells(iRow + N, 4) = UCase(tb_NN)
    Sh.Cells(iRow + N, 5) = "'" & UCase(tb_DH)
    With ListBox1
        Sh.Cells(iRow + N, 5) = "'" & UCase(.List(I, 1)):    Sh.Cells(iRow + N, 6) = "'" & UCase(.List(I, 2))
        Sh.Cells(iRow + N, 7) = .List(I, 3):                 Sh.Cells(iRow + N, 8) = .List(I, 4)
        Sh.Cells(iRow + N, 9) = .List(I, 5):                 Sh.Cells(iRow + N, 10) = CDbl(.List(I, 6))
        Sh.Cells(iRow + N, 11) = .List(I, 7):                Sh.Cells(iRow + N, 12) = .List(I, 8)
    End With
    N = N + 1
Next I
Sh.Cells(iRow, 10).Resize(N).NumberFormat = "#,##0.00"
Sh.Cells(iRow, 1).Resize(N, 12).Borders.LineStyle = 1
Sh.Cells(iRow, 1).Resize(N, 12).Borders.ThemeColor = 5
tb_Ngay = "":      tb_SP = "":         tb_NN = "":     tb_DH = "":     tb_MaVai = "":      tb_Nhom = ""
tb_LoaiVai = "":    cb_MauVai = "":   tb_DVT = "":    tb_SLX = "":    tb_GhiChu = ""
ListBox1.Clear
Application.ScreenUpdating = True
MsgBox ("Câp Nha^t Xong"), , "GPE.COM Xin Thông Báo!"
Me!tb_Ngay.SetFocus
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tập làm nghề thầy bói:
PHP:
Private Sub cb_Luu_Click()
Dim I As Integer, N As Long:                                                    Dim Sh As Worksheet
If tb_Ngay = "" Or tb_SP = "" Then
    MsgBox ("Ban chua nhap ngay hoac so phieu"), vbExclamation:                 Exit Sub
End If
If ListBox1.ListCount = 0 Then
    MsgBox ("ban chua cap nhat Noi dung  vao Listbox"), vbExclamation:          Exit Sub
End If
Application.ScreenUpdating = False 'Giup Code Chay. Nhanh Hon  '
iRow = sheet4.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row    'Xác Dinh Row Cuoi Cùng` Có Du Lieu '
If Me!CheckBox1 Then
    Set Sh = ThisWorkbook.Worksheets("Sheet4")
Else
    Set Sh = ThisWorkbook.Worksheets("Sheet5")
End If
For I = 0 To ListBox1.ListCount - 1
    Sh.Cells(iRow + N, 1) = iRow + N - 3:      Sh.Cells(iRow + N, 2) = CDate(tb_Ngay)
    Sh.Cells(iRow + N, 3) = UCase(tb_SP):     Sh.Cells(iRow + N, 4) = UCase(tb_NN)
    Sh.Cells(iRow + N, 5) = "'" & UCase(tb_DH)
    With ListBox1
        Sh.Cells(iRow + N, 5) = "'" & UCase(.List(I, 1)):    Sh.Cells(iRow + N, 6) = "'" & UCase(.List(I, 2))
        Sh.Cells(iRow + N, 7) = .List(I, 3):                 Sh.Cells(iRow + N, 8) = .List(I, 4)
        Sh.Cells(iRow + N, 9) = .List(I, 5):                 Sh.Cells(iRow + N, 10) = CDbl(.List(I, 6))
        Sh.Cells(iRow + N, 11) = .List(I, 7):                Sh.Cells(iRow + N, 12) = .List(I, 8)
    End With
    N = N + 1
Next I
Sh.Cells(iRow, 10).Resize(N).NumberFormat = "#,##0.00"
Sh.Cells(iRow, 1).Resize(N, 12).Borders.LineStyle = 1
Sh.Cells(iRow, 1).Resize(N, 12).Borders.ThemeColor = 5
tb_Ngay = "":      tb_SP = "":         tb_NN = "":     tb_DH = "":     tb_MaVai = "":      tb_Nhom = ""
tb_LoaiVai = "": cb_MauVai = "":   tb_DVT = "":    tb_SLX = "":    tb_GhiChu = ""
ListBox1.Clear
Application.ScreenUpdating = True
MsgBox ("Câp Nha^t Xong"), , "GPE.COM Xin Thông Báo!"
Me!tb_Ngay.SetFocus
End Sub
Dấu chấm than ( ! ) có nghĩa là gì vậy bác?
218793
 
Upvote 0
Đoán thử:
Mã:
Private Sub cb_Luu_Click()
Dim wSh As Worksheet
With ThisWorkbook
    Set wSh = Sheets(IIf(CheckBox1.Value, _
        "Sheet4", "Sheet5"))
End With

Dim i As Integer, N As Long
    If tb_Ngay = "" Or tb_SP = "" Then MsgBox ("Ban chua nhap ngay hoac so phieu"), vbExclamation: Exit Sub
    If ListBox1.ListCount = 0 Then MsgBox ("ban chua cap nhat Noi dung  vao Listbox"), vbExclamation: Exit Sub

Application.ScreenUpdating = False 'giup code chay. nhanh hon
    irow = wSh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row 'xac dinh row cuoi cung` chua' du~ lieu

    For i = 0 To ListBox1.ListCount - 1
        wSh.Cells(irow + N, 1) = irow + N - 3
        wSh.Cells(irow + N, 2) = CDate(tb_Ngay)
        wSh.Cells(irow + N, 3) = UCase(tb_SP)
        wSh.Cells(irow + N, 4) = UCase(tb_NN)
        wSh.Cells(irow + N, 5) = "'" & UCase(tb_DH)
        With ListBox1
            wSh.Cells(irow + N, 5) = "'" & UCase(.List(i, 1))         'don hang
            wSh.Cells(irow + N, 6) = "'" & UCase(.List(i, 2))         'ma vai
            wSh.Cells(irow + N, 7) = .List(i, 3)                      'loai vai
            wSh.Cells(irow + N, 8) = .List(i, 4)                      'mau vai
            wSh.Cells(irow + N, 9) = .List(i, 5)                      'DVT
            wSh.Cells(irow + N, 10) = CDbl(.List(i, 6))               'so luong xuat
            wSh.Cells(irow + N, 11) = .List(i, 7)
            wSh.Cells(irow + N, 12) = .List(i, 8)                'ghi chu
        End With
        N = N + 1
    Next
    wSh.Cells(irow, 10).Resize(N).NumberFormat = "#,##0.00"
    wSh.Cells(irow, 1).Resize(N, 12).Borders.LineStyle = 1
    wSh.Cells(irow, 1).Resize(N, 12).Borders.ThemeColor = 5
    tb_Ngay = "": tb_SP = "": tb_NN = "":  tb_DH = "": tb_MaVai = "": tb_Nhom = ""
    tb_LoaiVai = "": cb_MauVai = "": tb_DVT = "": tb_SLX = "":  tb_GhiChu = ""
ListBox1.Clear
Application.ScreenUpdating = True
MsgBox ("cap nhat xong"), , "GPE"
tb_Ngay.SetFocus
End Sub
2 CheckBox nên dùng thêm các đoạn code sau:
Mã:
Private Sub CheckBox1_Click()
    CheckBox1.Value = IIf(CheckBox1.Value, False, True)
    CheckBox2.Value = IIf(CheckBox1.Value, False, True)
End Sub

Private Sub CheckBox2_Click()
    CheckBox2.Value = IIf(CheckBox2.Value, False, True)
    CheckBox1.Value = IIf(CheckBox2.Value, False, True)
End Sub
Thêm đoạn sau vào UserForm_Initialize
Mã:
    CheckBox1.Value = True
    CheckBox2.Value = False
 
Upvote 0
Cám ơn các anh rất nhiều.
Em đang Test.
 
Upvote 0
Trên user_form vẽ 2 OptionButton
Code cho module
PHP:
Function SheetCodeName(ByVal sCodeName As String, Optional wb As Workbook) As Worksheet
    If wb Is Nothing Then Set wb = ThisWorkbook
    Set SheetCodeName = wb.Sheets(wb.VBProject.VBComponents(sCodeName).Properties("Index"))
End Function

Public Sub gan_du_lieu(ByVal code_name As String)
    Dim ws As Worksheet
    Dim iRow As Long
    Set ws = SheetCodeName(code_name)
    With ws
        iRow = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Row
        '.. code dang lam '
        .Range("A1").Value = "Gan du lieu vao " & code_name
        .Select
    End With
    Set ws = Nothing
End Sub
Code cho user_form
PHP:
Option Explicit

Const sht4 = "Sheet4" 'code name cua sheet4'
Const sht5 = "Sheet5" 'code name cua sheet5'
Private ws_select As String

Private Sub CommandButton1_Click()
    Call gan_du_lieu(ws_select)
End Sub

Private Sub OptionButton1_Click()
    If Me.OptionButton1.Value = True Then
        ws_select = sht4
    End If
End Sub

Private Sub OptionButton2_Click()
    If Me.OptionButton2.Value = True Then
        ws_select = sht5
    End If
End Sub

Private Sub UserForm_Initialize()
    Me.OptionButton1.Caption = sht4
    Me.OptionButton2.Caption = sht5
    Me.OptionButton1.Value = True
    ws_select = sht4
End Sub
 

File đính kèm

Upvote 0
Em Test thì code của anh @leonguyenz lỗi vàng dòng:
Mã:
Set wSh = Sheets(IIf(CheckBox1.Value, _
        "Sheet4", "Sheet5"))
code của bác SA_DQ thì lỗi ngay dòng:
Mã:
Set Sh = ThisWorkbook.Worksheets("Sheet5")
 
Upvote 0
code của bác SA_DQ thì lỗi ngay dòng:
Code:Copy.
Set Sh = ThisWorkbook.Worksheets("Sheet5")
Thì đổi thử lại là Set Sh =Sheet5 xem sao; chuyện này là tên trang tính tương ứng cần bỏ vô đó mà!
 
Upvote 0
file của anh @befaint thì lại lỗi trong module, dòng:
Mã:
Set SheetCodeName = wb.Sheets(wb.VBProject.VBComponents(sCodeName).Properties("Index"))
Mong các anh xem giúp.
 
Upvote 0
cái này là em chạy ngay file của anh @befaint luôn đó, và xảy ra lỗi
218798
 
Upvote 0
Em Test thì code của anh @leonguyenz lỗi vàng dòng:
Mã:
Set wSh = Sheets(IIf(CheckBox1.Value, _
        "Sheet4", "Sheet5"))
code của bác SA_DQ thì lỗi ngay dòng:
Mã:
Set Sh = ThisWorkbook.Worksheets("Sheet5")
Sửa đoạn này:
Mã:
Set wSh = Sheets(IIf(CheckBox1.Value, _
        "abc1", "abc2"))
 
Upvote 0
Em làm theo Bác @SA_DQ chỉ thì được rồi ạ.
Bài đã được tự động gộp:

file của anh @befaint thì lại lỗi trong module, dòng:
Mã:Sao chép.
Set SheetCodeName = wb.Sheets(wb.VBProject.VBComponents(sCodeName).Properties("Index"))
Mong các anh xem giúp.
anh @leonguyenz, anh lại trích câu em nói lỗi của file anh @befaint , nên em đưa hình của file anh @befaint , chứ file em không có abc1, abc2
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom