Nhập dữ liệu từ một bảng tính Excel sang bảng tính khác.
CHÀO,
Tôi có 2 tệp Excel (PATIENTS2010; PATIENTS2011) có cấu trúc trang tính tương tự nhau, ngoại trừ việc chứa dữ liệu về các bệnh nhân khác nhau từ 2 năm khác nhau (2010 và 2011). Mỗi tệp Excel có nhiều trang tính được đặt tên là PatientA, PatientB,... và mỗi trang tính chứa dữ liệu xét nghiệm của một bệnh nhân. Một bệnh nhân có thể có trang tính trong tệp PATIENT2011 nhưng không có trong PATIENT2010 (vì bệnh nhân được đăng ký vào phòng khám năm 2011 và không thuộc phòng khám năm 2010; tương tự, một bệnh nhân có thể có mặt trong năm 2010 nhưng không có trong năm 2011 vì bệnh nhân được xuất viện vào cuối năm 2010). Đối với mỗi trang tính của bệnh nhân, các hàng chứa giá trị xét nghiệm (ví dụ: Hàng 7 là Hemoglobin, Hàng 8 là natri,... cho đến Hàng 15 chứa giá trị kali; lưu ý: Hàng 6 là tiêu đề cho các cột). Mỗi cột trong phiếu bệnh nhân tương ứng với một tháng (Cột A là tiêu đề kết quả xét nghiệm; Cột B là tháng 1; Cột C là tháng 2;...; Cột M là tháng 12).
Tôi cần một đoạn mã VBA được nhúng vào nút lệnh trên một trang tính trong PATIENTS2011. Khi được nhấp vào, mã này sẽ nhập dữ liệu tháng 12 của bệnh nhân từ tập tin PATIENTS2010 sang tập tin PATIENTS2011 (dữ liệu sẽ được đặt trong cột N của PATIENTS2011; cột có nhãn là "LastDec" trong ô N6). Đoạn mã sẽ hoạt động như sau:
1. Vì vị trí của tệp PATIENT2010 có thể thay đổi, mã VBA yêu cầu người dùng duyệt và chọn tệp chứa dữ liệu cần nhập (trong trường hợp này, người dùng duyệt và chọn tệp PATIENT2010).
2. Đối với mỗi trang tính (tức là bệnh nhân) trong PATIENT2011, hãy kiểm tra xem có trang tính nào trong PATIENT2010 có tên tương tự hay không. Nếu tìm thấy trang tính có tên trùng khớp (ví dụ "PatientA"), thì hãy thực hiện các bước sau: sao chép các giá trị từ PATIENTS2010, trang tính PatientA, từ M7 đến M15 và các giá trị đặc biệt/đã sao chép sang PATIENTS2011, trang tính PatientA, từ N7 đến N15. Như vậy, cột N sẽ chứa dữ liệu xét nghiệm từ tháng 12 năm trước.
Mọi sự giúp đỡ đều được trân trọng.
Cảm ơn.
Trả lời:
Hãy thử cách này:
Sub ImportFromLastYear()
Dim strFileName As String
Dim wbkCur As Workbook
Dim wbkOld As Workbook
Dim wshCur As Worksheet
Dim wshOld As Worksheet
Khi xảy ra lỗi, hãy chuyển đến trình xử lý lỗi ErrHandler.
'Yêu cầu người dùng tìm sổ làm việc năm ngoái'
strFileName = Application.GetOpenFilename(Title:="Vui lòng chọn sổ làm việc năm ngoái")
Nếu strFileName = "False" thì
MsgBox "Chưa có sổ làm việc nào được chọn!", vbExclamation
Thoát khỏi Sub
Kết thúc nếu
Ứng dụng.Màn hình cập nhật = Sai
Đặt wbkCur = ActiveWorkbook
'Mở sổ tay năm ngoái'
Set wbkOld = Workbooks.Open(strFileName)
'Lật qua các trang của cuốn sổ tay năm nay'
Đối với mỗi wshCur trong wbkCur.Worksheets
Đặt wshold = Nothing
Khi xảy ra lỗi, tiếp tục.
'Hãy cố gắng so sánh với trang tính trong tập vở năm ngoái.'
Đặt wshOld = wbkOld.Worksheets(wshCur.Name)
Khi xảy ra lỗi, hãy chuyển đến trình xử lý lỗi ErrHandler.
Nếu không có nghĩa là không có gì thì
wshOld.Range("M7:M15").Copy
wshCur.Range("N7:N15").PasteSpecial Paste:=xlPasteValuesAndNumberFormats
Kết thúc nếu
Tiếp theo wshCur
Trình xử lý thoát:
Khi xảy ra lỗi, tiếp tục.
wbkOld.Close SaveChanges:=False
Ứng dụng.Màn hình cập nhật = Đúng
Thoát khỏi Sub
ErrHandler:
MsgBox Err.Description, vbExclamation
Tiếp tục trình xử lý thoát
End Sub
Trả lời:
Chèn một dòng
Application.EnableEvents = False
trước khi mở bảng tính, hãy thêm một dòng
Ứng dụng.ChoPhóngSựKiện = Đúng
đến phần ExitHandler.
Comments
Post a Comment