tuyettrang186
Thành viên mới
- Tham gia
- 11/12/10
- Bài viết
- 30
- Được thích
- 4
Sau khi bạn nhập đơn giá xong, code sẽ nhập số liệu sang sheet2Em có ví dụ này nhờ các huynh viết dùm em code cập nhật dữ liệu sang Sheet bên cạnh (Cập nhật dữ liệu từ Sheet1 sang Sheet2) nhé!
Sau khi bạn nhập đơn giá xong, code sẽ nhập số liệu sang sheet2
Trường hợp khi bạn nhập sai đơn giá thì nhập lại nó sẽ xuất hàng khác đấy, vấn đề này bạn tự khắc phục thêm nhé
Sub cap_nhat()
Dim i As Long
i = Range("A65535").End(xlUp).Row
S2.Range("A4:D65535").ClearContents
With S2
If Not Range("A" & i) Is Nothing Then
.Range("A65500").End(xlUp).Offset(1, 1).Resize(, 2).Value = S1.Range([A7], [A65535].End(xlUp)).Offset(, 1).Resize(, 2).Value
.Range("A65500").End(xlUp).Offset(1, 3).Value = S1.Range([A7], [A65535].End(xlUp)).Offset(, 5).Value
End If
End With
End Sub
Private Sub Worksheet_Activate()
cap_nhat
End Sub
Xem thử bài này có được không nhé!
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteValues, Transpose:=False
Sub Worksheet_Activate()
Dim nN As Long
nN = WorksheetFunction.CountA(S1.[A7:A1000])
S2.[A4:D1000].ClearContents
S2.[B4].Resize(nN, 2).Value = S1.[B7].Resize(nN, 2).Value
S2.[D4].Resize(nN).Value = S1.[F7].Resize(nN).Value
S2.[A4].Resize(nN).FormulaR1C1 = "=MAX(R3C1:R[-1]C)+1"
S2.[A4].Resize(nN).Value = S2.[A4].Resize(nN).Value
End Sub
Thử làm không biết có đúng ý bạn không. Thân.
Private Sub Worksheet_Activate()
Dim i As Long, j As Long
Application.ScreenUpdating = False
i = S1.Range("A65000").End(xlUp).Row
j = Range("B65000").End(xlUp).Row
S2.Range("A4:D65535").ClearContents
If S1.Range("A" & i) > 6 Then
With S2
S1.Range("B7:C" & i).Copy: .[B4].PasteSpecial 3
S1.Range("F7:F" & i).Copy: .[D4].PasteSpecial 3
.Range("A4:A" & j) = Evaluate("=row(R:R)")
End With
Application.CutCopyMode = False
Range("D3").Select
End If
Application.ScreenUpdating = False
End Sub
Đúng là rất gọn, Code của tôi chỉ là "Hậu quả" của Record New Macro... mà thôi, vì thế nó dài lòng thòng mà chưa đủ trình độ tinh chỉnh.Bác Ba Te ơi, Code của bác nên rút gọn lại như thế này thôi
Mã:Sub Worksheet_Activate() Dim nN As Long nN = WorksheetFunction.CountA(S1.[A7:A1000]) S2.[A4:D1000].ClearContents S2.[B4].Resize(nN, 2).Value = S1.[B7].Resize(nN, 2).Value S2.[D4].Resize(nN).Value = S1.[F7].Resize(nN).Value S2.[A4].Resize(nN).FormulaR1C1 = "=MAX(R3C1:R[-1]C)+1" S2.[A4].Resize(nN).Value = S2.[A4].Resize(nN).Value End Sub
Bạn mà đặt biến j= Range("B65000").End(xlUp).Row trước khi copy số liệu sẽ bị sai đấy, không tin bạn thử lại xem nhé.Code của bạn mình xin sửa như thế này nhé:
PHP:Private Sub Worksheet_Activate() Dim i As Long, j As Long Application.ScreenUpdating = False i = S1.Range("A65000").End(xlUp).Row j = Range("B65000").End(xlUp).Row S2.Range("A4:D65535").ClearContents If S1.Range("A" & i) > 6 Then With S2 S1.Range("B7:C" & i).Copy: .[B4].PasteSpecial 3 S1.Range("F7:F" & i).Copy: .[D4].PasteSpecial 3 .Range("A4:A" & j) = Evaluate("=row(R:R)") End With Application.CutCopyMode = False Range("D3").Select End If Application.ScreenUpdating = False End Sub
1. Khi ở sheet2, chuyển sang hoạt động sheet 1 bạn sẽ bị chế độ "Application.CutCopyMode" -> rất khó chịuCode của bạn mình xin sửa như thế này nhé:
PHP:Private Sub Worksheet_Activate() Dim i As Long, j As Long Application.ScreenUpdating = False i = S1.Range("A65000").End(xlUp).Row j = Range("B65000").End(xlUp).Row S2.Range("A4:D65535").ClearContents If S1.Range("A" & i) > 6 Then With S2 S1.Range("B7:C" & i).Copy: .[B4].PasteSpecial 3 S1.Range("F7:F" & i).Copy: .[D4].PasteSpecial 3 .Range("A4:A" & j) = Evaluate("=row(R:R)") End With Application.CutCopyMode = False Range("D3").Select End If Application.ScreenUpdating = False End Sub
Bạn mà đặt biến j= Range("B65000").End(xlUp).Row trước khi copy số liệu sẽ bị sai đấy, không tin bạn thử lại xem nhé.
Theo tôi nếu bạn đặt biến j thì nên đặt sau dòngMình test thấy có sai đâu? Bạn chỉ dùm mình cụ thể hơn? Còn anh viehoai nói đúng. nhưng em vẫn chưa biết khắc phục bằng cách nào được. Em đang tìm phương án.
S1.Range("F7:F" & i).Copy: .[D4].PasteSpecial 3
j = Range("B65000").End(xlUp).Row
.Range("A4:A" & j) = Evaluate("=row(R:R)")
...
Nó khác nhau cái gì vậy bạn? Bạn giải thích rõ hơn được không?Theo tôi nếu bạn đặt biến j thì nên đặt sau dòng
PHP:S1.Range("F7:F" & i).Copy: .[D4].PasteSpecial 3 j = Range("B65000").End(xlUp).Row .Range("A4:A" & j) = Evaluate("=row(R:R)") ...
Bạn thử xoá hết dữ liệu bên s2 trừ hàng tiêu đề và di chuyển sang s1 sau đó quay lại s2, bạn thử xem nhé.
Private Sub Worksheet_Activate()
Dim i As Long, j As Long
Application.ScreenUpdating = False
i = S1.Range("A65000").End(xlUp).Row
j = Range("B65000").End(xlUp).Row 'Bạn muốn chuyển hàng này
S2.Range("A4:D65535").ClearContents
If S1.Range("A" & i) > 6 Then
With S2
S1.Range("B7:C" & i).Copy: .[B4].PasteSpecial 3
S1.Range("F7:F" & i).Copy: .[D4].PasteSpecial 3
'Xuống ở đây
.Range("A4:A" & j) = Evaluate("=row(R:R)")
End With
Application.CutCopyMode = False
Range("D3").Select
End If
Application.ScreenUpdating = False
End Sub
Bác Ba Te ơi, Code của bác nên rút gọn lại như thế này thôi
Mã:Sub Worksheet_Activate() Dim nN As Long nN = WorksheetFunction.CountA(S1.[A7:A1000]) S2.[A4:D1000].ClearContents S2.[B4].Resize(nN, 2).Value = S1.[B7].Resize(nN, 2).Value S2.[D4].Resize(nN).Value = S1.[F7].Resize(nN).Value S2.[A4].Resize(nN).FormulaR1C1 = "=MAX(R3C1:R[-1]C)+1" S2.[A4].Resize(nN).Value = S2.[A4].Resize(nN).Value End Sub
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2