Giúp dùm VB code để tự động cập nhật row

  • Thread starter Thread starter izlove
  • Ngày gửi Ngày gửi
Liên hệ QC

izlove

Thành viên mới
Tham gia
5/8/07
Bài viết
9
Được thích
0
Giả sử em có ví dụ được gửi kèm theo file sau, nhờ các bác giúp dùm em cái VB code với các yêu cầu sau:
- Tổng số hóa đơn theo ví dụ là 16, khi thay đổi số này thì ở phần dưới số thứ tự tự động cập nhật.
- Dữ liệu trong các cột S1 và S2 tự động xóa để nhập lại.
- Các format không thay đổi.
- Riêng phần ghi chú luôn nằm phía dưới của bảng kê tương tự vị trí trên.
Mong các bác bỏ thời gian giúp dùm em đoạn code này, em xin cám ơn và vote cho các bác. Thanks nhiều lắm! }}}}}
 

File đính kèm

Lần chỉnh sửa cuối:
Giả sử em có ví dụ được gửi kèm theo file sau, nhờ các bác giúp dùm em cái VB code với các yêu cầu sau:
- Tổng số hóa đơn theo ví dụ là 16, khi thay đổi số này thì ở phần dưới số thứ tự tự động cập nhật.
- Dữ liệu trong các cột S1 và S2 tự động xóa để nhập lại.
- Các format không thay đổi.
- Riêng phần ghi chú luôn nằm phía dưới của bảng kê tương tự vị trí trên.
Mong các bác bỏ thời gian giúp dùm em đoạn code này, em xin cám ơn và vote cho các bác. Thanks nhiều lắm! }}}}}
Nhấp đúp vào sheet1 và chép code này vào
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address = "$C$2" Then
    sodong = Range("C2") + 4
    Range("A5:A20").ClearContents
    Range("B5:C20").ClearContents
    Range("A5:A" & sodong).FormulaR1C1 = "=ROW()-4"
End If
End Sub
 
Upvote 0
Nhấp đúp vào sheet1 và chép code này vào
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Address = "$C$2" Then
    sodong = Range("C2") + 4
    Range("A5:A20").ClearContents
    Range("B5:C20").ClearContents
    Range("A5:A" & sodong).FormulaR1C1 = "=ROW()-4"
End If
End Sub

Xin lỗi, mình chưa rõ ý của bạn, bạn nói nhấp đúp rồi chép vào là chép vào đâu?
Mong bạn nói rõ hơn giúp mình. Thanks nghen!
 
Upvote 0
Giả sử em có ví dụ được gửi kèm theo file sau, nhờ các bác giúp dùm em cái VB code với các yêu cầu sau: - Tổng số hóa đơn theo ví dụ là 16, khi thay đổi số này thì ở phần dưới số thứ tự tự động cập nhật. - Dữ liệu trong các cột S1 và S2 tự động xóa để nhập lại. - Các format không thay đổi. - Riêng phần ghi chú luôn nằm phía dưới của bảng kê tương tự vị trí trên. Mong các bác bỏ thời gian giúp dùm em đoạn code này, em xin cám ơn và vote cho các bác. Thanks nhiều lắm! }}}}}
Bạn xem file nhé! (Thử thay đổi số hóa đơn xem)
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn xem file nhé! (Thử thay đổi số hóa đơn xem)

Olala, được rồi, cám ơn thunghi đã giúp mình, cũng cám ơn bạn boong đóng góp nhé. Code của bạn boong giúp mình đúng là cái mình cần. Chân thành cám ơn sự giúp đỡ của hai bạn, rất mong được sự giúp đỡ của các bạn nữa vì mình còn "non tay" lắm. Mình đã vote cho cả 2 bạn rồi đó. Xin cám ơn lần nữa nghen!
 
Upvote 0
Chưa hẳn là hoàn thành nhưng còn 1 chút vướng mắt không biết cách gỡ! Không biết các bác có cách nào viết dùm hàm SUM cho cột B và C không? Em tìm hoàn nhưng vẫn không ra!
Mã:
[COLOR=green]Private[/COLOR] [COLOR=blue]Sub Worksheet_[/COLOR][COLOR=blue]Change[/COLOR][COLOR=green]([/COLOR][COLOR=blue]ByVal Target[/COLOR] [COLOR=green]As[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green])[/COLOR] [COLOR=blue]Dim a1, a2[/COLOR] [COLOR=green]As[/COLOR] [COLOR=blue]String[/COLOR] [COLOR=green]If[/COLOR] [COLOR=blue]Target.Address[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"$C$2"[/COLOR][COLOR=blue] Then[/COLOR]     [COLOR=blue]Er[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A5"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].End[/COLOR][COLOR=green]([/COLOR][COLOR=blue]xlDown[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Row[/COLOR]     [COLOR=blue]sodong[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"C2"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Value[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR]     [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A5:D"[/COLOR] [COLOR=green]&[/COLOR] [COLOR=blue]Er - 1[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Delete Shift[/COLOR]:[COLOR=green]=[/COLOR][COLOR=blue]xlUp[/COLOR]     [COLOR=green]For [/COLOR][COLOR=blue]iR[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]1 To Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"C2"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Value[/COLOR]         [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A"[/COLOR] [COLOR=blue]& iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].EntireRow.Insert[/COLOR]         [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A" [/COLOR][COLOR=blue]& iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=ROW()-4"[/COLOR]         [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"D" [/COLOR][COLOR=green]&[/COLOR] [COLOR=blue]iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=Sum(RC[-1]:RC[-2])"[/COLOR]     [COLOR=blue]Next iR[/COLOR]     [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"D"[/COLOR] [COLOR=green]&[/COLOR] [COLOR=blue]sodong + 1[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=Sum(RC[-1]:RC[-2])"[/COLOR]     [COLOR=green]'a1 = "=sum(B" & sodong & ":B5)"[/COLOR] [COLOR=green]   'a2 = "=sum(C" & sodong & ":C5)"[/COLOR] [COLOR=green]   'Range("B" & sodong + 1).FormulaR1C1 = Evaluate(a1)[/COLOR] [COLOR=green]   'Range("C" & sodong + 1).FormulaR1C1 = Evaluate(a2)[/COLOR] [COLOR=blue]End[/COLOR] [COLOR=green]If[/COLOR] [COLOR=blue]End Sub[/COLOR]
Em dùng Evaluate nhưng sao không có kết quả nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
Chưa hẳn là hoàn thành nhưng còn 1 chút vướng mắt không biết cách gỡ! Không biết các bác có cách nào viết dùm hàm SUM cho cột B và C không? Em tìm hoàn nhưng vẫn không ra!
Mã:
[COLOR=green]Private[/COLOR] [COLOR=blue]Sub Worksheet_[/COLOR][COLOR=blue]Change[/COLOR][COLOR=green]([/COLOR][COLOR=blue]ByVal Target[/COLOR] [COLOR=green]As[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green])[/COLOR]
[COLOR=blue]Dim a1, a2[/COLOR] [COLOR=green]As[/COLOR] [COLOR=blue]String[/COLOR]
[COLOR=green]If[/COLOR] [COLOR=blue]Target.Address[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"$C$2"[/COLOR][COLOR=blue] Then[/COLOR]
    [COLOR=blue]Er[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A5"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].End[/COLOR][COLOR=green]([/COLOR][COLOR=blue]xlDown[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Row[/COLOR]
    [COLOR=blue]sodong[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"C2"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Value[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR]
    [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A5:D"[/COLOR] [COLOR=green]&[/COLOR] [COLOR=blue]Er - 1[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Delete Shift[/COLOR]:[COLOR=green]=[/COLOR][COLOR=blue]xlUp[/COLOR]
    [COLOR=green]For [/COLOR][COLOR=blue]iR[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]1 To Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"C2"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Value[/COLOR]
        [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A"[/COLOR] [COLOR=blue]& iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].EntireRow.Insert[/COLOR]
        [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A" [/COLOR][COLOR=blue]& iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=ROW()-4"[/COLOR]
        [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"D" [/COLOR][COLOR=green]&[/COLOR] [COLOR=blue]iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=Sum(RC[-1]:RC[-2])"[/COLOR]
    [COLOR=blue]Next iR[/COLOR]
    [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"D"[/COLOR] [COLOR=green]&[/COLOR] [COLOR=blue]sodong + 1[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=Sum(RC[-1]:RC[-2])"[/COLOR]
    [COLOR=green]'a1 = "=sum(B" & sodong & ":B5)"[/COLOR]
[COLOR=green]   'a2 = "=sum(C" & sodong & ":C5)"[/COLOR]
[COLOR=green]   'Range("B" & sodong + 1).FormulaR1C1 = Evaluate(a1)[/COLOR]
[COLOR=green]   'Range("C" & sodong + 1).FormulaR1C1 = Evaluate(a2)[/COLOR]
[COLOR=blue]End[/COLOR] [COLOR=green]If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Em dùng Evaluate nhưng sao không có kết quả nhỉ?
Thêm vào câu
PHP:
    Range("B" & sodong + 1).FormulaR1C1 = "=Sum(R[-1]C:R5C)"
    Range("C" & sodong + 1).FormulaR1C1 = "=Sum(R[-1]C:R5C)"
Sau câu:
Range("D" & sodong + 1).FormulaR1C1 = "=Sum(RC[-1]:RC[-2])"
 
Upvote 0
Chưa hẳn là hoàn thành nhưng còn 1 chút vướng mắt không biết cách gỡ! Không biết các bác có cách nào viết dùm hàm SUM cho cột B và C không? Em tìm hoàn nhưng vẫn không ra!
Mã:
[COLOR=green]Private[/COLOR] [COLOR=blue]Sub Worksheet_[/COLOR][COLOR=blue]Change[/COLOR][COLOR=green]([/COLOR][COLOR=blue]ByVal Target[/COLOR] [COLOR=green]As[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green])[/COLOR]
[COLOR=blue]Dim a1, a2[/COLOR] [COLOR=green]As[/COLOR] [COLOR=blue]String[/COLOR]
[COLOR=green]If[/COLOR] [COLOR=blue]Target.Address[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"$C$2"[/COLOR][COLOR=blue] Then[/COLOR]
    [COLOR=blue]Er[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A5"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].End[/COLOR][COLOR=green]([/COLOR][COLOR=blue]xlDown[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Row[/COLOR]
    [COLOR=blue]sodong[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"C2"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Value[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR]
    [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A5:D"[/COLOR] [COLOR=green]&[/COLOR] [COLOR=blue]Er - 1[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Delete Shift[/COLOR]:[COLOR=green]=[/COLOR][COLOR=blue]xlUp[/COLOR]
    [COLOR=green]For [/COLOR][COLOR=blue]iR[/COLOR] [COLOR=green]=[/COLOR] [COLOR=blue]1 To Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"C2"[/COLOR][COLOR=green])[/COLOR][COLOR=blue].Value[/COLOR]
        [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A"[/COLOR] [COLOR=blue]& iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].EntireRow.Insert[/COLOR]
        [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"A" [/COLOR][COLOR=blue]& iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=ROW()-4"[/COLOR]
        [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"D" [/COLOR][COLOR=green]&[/COLOR] [COLOR=blue]iR[/COLOR] [COLOR=green]+[/COLOR] [COLOR=blue]4[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=Sum(RC[-1]:RC[-2])"[/COLOR]
    [COLOR=blue]Next iR[/COLOR]
    [COLOR=blue]Range[/COLOR][COLOR=green]([/COLOR][COLOR=red]"D"[/COLOR] [COLOR=green]&[/COLOR] [COLOR=blue]sodong + 1[/COLOR][COLOR=green])[/COLOR][COLOR=blue].FormulaR1C1[/COLOR] [COLOR=green]=[/COLOR] [COLOR=red]"=Sum(RC[-1]:RC[-2])"[/COLOR]
    [COLOR=green]'a1 = "=sum(B" & sodong & ":B5)"[/COLOR]
[COLOR=green]   'a2 = "=sum(C" & sodong & ":C5)"[/COLOR]
[COLOR=green]   'Range("B" & sodong + 1).FormulaR1C1 = Evaluate(a1)[/COLOR]
[COLOR=green]   'Range("C" & sodong + 1).FormulaR1C1 = Evaluate(a2)[/COLOR]
[COLOR=blue]End[/COLOR] [COLOR=green]If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Em dùng Evaluate nhưng sao không có kết quả nhỉ?

Mấy bác cho em hỏi thêm. Dòng "Er = Range("A5").End(xlDown).Row" có ý nghĩa là gì vậy?
Với lại nếu em muốn những dòng insert thêm cũng có thuộc tính hay công thức giống như dòng bên trên nó thì dùng đoạn code như thế nào vậy?
Thanks các pác nhiều nghen!
 
Upvote 0
Mấy bác cho em hỏi thêm. Dòng "Er = Range("A5").End(xlDown).Row" có ý nghĩa là gì vậy? Với lại nếu em muốn những dòng insert thêm cũng có thuộc tính hay công thức giống như dòng bên trên nó thì dùng đoạn code như thế nào vậy? Thanks các pác nhiều nghen!
Dòng đó dùng để lấy số dòng cuối cùng cột A bắt đầu từ A5. Nếu muốn gán thuộc tính thì bạn phải biết được ô đó cần những thuộc tính gì. Bạn có thể dùng Macro để chèn thuộc tính mẩu cho ô đó trước rồi mở Macro đó ra xem nó viết gì rồi đặt nó vào trong code của chúng ta thì được rồi.
Mã:
With Range("B" & iR + 4).Interior ......... End With
Đặt đoạn code đó vào trong phần (...). Interior dùng để chèn màu cho cell đó. Ví dụ:
PHP:
For... ....         With Range("B" & iR + 4).Interior         .ColorIndex = 34         .Pattern = xlSolid         .PatternColorIndex = xlAutomatic         End With ... Next iR
 
Lần chỉnh sửa cuối:
Upvote 0
Dòng đó dùng để lấy số dòng cuối cùng cột A bắt đầu từ A5.
Nếu muốn gán thuộc tính thì bạn phải biết được ô đó cần những thuộc tính gì. Bạn có thể dùng Macro để chèn thuộc tính mẩu cho ô đó trước rồi mở Macro đó ra xem nó viết gì rồi đặt nó vào trong code của chúng ta thì được rồi.
Mã:
With Range("B" & iR + 4).Interior
.........
End With
Đặt đoạn code đó vào trong phần (...). Interior dùng để chèn màu cho cell đó.
Ví dụ:
PHP:
For...
....
        With Range("B" & iR + 4).Interior
        .ColorIndex = 34
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        End With
...
Next iR
Thông thường những bài như vậy, người ta vẫn giữ số dòng cao nhất với định dạng sẵn. Nếu sodong < sodongMax => Hide những dòng kia hỉển nhiên là clearcontents. Làm như vậy sẽ nhanh hơn.
 
Upvote 0
Các bác cho em hỏi thêm câu này tí, ví dụ trong 1 sheet em chỉ muốn nhập dữ liệu ở một vài ô xác định (ví dụ như ô C2 chẳn hạn). Khi có sự thay đổi ở các ô khác thì không thực hiện được và sẽ thông báo lỗi, ví dụ "Khong thay doi o nay".

Nếu gộp chung đoạn code này với đoạn code mà bác boong đã giúp đỡ ứng dụng vào file em đã gửi lên thì phải làm như thế nào. Mong được sự giúp đỡ của các bác. Cám ơn các bác nhiều!
 
Upvote 0
1/ Bạn chọn Cells không muốn khóa. Bấm phải chuột chọn Format Cells.. -> Tab Protection -> bỏ chọn mục Lock. 2/ Bạn muốn ẩn hàm thì chọn vào mục Hidden. Bạn mở khóa Protect Sheet (Tools -> Protection -> Unprotect Sheet -> rồi nhập Pass vào. Bạn chọn vào 1 ô rồi làm theo cách trên để biết cách làm nha!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
1/ Bạn chọn Cells không muốn khóa. Bấm phải chuột chọn Format Cells.. -> Tab Protection -> bỏ chọn mục Lock.
2/ Bạn muốn ẩn hàm thì chọn vào mục Hidden.
Bạn mở khóa Protect Sheet (Tools -> Protection -> Unprotect Sheet -> rồi nhập Pass vào. Bạn chọn vào 1 ô rồi làm theo cách trên để biết cách làm nha!

Em hiểu rồi, cám ơn anh boong nhé, cũng cám ơn bạn thunghi luôn! }}}}}
Mà anh boong ơi, nếu người ta thấy được đoạn code này thì người ta biết được pass của mình rồi, vậy mình phải giấu ko cho xem code luôn hả anh?

"Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheets("Sheet2").Protect ("asb") 'Khoa nay de chong chuong trinh mo Pass Protect
End Sub"
 
Upvote 0
Bạn vào VBA, chọn Tools -> VBA project Properties -> Tab Protection -> Chọn Lock project for viewing -> nhập pass (càng dài càng tốt, có đủ số chữ cái [hoa, thường], ký tự đặt biệt [&,^,..]) vào hai ô còn lại. Xong nhấn OK. Lưu file lại thế là tạm ổn rồi!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn vào VBA, chọn Tools -> VBA project Properties -> Tab Protection -> Chọn Lock project for viewing -> nhập pass (càng dài càng tốt, có đủ số chữ cái [hoa, thường], ký tự đặt biệt [&,^,..]) vào hai ô còn lại. Xong nhấn OK. Lưu file lại thế là tạm ổn rồi!

Vậy được rồi, cám ơn bác boong nhé!
Chúc bác luôn thành công.
 
Upvote 0
Web KT

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

Back
Top Bottom