Nhờ các ACE sửa dùm code sửa số liệu (1 người xem)

  • Thread starter Thread starter vu_ctn
  • Ngày gửi Ngày gửi
Liên hệ QC

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

vu_ctn

Thành viên chính thức
Tham gia
3/6/10
Bài viết
70
Được thích
2
Mình sưu tầm được 1 đoạn code sửa số liệu nhưng mình làm thì code không ghi được
Nhờ ACE sửa lại dùm mình đoạn code trên ( có file đính kèm - nội dung mình ghi trong file)
Rất mong được sự giúp đỡ của ACE GPE
 

File đính kèm

Bạn dùng Code này nhé do anh em diễn đàn viết đó
PHP:
Sub copy()
    With Sheets("DATA")
        .Cells(65536, 3).End(xlUp).Offset(2, 0).Value = Sheets("ND_sua").Range("C2").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 1).Value = Sheets("ND_sua").Range("D2").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 2).Value = Sheets("ND_sua").Range("E4").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 3).Value = Sheets("ND_sua").Range("E5").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 4).Value = Sheets("ND_sua").Range("E6").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 5).Value = Sheets("ND_sua").Range("E7").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 6).Value = Sheets("ND_sua").Range("E8").Value
    End With
End Sub
Mình sưu tầm được 1 đoạn code sửa số liệu nhưng mình làm thì code không ghi được
Nhờ ACE sửa lại dùm mình đoạn code trên ( có file đính kèm - nội dung mình ghi trong file)
Rất mong được sự giúp đỡ của ACE GPE
 
Upvote 0
Mình sưu tầm được 1 đoạn code sửa số liệu nhưng mình làm thì code không ghi được
Nhờ ACE sửa lại dùm mình đoạn code trên ( có file đính kèm - nội dung mình ghi trong file)
Rất mong được sự giúp đỡ của ACE GPE
Nhìn vào dữ liệu trong sheet của bạn, tôi nghĩ bạn nên sửa lại code như thế này:

Mã:
Sub Sua_phieu()
    Dim FindRange As Range
    Dim SoPhieuThu As String
    SoPhieuThu = Sheets("ND_sua").Range("C2").Value
    Set FindRange = Range(Sheets("DATA").Range("C6"), Sheets("DATA").Range("C" & Rows.Count).End(xlUp))
    Set FindRange = FindRange.Find(What:=SoPhieuThu, LookIn:=xlValues, LookAt:=xlWhole)
    If FindRange Is Nothing Then
        MsgBox "Ban dien phieu thu không chính xác!"
    Else
        Dim r As Long
        Dim ArrEdit(), ArrNewInfor(), ArrCols()
        ArrEdit = FindRange.Resize(, 9)
        ArrCols = Array(0, 4, 5, 6, 8, 9)
        ArrNewInfor = Sheets("ND_sua").Range("E4:E8").Value
        For r = 1 To 5
            If ArrNewInfor(r, 1) > "" Then
                ArrEdit(1, ArrCols(r)) = ArrNewInfor(r, 1)
            End If
        Next
        FindRange.Resize(, 9) = ArrEdit
        Sheets("ND_sua").Range("E4:E8").ClearContents
    End If
End Sub
 
Upvote 0
Bạn dùng Code này nhé do anh em diễn đàn viết đó
PHP:
Sub copy()
    With Sheets("DATA")
        .Cells(65536, 3).End(xlUp).Offset(2, 0).Value = Sheets("ND_sua").Range("C2").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 1).Value = Sheets("ND_sua").Range("D2").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 2).Value = Sheets("ND_sua").Range("E4").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 3).Value = Sheets("ND_sua").Range("E5").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 4).Value = Sheets("ND_sua").Range("E6").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 5).Value = Sheets("ND_sua").Range("E7").Value
        .Cells(65536, 3).End(xlUp).Offset(0, 6).Value = Sheets("ND_sua").Range("E8").Value
    End With
End Sub

Ở đây người ta nói là SỬA DỮ LIỆU chứ không phải là NHẬP DỮ LIỆU MỚI, vì thế bạn đừng có nhầm lẫn việc này.

Khi sửa dữ liệu thì mục nào có mới sửa, còn không thì vẫn giữ y như cũ.
 
Upvote 0
yêu cầu của mình được giải quyết. Cảm ơn bạn Hoàng Trong Nghĩa rất nhiều.
Bạn cho mình hỏi thêm nhé mình không hiểu 3 dòng này, bạn giải thích thêm cho mình được không ?
cái gi khôgn hiểu mình phải hỏi bạn thông cảm nhé .
Dim ArrEdit(), ArrNewInfor(), ArrCols()
ArrEdit = FindRange.Resize(, 9)
ArrCols = Array(0, 4, 5, 6, 8, 9)
 
Upvote 0
Nếu thiết kế lại form 'sửa dữ liệu', ta có thể viết macro chỉ là copy & dán!

Cụ thể là thêm 3 dòng vô nơi cần thiết & . . .
Cảm ơn bạn Hoàng Trong Nghĩa rất nhiều.
Bạn cho mình hỏi thêm nhé mình không hiểu 3 dòng này, bạn giải thích thêm cho mình được không ?
cái gi khôgn hiểu mình phải hỏi bạn thông cảm nhé .
Mã:
    Dim ArrEdit(), ArrNewInfor(), ArrCols()
    ArrEdit = FindRange.Resize(, 9)
    ArrCols = Array(0, 4, 5, 6, 8, 9)

Dòng lệnh 1 là khai báo 3 tham biếm dạng mảng;
Dòng lệnh kế nó là gán dữ liệu cho mảng đã khai báo;
Dòng cuối: Tương tự như dòng trên nó
Để hiểu sâu về những tham biến này, bạn cần đọc nhiều bài trả lời về VBA của cao thủ HTN hơn!
 
Upvote 0
yêu cầu của mình được giải quyết. Cảm ơn bạn Hoàng Trong Nghĩa rất nhiều.
Bạn cho mình hỏi thêm nhé mình không hiểu 3 dòng này, bạn giải thích thêm cho mình được không ?
cái gi khôgn hiểu mình phải hỏi bạn thông cảm nhé .
Dim ArrEdit(), ArrNewInfor(), ArrCols()
ArrEdit = FindRange.Resize(, 9)
ArrCols = Array(0, 4, 5, 6, 8, 9)

Với mảng (array) ArrEdit, nó nhận giá trị từ ô dò tìm FindRange (theo số phiếu), rồi resize kích thước ra thêm 9 ô nữa tức từ cột C đến cột K.

Mảng ArrCols là mảng xác định vị trí các cột (ô) cần hiệu chỉnh nhằm dễ dàng chạy trong vòng lặp. Ở đây bạn có 5 mục cần thay đổi, đồng thời bên bảng DATA tính từ ô FindRange thì các số tương ứng lần lượt là các cột F, G, H, J, K. Còn số 0 chẳng qua là thêm vào vì mảng ArrNewInfor là mảng 2 chiều có biên dưới bắt đầu từ 1.

Cụ thể là thêm 3 dòng vô nơi cần thiết & . . .


Dòng lệnh 1 là khai báo 3 tham biếm dạng mảng;
Dòng lệnh kế nó là gán dữ liệu cho mảng đã khai báo;
Dòng cuối: Tương tự như dòng trên nó
Để hiểu sâu về những tham biến này, bạn cần đọc nhiều bài trả lời về VBA của cao thủ HTN hơn!
Bác Sa nói vậy em sợ quá, em là học trò của Bác Sa mà bác Sa nói vậy em tổn thọ, không dám nhận đâu, sợ khiếp mất!
 
Lần chỉnh sửa cuối:
Upvote 0
Thank bạn [h=2]Hoàng Trọng Nghĩa, SA_DQ rất nhiều bây giờ mình đã hiểu.[/h]
 
Upvote 0

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

Back
Top Bottom