Nhờ tìm lỗi của Hàm?

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

trungnt

Thành viên hoạt động
Tham gia
2/2/07
Bài viết
135
Được thích
88
Giúp tôi với !!!

Tôi viết một hàm để tra các con số trong bảng tính. Khi viết xong rồi tôi có chạy thử vài lần thì chạy được nhưng chưa ưng ý lắm. Trong lần sửa gần đây, để khai báo lại mảng 2 chiều và 1 chiều cho đúng với phần tử đã gán nhưng không hiểu sao khi bật xem lại trong phần View watch window thì không thấy phần tử nào cả và hàm cho ra kết qủa #Value!. Tôi mò mẫm hòai mà không biết lỗi do đâu. Xin các bác trên diễn đàn ai biết xin chỉ giúp ..!$@!!!$@!!!$@!!!$@!!.... Tôi xin cám ơn nhiều nhiều!!!!!!!!. Code của tôi đã viết như sau:
Mã:
Function Tra(Tisoh As Single, TisoE As Single, Ygocms As Single)
Dim M(1 To 4, 1 To 5) As Long
Dim H(1 To 4) As Single
Dim C(1 To 5) As Single
Dim HsoAPhi(1 To 7) As Single
Dim Yphi(1 To 7) As Single
Dim mC1 As Single
Dim mC2 As Single
Dim Aphi As Single
Dim Phigocms As Single
Dim i As Integer
Dim j As Integer
Dim k As Integer
M(1, 1) = 1: M(1, 2) = 2: M(1, 3) = 3: M(1, 4) = 5: M(1, 5) = 7
M(2, 1) = 2: M(2, 2) = 3: M(2, 3) = 7: M(2, 4) = 9: M(2, 5) = 11
M(3, 1) = 3: M(3, 2) = 4.5: M(3, 3) = 8.5: M(3, 4) = 10: M(3, 5) = 14
M(4, 1) = 5: M(4, 2) = 7: M(4, 3) = 10: M(4, 4) = 12: M(4, 5) = 16
H(1) = 4: H(2) = 6: H(3) = 9: H(4) = 12
C(1) = 2: C(2) = 4: C(3) = 6: C(4) = 8: C(5) = 10
HsoAPhi(1) = 0.02: HsoAPhi(2) = 0.05: HsoAPhi(3) = 0.07: HsoAPhi(4) = 0.09: HsoAPhi(5) = 0.12: HsoAPhi(6) = 0.16: HsoAPhi(7) = 0.21
Yphi(1) = 9: Yphi(2) = 14: Yphi(3) = 18: Yphi(4) = 24: Yphi(5) = 27: Yphi(6) = 32: Yphi(7) = 40
For j = 1 To 5
   For i = 1 To 4
      Do While ((Tisoh > C(j - 1) Or Tisoh = C(j - 1)) And (Tisoh < C(j) Or Tisoh = C(j))) And ((TisoE > H(i - 1) Or TisoE = H(i - 1)) And (TisoE < H(i) Or TisoE = H(i)))
        mC1 = M(i - 1, j - 1) + ((TisoE - H(i - 1)) / (H(i) - H(i - 1))) * (M(i, j - 1) - M(i - 1, j - 1))
        mC2 = M(i - 1, j) + ((TisoE - H(i)) / (H(i) - H(i - 1))) * (M(i, j) - M(i - 1, j))
      Exit Do
      Loop
      Phigocms = mC1 + ((Tisoh - C(j - 1)) / (C(j) - C(j - 1))) * (mC2 - mC1)
   Next
Next
For k = 1 To 7
    Do While (Ygocms > Yphi(k - 1) Or Ygocms = Yphi(k - 1)) And (Ygocms < Yphi(k) Or Ygocms = Yphi(k))
    Aphi = HsoAPhi(k - 1) + ((Ygocms - Yphi(k - 1)) / (Yphi(k) - Yphi(k - 1))) * (HsoAPhi(k) - HsoAPhi(k - 1))
    Exit Do
    Loop
Next
    Tra = Round((Phigocms / Aphi), 2)
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
trungnt đã viết:
Mã:
Function Tra(Tisoh As Single, TisoE As Single, Ygocms As Single)
Dim M(1 To 4, 1 To 5) As Long
Dim H(1 To 4) As Single
Dim C(1 To 5) As Single
Dim HsoAPhi(1 To 7) As Single
Dim Yphi(1 To 7) As Single
Dim mC1 As Single
Dim mC2 As Single
Dim Aphi As Single
Dim Phigocms As Single
Dim i As Integer
Dim j As Integer
Dim k As Integer
[COLOR=red][B]M(1, 1)[/B][/COLOR] = 1: M(1, 2) = 2: M(1, 3) = 3: M(1, 4) = 5: M(1, 5) = 7
M(2, 1) = 2: M(2, 2) = 3: M(2, 3) = 7: M(2, 4) = 9: M(2, 5) = 11
M(3, 1) = 3: M(3, 2) = 4.5: M(3, 3) = 8.5: M(3, 4) = 10: M(3, 5) = 14
M(4, 1) = 5: M(4, 2) = 7: M(4, 3) = 10: M(4, 4) = 12: M(4, 5) = 16
H(1) = 4: H(2) = 6: H(3) = 9: H(4) = 12
C(1) = 2: C(2) = 4: C(3) = 6: C(4) = 8: C(5) = 10
HsoAPhi(1) = 0.02: HsoAPhi(2) = 0.05: HsoAPhi(3) = 0.07: HsoAPhi(4) = 0.09: HsoAPhi(5) = 0.12: HsoAPhi(6) = 0.16: HsoAPhi(7) = 0.21
Yphi(1) = 9: Yphi(2) = 14: Yphi(3) = 18: Yphi(4) = 24: Yphi(5) = 27: Yphi(6) = 32: Yphi(7) = 40
For j = 1 To 5
For i = 1 To 4
Do While ((Tisoh > C(j - 1) Or Tisoh = C(j - 1)) And (Tisoh < C(j) Or Tisoh = C(j))) And ((TisoE > H(i - 1) Or TisoE = H(i - 1)) And (TisoE < H(i) Or TisoE = H(i)))
mC1 = [COLOR=red][B]M(i - 1, j - 1)[/B][/COLOR] + ((TisoE - H[COLOR=red][B](i - 1)[/B][/COLOR]) / (H(i) - H[COLOR=red][B](i - 1)[/B][/COLOR])) * ([COLOR=red][B]M(i, j - 1)[/B][/COLOR] - M(i - 1, j - 1))
mC2 = [B][COLOR=red]M(i - 1, j)[/COLOR][/B] + ((TisoE - H(i)) / (H(i) - H[COLOR=red][B](i - 1)[/B][/COLOR])) * (M(i, j) - M([COLOR=red][B]i - 1[/B][/COLOR], j))
Exit Do
Loop
Phigocms = mC1 + ((Tisoh - C([COLOR=red][B]j - 1[/B][/COLOR])) / (C(j) - C([COLOR=red][B]j - 1[/B][/COLOR]))) * (mC2 - mC1)
Next
Next
For [COLOR=red]k = 1[/COLOR] To 7
Do While (Ygocms > Yphi([COLOR=red][B]k - 1[/B][/COLOR]) Or Ygocms = Yphi([COLOR=red][B]k - 1[/B][/COLOR])) And (Ygocms < Yphi(k) Or Ygocms = Yphi(k))
Aphi = HsoAPhi([B][COLOR=red]k - 1[/COLOR][/B]) + ((Ygocms - Yphi([COLOR=red][B]k - 1[/B][/COLOR])) / (Yphi(k) - Yphi([COLOR=red][B]k - 1[/B][/COLOR]))) * (HsoAPhi(k) - HsoAPhi([B][COLOR=red]k - 1[/COLOR][/B]))
Exit Do
Loop
Next
Tra = Round((Phigocms / Aphi), 2)
End Function

Bác coi lại mấy chỗ đó (nếu khai báo M(4,5) thì nó hiểu là từ phần tử M(0-3,0-4) ).

Thân
 
Upvote 0
Theo mình, đoạn code trên có lỗi khai báo mãng chưa phù hợp:
1. Phần khai báo:
Dim M(1 To 4, 1 To 5) As Long
Dim H(1 To 4) As Single
Dim C(1 To 5) As Single
Dim HsoAPhi(1 To 7) As Single
Dim Yphi(1 To 7) As Single
2. Nhưng khi vòng lặp chạy sẽ tạo ra các phần tử M(0,0), M(0,1)...,
H(0),C(0),HsoAPhi(0),Yphi(0).
3. Bạn có thể chỉnh lại phần khai báo hoặc chỉnh lại giá trị ban đầu của các biến j, i, k bằng 2.
 
Upvote 0
Tôi thử trích lấy 1 biến M và các phần tử đã gán cho biến M. Khi thử, chưa bỏ vòng lặp vào thì xảy ra 2 tình huống: vui thì máy cho gán các phần, còn buồn thì không. Tôi cũng chưa rõ vì sao. Nhờ 2 anh SoiBien, Voda và các thành viên khác chỉ giúp.... Đây là Code đã thử của tôi, lúc này máy cho gán:
 

File đính kèm

  • Thuganptu.jpg
    Thuganptu.jpg
    17.2 KB · Đọc: 10
Upvote 0
trungnt đã viết:
Tôi thử trích lấy 1 biến M và các phần tử đã gán cho biến M. Khi thử, chưa bỏ vòng lặp vào thì xảy ra 2 tình huống: vui thì máy cho gán các phần, còn buồn thì không. Tôi cũng chưa rõ vì sao. Nhờ 2 anh SoiBien, Voda và các thành viên khác chỉ giúp.... Đây là Code đã thử của tôi, lúc này máy cho gán:

Lỗi gì vậy bạn? tôi chẳng thấy nó báo lỗi lần nào! Bạn post luôn cái lỗi đó lên được không?
 
Upvote 0
Web KT

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

Back
Top Bottom