Aca te hice un ejemplo de una funcion que sirve solamente para sumar todos las sumas que tenga un string....
Osea que si en un string (textbox) tenes "10+5+3+6+8+9" la funcion te lo suma. Tambien trabaja con decimales.
No es lo mas optimo, pero sirve, y te puede orientar para enfocarte en otras operaciones y luego hacer recursividad para resolver entre parentesis etc.
Código:
'Programado por CULD
'[email protected]
'Suma de cadenas en un String, es decir que si se quiere sumar
'el string "10+2+5+9+6+3+5+7", la funcion Operacion_Suma devuelve la suma
'de ese string
'TAMBIEN TRABAJA CON DECIMALES, SE PUEDE SUMAR EJ: "0,25+0,75+5"
Public Function Operacion_Suma(Texto As String) As Double
On Error Resume Next 'para evitar error (si se pone 10+10+++++5)
Dim Cantidad As Integer
Dim Suma As Double
Dim X As Integer
Cantidad = Cantidad_Sumas(Texto) 'me fijo cuantas sumas hay
Suma = 0 'inicializo la suma
For X = 1 To Cantidad + 1 'recorro todos los numeros
Suma = Suma + CDbl(SepararDatos(X, Texto, Asc("+"))) 'sumo los numeros
Next X
Operacion_Suma = Suma 'envio el valor de la suma
End Function
Public Function Cantidad_Sumas(Texto As String)
Dim X As Integer
Dim Cantidad
Cantidad_Sumas = 0 'inicializo la cantidad
For X = 1 To Len(Texto) 'recorro el largo del texto
If Mid(Texto, X, 1) = "+" Then 'verifico si es una suma
Cantidad_Sumas = Cantidad_Sumas + 1 'acumulo que se encontro 1 suma
End If
Next X
End Function
Public Function SepararDatos(ByVal pos As Integer, ByVal Text As String, ByVal SepASCII As Integer) As String
'*****************************************************************
'Devuelve el string del campo
'*****************************************************************
Dim i As Integer
Dim LastPos As Integer
Dim CurChar As String * 1
Dim FieldNum As Integer
Dim Seperator As String
Seperator = Chr(SepASCII)
LastPos = 0
FieldNum = 0
For i = 1 To Len(Text)
CurChar = Mid$(Text, i, 1)
If CurChar = Seperator Then
FieldNum = FieldNum + 1
If FieldNum = pos Then
SepararDatos = Mid$(Text, LastPos + 1, (InStr(LastPos + 1, Text, Seperator, vbTextCompare) - 1) - (LastPos))
Exit Function
End If
LastPos = i
End If
Next i
FieldNum = FieldNum + 1
If FieldNum = pos Then
SepararDatos = Mid$(Text, LastPos + 1)
End If
End Function