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
	
	
	  


