Code cập nhật dự liệu

Liên hệ QC

Nguoiay

Thành viên hoạt động
Tham gia
24/11/10
Bài viết
139
Được thích
34
AC viết dùm em code cập nhật dữ liệu từ phiếu Thu - Chi sang Sheet DATA.
(Câu hỏi cụ thể trong file đính kèm)
 

File đính kèm

AC viết dùm em code cập nhật dữ liệu từ phiếu Thu - Chi sang Sheet DATA.
(Câu hỏi cụ thể trong file đính kèm)
Bạn thực hiện các bước:
1. Chọn cột A và C của sheet DATA và định dạng cho cột này là "dd/MM/yyyy".
2. Chèn 1 Macro như sau:
PHP:
Sub GhiSo()
    Dim i As Long
    Sheets("IN_PHIEU").Activate
    i = Sheets("DATA").[A65536].End(xlUp).Row + 1
    With Sheets("DATA")
        .Range("A" & i) = [D5]
        .Range("B" & i) = [J6]
        .Range("C" & i) = [D5]
        .Range("D" & i) = [B8] & " - " & [G11]
        .Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
        .Range("G" & i, "H" & i) = Application.WorksheetFunction.Transpose([K7:K8])
    End With
End Sub
3. Nháy chuột phải trên nút Ghi sổ và chọn Asign Macro cho nút này là Macro Ghi_So.
 

File đính kèm

Upvote 0
Bạn thực hiện các bước:
1. Chọn cột A và C của sheet DATA và định dạng cho cột này là "dd/MM/yyyy".
2. Chèn 1 Macro như sau:
PHP:
Sub GhiSo()
Dim i As Long
Sheets("IN_PHIEU").Activate
i = Sheets("DATA").[A65536].End(xlUp).Row + 1
With Sheets("DATA")
.Range("A" & i) = [D5]
.Range("B" & i) = [J6]
.Range("C" & i) = [D5]
.Range("D" & i) = [B8] & " - " & [G11]
.Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
.Range("G" & i, "H" & i) = Application.WorksheetFunction.Transpose([K7:K8])
End With
End Sub
3. Nháy chuột phải trên nút Ghi sổ và chọn Asign Macro cho nút này là Macro Ghi_So.

Anh ơi, em muốn cập nhật luôn 2 dòng một cơ ( như ví dụ em tô màu đó). Anh sửa lại code cho em nhé!
(Anh xem lại file đính kèm của em nhé!)
 

File đính kèm

Upvote 0
Anh ơi, em muốn cập nhật luôn 2 dòng một cơ ( như ví dụ em tô màu đó). Anh sửa lại code cho em nhé!
(Anh xem lại file đính kèm của em nhé!)
Vậy thì bạn thay code trên bởi code này nhé:
PHP:
Sub GhiSo()
    Dim i As Long, j As Byte, Max As Byte, No, Co
    Sheets("IN_PHIEU").Activate
    No = Split([J7], "-")
    Co = Split([J8], "-")
    Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
    i = Sheets("DATA").[A65536].End(xlUp).Row + 1
    With Sheets("DATA")
        .Range("A" & i) = [D5]
        .Range("B" & i) = [J6]
        .Range("C" & i) = [D5]
        .Range("D" & i) = [B8] & " - " & [G11]
        .Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
        .Range("G" & i, "H" & i) = Application.WorksheetFunction.Transpose([K7:K8])
        .Range("A" & i).Resize(, 8).Copy .Range("A" & i).Resize(Max + 1)
        If UBound(No) > UBound(Co) Then
            For j = 0 To UBound(No)
                .Range("E" & i + j) = No(j)
            Next j
        Else
            For j = 0 To UBound(Co)
                .Range("F" & i + j) = Co(j)
            Next j
        End If
    End With
End Sub
Code này chỉ đúng cho các trường hợp 1 nợ - 1 có, 1 nợ - nhiều có hoặc 1 có - nhiều nợ, còn trường hợp nhiều nợ - nhiều có thì không đúng (mình không phải là kế toán nên không biết có trường hợp cuối không).
 
Upvote 0
Vậy thì bạn thay code trên bởi code này nhé:
PHP:
Sub GhiSo()
Dim i As Long, j As Byte, Max As Byte, No, Co
Sheets("IN_PHIEU").Activate
No = Split([J7], "-")
Co = Split([J8], "-")
Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
i = Sheets("DATA").[A65536].End(xlUp).Row + 1
With Sheets("DATA")
.Range("A" & i) = [D5]
.Range("B" & i) = [J6]
.Range("C" & i) = [D5]
.Range("D" & i) = [B8] & " - " & [G11]
.Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
.Range("G" & i, "H" & i) = Application.WorksheetFunction.Transpose([K7:K8])
.Range("A" & i).Resize(, 8).Copy .Range("A" & i).Resize(Max + 1)
If UBound(No) > UBound(Co) Then
For j = 0 To UBound(No)
.Range("E" & i + j) = No(j)
Next j
Else
For j = 0 To UBound(Co)
.Range("F" & i + j) = Co(j)
Next j
End If
End With
End Sub
Code này chỉ đúng cho các trường hợp 1 nợ - 1 có, 1 nợ - nhiều có hoặc 1 có - nhiều nợ, còn trường hợp nhiều nợ - nhiều có thì không đúng (mình không phải là kế toán nên không biết có trường hợp cuối không).

Cám ơn anh nghiaphuc nhiều lắm! Anh làm như vậy đúng ý em rùi. Nhưng có chỗ này em hỏi thêm anh nhé!
Em thấy anh dùng
PHP:
Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
Ubound có ý nghĩa như thế nào? Em không biết cách dùng. Anh tư vấn thêm cho em chút nha!!
 
Upvote 0
Cám ơn anh nghiaphuc nhiều lắm! Anh làm như vậy đúng ý em rùi. Nhưng có chỗ này em hỏi thêm anh nhé!
Em thấy anh dùng
PHP:
Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
Ubound có ý nghĩa như thế nào? Em không biết cách dùng. Anh tư vấn thêm cho em chút nha!!
Hàm xác định thông số của mảng:
Ubound==> trả về phần tử cuối cùng của mảng
Lbound==> trả về phần tử đầu tiên của mảng
 
Upvote 0
Cám ơn anh nghiaphuc nhiều lắm! Anh làm như vậy đúng ý em rùi. Nhưng có chỗ này em hỏi thêm anh nhé!
Em thấy anh dùng
PHP:
Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
Ubound có ý nghĩa như thế nào? Em không biết cách dùng. Anh tư vấn thêm cho em chút nha!!
UBound(No) là chỉ số của phần tử cuối cùng trong mảng No. VD: mảng No có 2 phần tử thì 2 phần tử này sẽ là No(0) và No(1), như vậy, UBound(No)=1. Trong code trên, mình chia TK nợ, TK có thành 2 mảng (No và Co) và so sánh số phần tử của 2 mảng này để quyết định 2 việc: Sẽ copy dữ liệu thành mấy dòng và sẽ gán giá trị khác nhau cho cột TK nợ hay cột TK có. Trong file của bạn có 2 TK nợ là 6422 và 1331, như vậy sẽ copy dữ liệu sang 2 hàng và gán TK nợ cho 2 hàng này lần lượt là 6422 và 1331.
 
Upvote 0
Khi trước em không xem kỹ. Giờ em mới để ý kỹ thì em thấy có chỗ cột cập nhật tiền chưa đúng. Anh nghiaphuc xem và sửa lại code dùm em nhé!
(Câu hỏi cụ thể trong file đính kèm nhé!)
 

File đính kèm

Upvote 0
Khi trước em không xem kỹ. Giờ em mới để ý kỹ thì em thấy có chỗ cột cập nhật tiền chưa đúng. Anh nghiaphuc xem và sửa lại code dùm em nhé!
(Câu hỏi cụ thể trong file đính kèm nhé!)
Bạn sửa lại code như sau nhé (thú thật là đây không phải là nghiệp vụ của mình nên mình không hiểu việc ghi sổ ra sao cả => "mò mẫm"):
PHP:
Sub GhiSo()
    Dim i As Long, j As Byte, Max As Byte, No, Co
    Sheets("IN_PHIEU").Activate
    No = Split([J7], "-")
    Co = Split([J8], "-")
    Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
    i = Sheets("DATA").[A65536].End(xlUp).Row + 1
    With Sheets("DATA")
        .Range("A" & i) = [D5]
        .Range("B" & i) = [J6]
        .Range("C" & i) = [D5]
        .Range("D" & i) = [B8] & " - " & [G11]
        .Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
        .Range("A" & i).Resize(, 8).Copy .Range("A" & i).Resize(Max + 1)
        If UBound(No) > UBound(Co) Then
            For j = 0 To UBound(No)
                .Range("E" & i + j) = No(j)
                .Range("G" & i + j).Resize(, 2) = [K7].Offset(j)
            Next j
        Else
            For j = 0 To UBound(Co)
                .Range("F" & i + j) = Co(j)
                .Range("G" & i + j).Resize(, 2) = [K7].Offset(j)
            Next j
        End If
    End With
End Sub
 
Upvote 0
Bạn sửa lại code như sau nhé (thú thật là đây không phải là nghiệp vụ của mình nên mình không hiểu việc ghi sổ ra sao cả => "mò mẫm"):
PHP:
Sub GhiSo()
Dim i As Long, j As Byte, Max As Byte, No, Co
Sheets("IN_PHIEU").Activate
No = Split([J7], "-")
Co = Split([J8], "-")
Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
i = Sheets("DATA").[A65536].End(xlUp).Row + 1
With Sheets("DATA")
.Range("A" & i) = [D5]
.Range("B" & i) = [J6]
.Range("C" & i) = [D5]
.Range("D" & i) = [B8] & " - " & [G11]
.Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
.Range("A" & i).Resize(, 8).Copy .Range("A" & i).Resize(Max + 1)
If UBound(No) > UBound(Co) Then
For j = 0 To UBound(No)
.Range("E" & i + j) = No(j)
.Range("G" & i + j).Resize(, 2) = [K7].Offset(j)
Next j
Else
For j = 0 To UBound(Co)
.Range("F" & i + j) = Co(j)
.Range("G" & i + j).Resize(, 2) = [K7].Offset(j)
Next j
End If
End With
End Sub

Dạ, như vậy đã được rùi anh ah. Cám ơn anh nghiaphuc nhiều lắm!
 
Upvote 0
Anh nghiaphuc cho em hỏi thêm 1 chút nữa nhé: Nếu phát sinh cho có 1 No - 1 Co thì số tiền nó sẽ cập nhật luôn = B9? Vì nếu PS như vậy thì không có % thuế GTGT nữa anh ah. Anh sửa thêm cho em nhé!
Cám ơn anh nhiều!
 
Upvote 0
Anh nghiaphuc cho em hỏi thêm 1 chút nữa nhé: Nếu phát sinh cho có 1 No - 1 Co thì số tiền nó sẽ cập nhật luôn = B9? Vì nếu PS như vậy thì không có % thuế GTGT nữa anh ah. Anh sửa thêm cho em nhé!
Cám ơn anh nhiều!
Nếu vậy thì bạn dùng code sau (chú ý phần màu đỏ):
Mã:
Sub GhiSo()
    Dim i As Long, j As Byte, Max As Byte, No, Co
    Sheets("IN_PHIEU").Activate
    No = Split([J7], "-")
    Co = Split([J8], "-")
    Max = IIf(UBound(No) > UBound(Co), UBound(No), UBound(Co))
    i = Sheets("DATA").[A65536].End(xlUp).Row + 1
    With Sheets("DATA")
        .Range("A" & i) = [D5]
        .Range("B" & i) = [J6]
        .Range("C" & i) = [D5]
        .Range("D" & i) = [B8] & " - " & [G11]
        .Range("E" & i, "F" & i) = Application.WorksheetFunction.Transpose([J7:J8])
        .Range("A" & i).Resize(, 8).Copy .Range("A" & i).Resize(Max + 1)
        If UBound(No) > UBound(Co) Then
            For j = 0 To UBound(No)
                .Range("E" & i + j) = No(j)
                .Range("G" & i + j).Resize(, 2) = [K7].Offset(j)
            Next j
        Else
            For j = 0 To UBound(Co)
                .Range("F" & i + j) = Co(j)
                .Range("G" & i + j).Resize(, 2) = [B][COLOR=red]IIf(Max = 0, [B9], [K7].Offset(j))[/COLOR][/B]
            Next j
        End If
    End With
End Sub
 
Upvote 0
Sao mình thấy số tiền vẫn chưa được cập nhật mà, sửa lại để mọi người cùng tham khỏa đi bạn. THaNKSSSSSSSSS
 
Upvote 0
Web KT

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

Back
Top Bottom