[Xin giúp] Sửa giúp code marco khi ghi dữ liệu. (1 người xem)

Liên hệ QC

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

trananhtommy

Thành viên hoạt động
Tham gia
11/12/06
Bài viết
111
Được thích
6
Chào các Bác.

Em hay sử dụng tính năng record marco có sẵn của excel vì không biết lập trình để ghi dữ liệu.

Sau khi tạo xong, trong máy họ cung cấp code như sau:

Mã:
Sub ghi()' ghi Macro
    Sheets("Dulieu").Select
    Rows("6:6").Select
    Selection.Copy
    Selection.Insert Shift:=xlDown
    Rows("1:1").Select
    Application.CutCopyMode = False
    Selection.Copy
    Rows("6:6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A6").Select
    Sheets("Capnhat").Select
    Range("C2").Select
End Sub
Với code như vậy mỗi lần ghi dữ liệu nó sẽ copy dòng 5 ở sheet "dulieu" đồng thời chèn thêm 1 dòng vào đó và dán dữ liệu ở Dòng 1 xuống.

Với cách như vậy nó luôn bị thay đổi cấu trúc của sheet "Dulieu" và rất khó để share file cho nhiều người dùng chung hoặc khi chạy nhìn rất rối mắt...

Nhờ các Bác sửa giúp E làm sao để khi chạy nó tự tìm xuống ô cuối cùng ngay sát ô có dữ liệu để copy và paste vào đó với. Không sử dụng cách chèn dòng nữa với.

File của E đây. Cảm ơn các Bác nhiều.
 

File đính kèm

Bạn thay macro đó thành cái thủ tục dưới đây xem sao!

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array(.[C3], .[C2], .[C4], .[C10])
    End With
    With Sheets("Dulieu")
        .Range("A65536").End(xlUp).Offset(1).Resize(, 4).Value = MyArr
        .Select
    End With
End Sub
 
Upvote 0
Bạn thay macro đó thành cái thủ tục dưới đây xem sao!

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array(.[C3], .[C2], .[C4], .[C10])
    End With
    With Sheets("Dulieu")
        .Range("A65536").End(xlUp).Offset(1).Resize(, 4).Value = MyArr
        .Select
    End With
End Sub

Vâng, hay quá. Xin hỏi thêm Bác E muốn BỔ SUNG 1 CÔNG THỨC ở Cột E - Sheet dữ liệu (đúng dòng vừa ghi mới) là = Ô cột D (ngày hoàn thành) trừ đi Ô cột C (ngày giao việc) thì phải thêm dòng code nào nữa hả Bác.

Bác giúp E nốt tý chút, cảm ơn Bác rất nhiều!
 
Upvote 0
Vâng, hay quá. Xin hỏi thêm Bác E muốn BỔ SUNG 1 CÔNG THỨC ở Cột E - Sheet dữ liệu (đúng dòng vừa ghi mới) là = Ô cột D (ngày hoàn thành) trừ đi Ô cột C (ngày giao việc) thì phải thêm dòng code nào nữa hả Bác.

Bác giúp E nốt tý chút, cảm ơn Bác rất nhiều!

Bạn dùng thủ tục dưới đây:

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array([COLOR=#800080].[C3][/COLOR], .[C2], .[C4], .[C10], [COLOR=#0000cd].[C10] - .[C4] [/COLOR][COLOR=#ff0000]+ 1[/COLOR][COLOR=#0000cd][/COLOR])
    End With
    With Sheets("Dulieu")
        .Range("A65536").End(xlUp).Offset(1).Resize(, 5).Value = MyArr
        .Select
    End With
End Sub

Lưu ý, tôi có thêm 1 công thức trong thủ tục, nếu bạn lấy luôn ngày đầu làm việc thì cộng thêm 1 (màu đỏ), còn không thì xóa nó đi.

À, tôi cũng lưu ý với bạn là trong file của bạn có 2 Mã việc (C3 và C9) tôi chẳng biết là mã nào, tôi chọn tại C3 đấy nhé!
 
Upvote 0
Bạn dùng thủ tục dưới đây:

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array([COLOR=#800080].[C3][/COLOR], .[C2], .[C4], .[C10], [COLOR=#0000cd].[C10] - .[C4] [/COLOR][COLOR=#ff0000]+ 1[/COLOR])
    End With
    With Sheets("Dulieu")
        .Range("A65536").End(xlUp).Offset(1).Resize(, 5).Value = MyArr
        .Select
    End With
End Sub

Lưu ý, tôi có thêm 1 công thức trong thủ tục, nếu bạn lấy luôn ngày đầu làm việc thì cộng thêm 1 (màu đỏ), còn không thì xóa nó đi.

À, tôi cũng lưu ý với bạn là trong file của bạn có 2 Mã việc (C3 và C9) tôi chẳng biết là mã nào, tôi chọn tại C3 đấy nhé!

Vâng, rất cảm ơ Bác nhưng như vậy là công thức Chết (đã tính thành kết quả) rồi hả Bác? Em muốn nó là công thức sống cơ vì Cột D (ngày hoàn thành) đôi lúc vẫn cho phép chỉnh sửa được, như vậy nếu không để công thức sống thì số liệu ở Cột E sẽ sai.

Bác chỉ E cách đặt trực tiếp công thức (ví dụ ở dòng 9) E9=D9-C9 có được không Bác.

1 lần nữa xin được cảm ơn Bác trợ giúp,
 
Upvote 0
Vâng, rất cảm ơ Bác nhưng như vậy là công thức Chết (đã tính thành kết quả) rồi hả Bác? Em muốn nó là công thức sống cơ vì Cột D (ngày hoàn thành) đôi lúc vẫn cho phép chỉnh sửa được, như vậy nếu không để công thức sống thì số liệu ở Cột E sẽ sai.

Bác chỉ E cách đặt trực tiếp công thức (ví dụ ở dòng 9) E9=D9-C9 có được không Bác.

1 lần nữa xin được cảm ơn Bác trợ giúp,

Vậh đành phải "nhiệt liệt chúc mừng sửa lần 3" thôi!

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array(.[C3], .[C2], .[C4], .[C10], [B][COLOR=#ff0000]"=RC[-1]-RC[-2]+1"[/COLOR][/B])
    End With
    With Sheets("Dulieu")
        .Range("A65536").End(xlUp).Offset(1).Resize(, 5).Value = MyArr
        .Select
    End With
End Sub
 
Upvote 0
Vậh đành phải "nhiệt liệt chúc mừng sửa lần 3" thôi!

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array(.[C3], .[C2], .[C4], .[C10], [B][COLOR=#ff0000]"=RC[-1]-RC[-2]+1"[/COLOR][/B])
    End With
    With Sheets("Dulieu")
        .Range("A65536").End(xlUp).Offset(1).Resize(, 5).Value = MyArr
        [COLOR=#0000cd][B].Select[/B][/COLOR]
    End With
End Sub


Bài này lẽ ra không cần .Select, cứ nhập liệu cho đã đời đi, xong thì ta chọn lại sheet Dulieu để xem kết quả nhập là tốt nhất! Cứ nhảy qua nhảy lại mệt cả người!

Nên như vầy là được:

Mã:
Sub GHI()
    Dim MyArr As Variant
    With Sheets("Capnhat")
        MyArr = Array(.[C3], .[C2], .[C4], .[C10], [B][COLOR=#ff0000]"=RC[-1]-RC[-2]+1"[/COLOR][/B])
    End With
    Sheets("Dulieu").Range("A65536").End(xlUp).Offset(1).Resize(, 5).Value = MyArr
End Sub
 
Upvote 0

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

Back
Top Bottom