Cách viết Code lấy dữ liệu cũ để sửa. (1 người xem)

Liên hệ QC

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

Do Nam Trung

Thành viên mới
Tham gia
22/11/17
Bài viết
14
Được thích
0
Giới tính
Nam
Mình có tạo một Form nhập dữ liệu trực tiếp từ bảng tính:
Phần lưu dữ liệu từ Sheet"FORM" vào Sheet"DATA" mình đã Record Macro ,sửa lại và đã chạy tạm ổn.
Riêng phần lấy dữ liệu cũ từ Sheet"DATA" sang lại Sheet"FORM" thì bó tay ,mày mò từ sáng đến h vẫn ko ra.
Mình có Up File đính kèm ,Các bạn giúp mình nhé...
 

File đính kèm

Bạn thay bỡi macro có nội dung sau:
PHP:
Sub LayDLDeSua()
 Dim Sh As Worksheet, Rng As Range, sRng As Range
 Set Sh = ThisWorkbook.Worksheets("Data")
 Set Rng = Sh.Range(Sh.[A1], Sh.[A1].End(xlDown))
 Set sRng = Rng.Find([e1].Value, , xlFormulas, xlWhole)
 If sRng Is Nothing Then
    MsgBox "Nothing!", , "GPE.COM Xin Luu Ý!"
 Else
    Range(sRng, sRng.Resize(, 12)).Copy
    Sheets("FORM").Select
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
    Application.CutCopyMode = False
 End If
 [B3].Select
End Sub
 
Upvote 0
Mình đã thay bằng đoạn Code của bạn ,nhưng nó báo lỗi "Nothing"
 
Upvote 0
Đó không fải là câu báo lỗi. Câu í nói rằng không tìm thấy (STT mà bạn đã nhập vô [E1])
Nếu muốn chắc ăn, bạn nên cho vô [E1] này danh sách sổ xuống là tất cả các STT trong danh sách trong CSDL của bạn.
Khi ấy, bạn có thể xài macro sự kiện tại [E1] luôn!
 
Upvote 0
Đó không fải là câu báo lỗi. Câu í nói rằng không tìm thấy (STT mà bạn đã nhập vô [E1])
Nếu muốn chắc ăn, bạn nên cho vô [E1] này danh sách sổ xuống là tất cả các STT trong danh sách trong CSDL của bạn.
Khi ấy, bạn có thể xài macro sự kiện tại [E1] luôn!
Cảm ơn bạn đã giúp Code chạy rất Ok ,Bạn cho hỏi thêm là: nếu muốn lấy dữ liệu từ cột B trở đi thì phải sửa lại Code như thế nào ?
 
Upvote 0
Bạn cho hỏi thêm là: nếu muốn lấy dữ liệu từ cột B trở đi thì phải sửa lại Code như thế nào ?
Thật sự chưa hiểu hết í bạn, có fải vầy hay không:
Thay vì
Mã:
 Range(sRng, sRng.Resize(, 12)).Copy
ta chuyển thành
PHP:
 Range(sRng.Offset(,1), sRng.Resize(, 11)).Copy

& chuyển đổi dòng lênh theo như vầy:
PHP:
 Range("B3").Select
 
Upvote 0
Thật sự chưa hiểu hết í bạn, có fải vầy hay không:
Thay vì
Mã:
 Range(sRng, sRng.Resize(, 12)).Copy
ta chuyển thành
PHP:
 Range(sRng.Offset(,1), sRng.Resize(, 11)).Copy

& chuyển đổi dòng lênh theo như vầy:
PHP:
 Range("B3").Select
Mình chỉ cần copy từ Cột B trở đi ,vì Cột A là cột chứa số thứ tự phải để nó "độc lập" phòng khi muốn lưu dữ liệu đã sửa vào DL cũ.
 
Upvote 0
Bạn giúp mình chèn cái code:
Mã:
MsgBox "Nothing!", , "GPE.COM Xin Luu Ý!"
Để bẫy lỗi vào đoạn Code (Code Save dữ liệu - có trong File đính kèm ở bài #1)
Mã:
Sub SaveDL()
    FORM.Range("B2:B12").Copy
    n = FORM.Range("B2").Value
    DATA.Select
    Range("A1").Select
    ActiveCell.Offset(n).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
    Application.CutCopyMode = False
End Sub
Mình đã tự chèn vào rồi mà VBA nó báo lỗi.
 
Upvote 0
Trong CSDL của bạn hình như chưa có trường "mã duy nhất" thì fải!
Trường này không nên là trường [STT] (đang là cột [A:A] của bạn.)

Thêm nữa, 2 macro không hề liên quan đến nhau; Nghĩa là lỗi của anh nào anh í chịu!
 
Upvote 0
Web KT

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

Back
Top Bottom