Dear all
Nhờ mọi người chỉnh sửa giúp mình code tính tổng này với. Code này trước mình xin được của 1 bác trên đây. code ở máy mình thì chạy ra kết quả bình thường không vấn đề ji. nhưng copy file excel sang file khác thì báo lỗi # Value. Mình đang nghĩ là do khác nhau về dấu chấm, dấy phẩy trong Excel của mỗi máy.
Nhờ mọi người chỉnh sửa giúp mình code tính tổng này với. Code này trước mình xin được của 1 bác trên đây. code ở máy mình thì chạy ra kết quả bình thường không vấn đề ji. nhưng copy file excel sang file khác thì báo lỗi # Value. Mình đang nghĩ là do khác nhau về dấu chấm, dấy phẩy trong Excel của mỗi máy.
Mã:
Function DValue(ByVal Str As String) As Double
Dim StartGroup As Long, NextStartGroup As Long, EndGroup As Long, Val As Double
If Left(Str, 1) = "=" Then Str = Mid(Str, 2)
Do
StartGroup = InStr(StartGroup + 1, Str, "(")
If StartGroup > 0 Then
NextStartGroup = InStr(StartGroup + 1, Str & "(", "(")
EndGroup = InStr(StartGroup + 1, Str, ")")
If EndGroup < NextStartGroup Then
Val = 0
Str = Left(Str, StartGroup - 1) & CalculateStr(Mid(Str, StartGroup + 1, EndGroup - StartGroup - 1), Val) & Mid(Str, EndGroup + 1)
StartGroup = 0
Else
StartGroup = NextStartGroup
End If
Else
CalculateStr Str, DValue
Exit Function
End If
Loop
End Function
Mã:
Private Function CalculateStr(ByVal Str As String, ByRef Val As Double) As String
Dim TmpStr As String, ArrStr, i As Long, TmpVal As Double, P1 As String, P2 As String
If Len(Str) < 255 Then
If Len(Str) > 0 Then
Val = Evaluate("=" & Str)
CalculateStr = CStr(Val)
End If
Else
If InStr(1, Str, "+") > 0 Then
ArrStr = Split(Str, "+")
For i = 0 To UBound(ArrStr, 1)
CalculateStr ArrStr(i), TmpVal
Val = Val + TmpVal
Next
ElseIf InStr(1, Str, "-") > 0 Then
ArrStr = Split(Str, "-")
CalculateStr ArrStr(0), Val
Val = Val + TmpVal
For i = 1 To UBound(ArrStr, 1)
CalculateStr ArrStr(i), Val
Val = Val - TmpVal
Next
Else
P1 = InStrRev(Str, "*", 254): P2 = InStrRev(Str, "/", 254)
i = IIf(P1 > P2, P1, P1)
If i = 0 Then
CalculateStr = " " * " " ' Error
Else
TmpVal = Evaluate("=" & Left(Str, i - 1))
CalculateStr = CalculateStr(CStr(TmpVal) & Mid(Str, i), Val)
End If
End If
End If
End Function