tigertiger
Coming back ...
- Tham gia
- 25/1/07
- Bài viết
- 1,934
- Được thích
- 1,902
Vấn đề này đã bàn 1 lần tại:
http://www.giaiphapexcel.com/forum/showthread.php?p=49056#post49056
Nhưng tigertiger thấy, đấy là vấn đề rất hay, Xin mở 1 topic để mạn đàm, mong nhận được góp ý
+ Và tigertiger đã có giải pháp cho phép nhập cộng dồn trên 1 vùng (cho phép nhập giá trị từng ô hoặc đồng thời nhiều ô Ctrl+Enter) -
+ Vùng DL được định nghĩa qua Name -> không giới hạn về vị trí cũng như ko phải mặc định số hàng số cột. -> và có thể chèn hàng chèn cột dịch chuyển vùng DL
hạn chế : chắc là do sd sự kiện Workbook_open
+ Tuy nhiên khi định nghĩa name này (VungNhap) cho vùng mới thì sau khi định nghĩa phải đóng file lại và thoát khỏi Excel -> mở lại là được
+ tương tự cho việc chèn thêm hàng/ cột vào giữa vùng nhập thì cũng phải đóng file lại thoát khỏi excel và mở lại
Code:
Trong đó VungNhap là name định nghĩa cho Vùng nhập
Alt+F11 -> chọn ThisWorkbook (ở lề trái) -> rồi dán code trên vào; & định nghĩa Vung nhập thành 1 name VungNhap là OK
xin xem File gửi kèm
http://www.giaiphapexcel.com/forum/showthread.php?p=49056#post49056
Nhưng tigertiger thấy, đấy là vấn đề rất hay, Xin mở 1 topic để mạn đàm, mong nhận được góp ý
+ Và tigertiger đã có giải pháp cho phép nhập cộng dồn trên 1 vùng (cho phép nhập giá trị từng ô hoặc đồng thời nhiều ô Ctrl+Enter) -
+ Vùng DL được định nghĩa qua Name -> không giới hạn về vị trí cũng như ko phải mặc định số hàng số cột. -> và có thể chèn hàng chèn cột dịch chuyển vùng DL
hạn chế : chắc là do sd sự kiện Workbook_open
+ Tuy nhiên khi định nghĩa name này (VungNhap) cho vùng mới thì sau khi định nghĩa phải đóng file lại và thoát khỏi Excel -> mở lại là được
+ tương tự cho việc chèn thêm hàng/ cột vào giữa vùng nhập thì cũng phải đóng file lại thoát khỏi excel và mở lại
Code:
PHP:
Option Explicit
Dim oldValue()
Dim Rgn As Range
Dim nR As Integer, nC As Integer, sR As Integer, sC As Integer 'sR startRow, sC startColumn
Private Sub Workbook_Open()
Set Rgn = Range("VungNhap")
nR = Rgn.Rows.Count: nC = Rgn.Columns.Count: ReDim oldValue(nR, nC)
sR = Rgn.Row: sC = Rgn.Column
Dim cE As Range
For Each cE In Rgn
oldValue(cE.Row - sR + 1, cE.Column - sC + 1) = Rgn(cE.Row - sR + 1, cE.Column - sC + 1).Value
Next
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Range("VungNhap"), Target) Is Nothing Then
Application.EnableEvents = False
sR = Rgn.Row: sC = Rgn.Column
Dim cE As Range
For Each cE In Target
Rgn(cE.Row - sR + 1, cE.Column - sC + 1).Value = Rgn(cE.Row - sR + 1, cE.Column - sC + 1).Value + oldValue(cE.Row - sR + 1, cE.Column - sC + 1)
oldValue(cE.Row - sR + 1, cE.Column - sC + 1) = Rgn(cE.Row - sR + 1, cE.Column - sC + 1).Value
Next
Application.EnableEvents = True
End If
End Sub
Trong đó VungNhap là name định nghĩa cho Vùng nhập
Alt+F11 -> chọn ThisWorkbook (ở lề trái) -> rồi dán code trên vào; & định nghĩa Vung nhập thành 1 name VungNhap là OK
xin xem File gửi kèm