Mong Các Bác Giúp Sửa Lỗi Nút Bấm (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

mrkhanhvu

Thành viên mới
Tham gia
28/10/10
Bài viết
11
Được thích
1
Thân chào anh chị và các bạn diễn đàn!

Hiện tại tôi đang làm một bảng thống kê xuất xi măng hàng ngày. Khi làm tôi đã tạo hai nút bấm nút bấm thứ nhất nhờ bạn minhthien321 giúp đỡ tôi đã hoàn thành. Vấn đề tôi mong nhận được sự giúp đỡ của các bạn ở nút bấm thứ hai "NHAP" là:
- Sau khi bấm nhập thì copy dữ liệu "A12:G12" vào dòng 15 là dòng đầu tiên trong bảng dữ liệu, hiển thị thông báo dữ liệu đã được nhập vào dòng nào cho tiện theo dõi.
- Khi tắt thông báo thì dữ liệu "A12:G12" cũng được xóa để bắt đầu nhập mới.
- Giả sử dữ liệu vừa copy vào dòng 15 bị sai 1 ô, thì sẽ xóa dòng 15 đi và nhập lại thì dữ liệu nhập lại vẫn copy vào dòng đó.

Rất mong nhận được phản hồi của anh chị và các bạn. Trân trọng!
 

File đính kèm

Bạn copy rồi paste ngang hay dọc vậy? Tôi thấy phải là ngang mới đúng chứ?
 
Upvote 0
Oh! chào bạn minhthien321!
Tôi đang hỏi làm sao copy sang hàng ngang được, tại tôi viết code mà bấm nó thành dọc mới chết chứ.
 
Upvote 0
Oh! chào bạn minhthien321!
Tôi đang hỏi làm sao copy sang hàng ngang được, tại tôi viết code mà bấm nó thành dọc mới chết chứ.

Bạn chỉ cần thay Code nhập của bạn thành như vầy:

PHP:
Sub Nhap()
  Dim Rng As Range
  Set Rng = [A65536].End(xlUp).Offset(1)
  With [A12:G12]
    .Copy: Rng.PasteSpecial 3
    .ClearContents
  End With
  MsgBox "Du Lieu Duoc Nhap Vao Dong " & Rng.Row
End Sub

Tôi khuyên bạn, không nên xóa sau khi paste, biết đâu nó chỉ sai 1 chỗ nào đó thôi cần phải sửa, như vậy bạn sẽ kiểm tra lại việc nhập có đúng hay không. Muốn xóa, tạo một nút riêng. Tôi cũng khuyên bạn, bớt dùng Msgbox đi, đỡ mất công về thời gian. Và thêm một nút chỉnh sửa. Nhưng cho hỏi nếu có dùng nút chỉnh sửa thì khi nhập, tất cả các mã có trùng không? Có nghĩa là có lặp đi lặp lại mã cũ khi nhập không?
 
Upvote 0
Rất hữu ích. Cảm ơn những điều bạn khuyên nha. Nếu mình không xóa thì bỏ lệnh này ".ClearContents" phải không?
Chắc phải bỏ bớt Msgbox đi thôi, mất nhiều thao tác.
Tất cả các mã số này khác nhau hết không trùng nhau bạn ah.
Bạn cho hỏi thêm, cell A12 bao giờ cũng có "LA" đứng trước, liệu có thêm lệnh gì để chỉ phải nhập số thôi không phải nhập LA nữa.
 
Upvote 0
Rất hữu ích. Cảm ơn những điều bạn khuyên nha. Nếu mình không xóa thì bỏ lệnh này ".ClearContents" phải không?
Chắc phải bỏ bớt Msgbox đi thôi, mất nhiều thao tác.
Tất cả các mã số này khác nhau hết không trùng nhau bạn ah.
Bạn cho hỏi thêm, cell A12 bao giờ cũng có "LA" đứng trước, liệu có thêm lệnh gì để chỉ phải nhập số thôi không phải nhập LA nữa.

Thì làm code này đi:

PHP:
Sub Nhap()
  Dim Rng As Range
  Set Rng = [A65536].End(xlUp).Offset(1)
  With Rng
    [A12:G12].Copy: .PasteSpecial 3
    .Value = "LA" & .Value
  End With
End Sub
 
Upvote 0
Cảm ơn bạn minhthien321 rất nhiều! Nhờ bạn giúp mà minh mới hoàn thành được file này. Thanks!
 
Upvote 0
Cảm ơn bạn minhthien321 rất nhiều! Nhờ bạn giúp mà minh mới hoàn thành được file này. Thanks!

Tặng bạn thêm nút chỉnh sửa nè:

PHP:
Sub NhapChinhSua()
  On Error Resume Next
  Dim Ipt As Long, iRow As Long
  iRow = [A65536].End(xlUp).Row
  With Range("A1").Parent.Buttons("BttnSua").Characters
    If .Text = Evaluate("ChinhSua") Then
      Ipt = InputBox("Nhap so hàng can chinh sua", "Chinh Sua", iRow)
      If Ipt = 0 Or Ipt > iRow Then Exit Sub
      [J11] = Ipt
      Range("A" & Ipt, "G" & Ipt).Copy: [A12:G12].PasteSpecial 3
      .Text = Evaluate("NhapSua")
      With Range("A1").Parent.Buttons("BttnNhap")
        .Font.ColorIndex = 47
        .Enabled = False
      End With
    Else
      [A12:G12].Copy: Range("A" & [J11]).PasteSpecial 3: [A12:G12].ClearContents
      .Text = Evaluate("ChinhSua")
      With Range("A1").Parent.Buttons("BttnNhap")
        .Font.ColorIndex = 3
        .Enabled = True
      End With
    End If
  End With
End Sub

Tôi cũng chỉnh sửa thêm nút lệnh OK trong Form:

PHP:
Private Sub cmdok_Click()
  If Me.txttaongay = "" Then
    MsgBox "BAN CHUA CHON NGAY!", , "THONG BAO!"
  Else
    If WsExit("SHEETBASE (2)") = True Or WsExit(txttaongay) = True Then
      MsgBox "NGAY NAY DA DUOC TAO! BAN PHAI CHON NGAY KHAC!", , "THÔNG BÁO!"
    Else
      Application.ScreenUpdating = False
      Sheets("SHEETBASE").Copy after:=Sheets(Sheets.Count)
      Sheets("SHEETBASE (2)").Name = txttaongay
      With Sheets(txttaongay.Value)
        Dim iRow As Long
        iRow = .[A65536].End(xlUp).Row
        .[A2] = txttaongay
        Range("A15:G" & iRow).ClearContents
      End With
      Unload Me
    End If
  End If
End Sub

Và chắc bạn chẳng biết cái Evaluate("ChinhSua") là cái gì nhỉ? Vào Name (Ctrl+F3) sẽ biết!

Một số lưu ý khi sử dụng File:

Nút NHẬP: Nếu A2 không có gì thì không nhập gì cả! Ngược lại sẽ nhập vào ô cuối cùng có chứa dữ liệu của cột A

Nút XÓA: Sẽ xóa dữ liệu ở A12:G12

Nút CHỈNH SỬA:
Khi bấm vào nút này, sẽ hiện lên một Inputbox yêu cầu nhập vị trí hàng cần chỉnh sửa, nếu không nhập gì hoặc cancel thì không làm gì cả.
Nếu nhập vào số hàng cần chỉnh sửa, thì nó sẽ copy toàn bộ hàng đó lên trên A12:G12, bạn chỉnh sửa tại đây. Lúc này nút CHỈNH SỬA chuyển thành NHẬP CHỈNH SỬA.
Sau khi sửa tại A12:G12 xong, bấm vào nút NHẬP CHỈNH SỬA, thì hàng cần chỉnh sửa sẽ được điều chỉnh.
Lưu ý: Khi bấm vào nút CHỈNH SỬA, nếu có số hàng, thì nút NHẬP sẽ bị "liệt", màu đỏ thành màu xanh xám.
Chỉ khi bấm vào nút NHẬP CHỈNH SỬA xong để nút này chuyển thành CHỈNH SỬA thì nút NHẬP mới hoạt động lại.

P/s: Tại sao tôi dùng nút lệnh trên sheet thuộc Form Controls mà không phải là ActiveX Controls? Bởi vì nó có thể viết với tiếng Việt; mặt khác quan trọng hơn là nếu dùng ActiveX Controls thì chắc chắn trong sheet sẽ phải chứa macro, và mỗi lần nó copy thì macro sẽ theo sheet mới, như vậy dung lượng sẽ tăng lên, tôi nghĩ là vậy.

Cái điệu này chắc bạn phải "Two Dream" với mọi người như TungNguyen_Kt học VBA quá! Khà khà khà (giọng điệu của Sư phụ PTM)
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom