Sữa lỗi code tự động nhập ngày

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Em tạo code sau với mục đích
- Khi nhập số hóa đơn vào cột H, sau đó em sẽ chuyển phát nhanh hóa đơn này đi
--> thì tại cột N sẽ ghi lại ngày chuyển hóa đơn nhưng bị lỗi trường hợp sau
--------
Giả sử em tại H1 em gõ 0011 --> tại cột N1 sẽ xuất hiện 25/12/08
------------ H10 em gõ 0012 --> tại cột N10-----------25/12/08

==> Nhưng bây giờ em nhập vào ô H2 ...H9 thì ngày ở cột N không xuất hiện nữa
Lỗi là do er giờ đây bằng 10 mất rồi

Các anh sửa giúp em với

Private Sub Worksheet_Change(ByVal Target As Range)
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Dim er As Long
er = [H65000].End(xlUp).Row
If Not Intersect(Range("H" & er), Target) Is Nothing Then
If Range("H" & er) <> "" Then
Range("N" & er) = Now: Range("N" & er).NumberFormat = "dd/mm/yy"
End If
End If
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic

End With
End Sub
 
.............==> Nhưng bây giờ em nhập vào ô H2 ...H9 thì ngày ở cột N không xuất hiện nữa
Lỗi là do er giờ đây bằng 10 mất rồi
Các anh sửa giúp em với
Bạn sửa đoạn code này lại như sau:
[highlight=vb]
Private Sub Worksheet_Change(ByVal Target As Range)
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
Dim eR As Long
eR = [H65000].End(xlUp).Row
If Not Intersect(Range("H1:H" & eR), Target) Is Nothing Then ''<==== Sửa chỗ này
If Range("H" & eR) <> "" Then
Range("N" & eR) = Now: Range("N" & eR).NumberFormat = "dd/mm/yy"
End If
End If
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
[/highlight]
 
Upvote 0
Sao không làm vầy cho gọn nhỉ:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Range([H1], [H65000].End(xlUp))
    If Not Intersect(.Cells, Target) Is Nothing Then
      If Target <> "" Then
        Target.Offset(, 6) = Now
        Target.Offset(, 6).NumberFormat = "dd/mm/yy"
      End If
    End If
  End With
End Sub
Khỏi khai báo bất cứ biến nào ---> Nên bám vào Target
Để ý thêm: Cho Application.ScreenUpdating vào càng làm cho màn hình giật thêm
 
Lần chỉnh sửa cuối:
Upvote 0
Sao không làm vầy cho gọn nhỉ:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Range([H1], [H65000].End(xlUp))
    If Not Intersect(.Cells, Target) Is Nothing Then
      If Target <> "" Then
        Target.Offset(, 6) = Now
        Target.Offset(, 6).NumberFormat = "dd/mm/yy"
      End If
    End If
  End With
End Sub
Khỏi khai báo bất cứ biến nào ---> Nên bám vào Target
Để ý thêm: Cho Application.ScreenUpdating vào càng làm cho màn hình giật thêm

Cám ơn Anh NDU code rất ngắn gọn, và hay. Em chỉ mới biết một tí tẹo bằng đầu móng tay về VBA nên em hỏi thêm chút nhé
Đoạn code này
With Range([H1], [H65000].End(xlUp)) có phải bằng với
with range([H1:H]&[H65000].End(xlUp).row)
Phần bôi đậm đó em chưa hiểu lắm

Và đoạn này nữa
If Not Intersect(.Cells, Target) Is Nothing Then

Em chỉ có thể áp dụng máy móc .cells này nhưng chưa hiểu lắm
Có phải là tất cả những cell nằm trong vùng H1 đến [H65000].end(xlup)???

Anh giúp vài lời nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Cach xác định Range theo kiểu
PHP:
With Range([H1:H]&[H65000].End(xlUp).row)
là cách thông thường ta vẩn làm
Còn cách xác định Range theo kiểu
PHP:
With Range(Range1, Range2)
thì tương đương với việc bạn chọn 1 cell, bấm Shift rồi chọn cell thứ 2 ---> Range tạo thành là hình chử nhật bao bọc 2 cell chọn
2 cách vẩn cho kết quả như nhau thôi (chỉ khác nhau về phương thức)
Còn đoạn này:
PHP:
If Not Intersect(.Cells, Target) Is Nothing Then
.Cells ở đây là đang nói về Range([H1], [H65000].End(xlUp)) ---> Do ta có With ở trên ---> Nói nôm na là: "Các cells thuộc Range Range([H1], [H65000].End(xlUp))"
Vậy cách mà tôi viết sẽ tương đương với
PHP:
Set Rng = Range([H1], [H65000].End(xlUp))
If Not Intersect(Rng, Target) Is Nothing Then
Còn vụ [H65000].End(xlUp) thì tương đương với việc ta đang ở cell H65000, bấm Ctrl + mũi tên lên
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  With Range([F2], [F20000].End(xlUp))
    If Not Intersect(.Cells, Target) Is Nothing Then
      If Target <> "" Then
        Target.Offset(, 3) = Now: .Offset(, 3).NumberFormat = "dd/mm/yy"
        Target.Offset(, 2) = "TM"
        'Target.Offset(, 3).NumberFormat = "dd/mm/yy"
      End If
    End If
  End With
End Sub

Kính gửi các Anh
Đoạn code trên là em được viết giúp dùng để cập nhật ngày và TM tự động khi ta gõ số Hoá đơn vào. Em muốn sửa lại một chút sao cho
- Nếu tại vị trí target(,-1)' sang trái một cột. bắt đầu bằng "
+ Canon*
+ TOHOKU*
+ TOYOTA*

Thì ngày và TM sẽ ko cập nhật khi target <>""

Xin cám ơn ạ
 
Upvote 0
Web KT

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

Back
Top Bottom