quyenpv
Thu nhặt kiến thức
- Tham gia
- 5/1/13
- Bài viết
- 729
- Được thích
- 97
- Giới tính
- Nam
- Nghề nghiệp
- Decode cuộc đời!
Tôi có code đang dùng cho VBA chạy rất tốt và đúng yêu cầu, tuy nhiên khi chuyển sang vb.net code chỉ xuất được giá trị đầu tiên của mảng không biết lỗi ở đâu mong anh chị quen vb.net chỉ giúp
Dữ liệu ban đầu

Dữ liệu mong muốn xuất ra (Code VBA chạy tốt)

Đây là code VBA của tôi
Đây là code VB.Net
Kết quả khi chạy code VB.net

Dữ liệu ban đầu

Dữ liệu mong muốn xuất ra (Code VBA chạy tốt)

Đây là code VBA của tôi
Mã:
Sub Run_THop_GtrPO()
'Add 25/06/2022: Bo sung tong hop tham dinh ra Sheet Tong hop
Dim arr_DN(), iR1&, res_DN()
Set sh_PLPO = Sheets("PO_PLHD") 'Sheet Tham Dinh Quyet toan
Sheets("PO-BTH").Select
Thue_VAT = GetRegistry(HKEY_SET_HC, "Thue_VAT") / 100
'MsgBox sh_TH_DNghiQT.Range("C" & sh_TH_DNghiQT.Rows.count).End(xlUp).row
arr_DN = sh_PLPO.Range("A9:K" & sh_PLPO.Range("D" & sh_PLPO.Rows.count).End(xlUp).Row).value
sRow = UBound(arr_DN)
ReDim res_DN(1 To sRow, 1 To 6)
For i = 1 To sRow
If arr_DN(i, 1) = "HM" Then
k = k + 1
res_DN(k, 1) = k
res_DN(k, 2) = arr_DN(i, 3)
'Don gia truoc thue
res_DN(k, 3) = Round(arr_DN(i, 10) / (1 + Thue_VAT), 1)
'Thue VAT
res_DN(k, 4) = Round((arr_DN(i, 10) / (1 + Thue_VAT)) * Thue_VAT, 1)
'Tong cong
res_DN(k, 5) = res_DN(k, 3) + res_DN(k, 4)
End If
Next i
With Sheets("PO-BTH") 'Sheet PLHD_GPE
.Range("D10").value = "Thu" & ChrW(7871) & " VAT (" & Thue_VAT * 100 & "%)"
'End Ktra
j = .Cells(Rows.count, "G").End(xlUp).Row
If j > 11 Then
'Xoa toan bo bang du lieu hien huu dang co
.Rows("11:" & j - 1).Delete Shift:=xlShiftUp
Else
.Range("A11:F" & j - 1).ClearContents
End If
.Range("A11:A" & 11 + k).EntireRow.Insert
If k > 0 Then
.Range("A11").Resize(k, 6).value = res_DN
End If
j = .Cells(Rows.count, "G").End(xlUp).Row
.Range("B" & j).value = "T" & ChrW(7892) & "NG C" & ChrW(7896) & "NG"
.Range("C" & j).Formula = "=SUBTOTAL(9,C10:C" & j - 1 & ")"
.Range("D" & j).Formula = "=SUBTOTAL(9,D10:D" & j - 1 & ")"
.Range("E" & j).Formula = "=SUBTOTAL(9,E10:E" & j - 1 & ")"
' .Range("A" & j + 1).value = DocSoUni(.Range("H" & j))
.Range("C11:I" & j).NumberFormat = "#,##0"
.Range("B11:B" & j).WrapText = 1
.Range("B11:B" & j).HorizontalAlignment = xlJustify
.Range("A11:F" & j).Font.Bold = False
.Range("A" & j & ":I" & j).Font.Bold = True
.Range("A11:F" & j).Borders.LineStyle = 1
.PageSetup.PrintArea = "$A$1:$F" & j + 4 & ""
End With
End Sub
Đây là code VB.Net
Mã:
Sub Run_THop_GtrPO()
Dim sh_PLHD As Excel.Worksheet = Globals.ThisAddIn.GetWorksheet("PO_PLHD")
Dim arr As Object(,) = sh_PLHD.Range("A9:K" & sh_PLHD.Range("D" & sh_PLHD.Rows.Count).End(XlDirection.xlUp).Row).Value
Dim sRow As Integer = arr.GetUpperBound(0)
Dim Thue_VAT As Double = ReadRegistryValue(HKEY_SET_HC, "Thue_VAT") / 100
Dim res_DN As Object(,)
'ReDim Preserve res_DN(sRow + 1, 5)
ReDim res_DN(0 To sRow, 0 To 6)
Dim k As Integer = 0
For i As Integer = 1 To sRow
If arr(i, 1).ToString() = "HM" Then
k += 1
res_DN(k, 0) = k
res_DN(k, 1) = arr(i, 3)
'Don gia truoc thue
res_DN(k, 2) = Math.Round(arr(i, 10) / (1 + Thue_VAT), 1)
'Thue VAT
res_DN(k, 3) = Math.Round((arr(i, 10) / (1 + Thue_VAT)) * Thue_VAT, 1)
'Tong cong
res_DN(k, 4) = res_DN(k, 2) + res_DN(k, 3)
MsgBox("Có HM thứ: " & k & "tại dòng " & i & "và có giá trị: " & res_DN(k, 4))
End If
Next i
Dim sh_BTH As Excel.Worksheet = Globals.ThisAddIn.GetWorksheet("PO-BTH")
sh_BTH.Select()
With sh_BTH
.Range("D10").Value = "Thuế VAT (" & Thue_VAT * 100 & "%)"
'End Ktra
Dim j As Integer = Globals.ThisAddIn.GetLastRowInSheet(sh_BTH, "G")
MsgBox(j)
If j > 11 Then
'Xoa toan bo bang du lieu hien huu dang co
.Rows("11:" & j - 1).Delete(Shift:=XlDeleteShiftDirection.xlShiftUp)
Else
.Range("A11:F" & j - 1).ClearContents()
End If
.Range("A11:A" & 11 + k).EntireRow.Insert()
If k > 0 Then
.Range("A11").Resize(k, 6).Value = res_DN
End If
j = Globals.ThisAddIn.GetLastRowInSheet(sh_BTH, "G")
.Range("B" & j).Value = "TỔNG CỘNG"
.Range("C" & j).Formula = "=SUBTOTAL(9,C10:C" & j - 1 & ")"
.Range("D" & j).Formula = "=SUBTOTAL(9,D10:D" & j - 1 & ")"
.Range("E" & j).Formula = "=SUBTOTAL(9,E10:E" & j - 1 & ")"
.Range("C11:I" & j).NumberFormat = "#,##0"
.Range("B11:B" & j).WrapText = 1
'.Range("B11:B" & j).HorizontalAlignment = xlJustify
.Range("A11:F" & j).Font.Bold = False
.Range("A" & j & ":I" & j).Font.Bold = True
.Range("A11:F" & j).Borders.LineStyle = 1
.PageSetup.PrintArea = "$A$1:$F" & j + 4 & ""
End With
End Sub
