Würde ja also nur das Problem mit den Zahlen bleiben.
Wenn du dir die Zahl nur ansehen willst und nicht vor hat, damit effektiv zu rechnen, dann versuch mal diese Funktion hier.
Option Explicit
Dim strNumber As String
Private Sub Form_Load()
strNumber = "12345678902547854785478775456554545464654654654654654746498"
Call AddToNumber("123456789025478547854787754565545454465445646546498")
End Sub
Private Function AddToNumber(ByVal strNumber2Add As String)
Dim intNumber As Integer 'akuelle Zahl
Dim intNumber2Add As Integer
Dim intCarry As Integer 'Übertrag
Dim iItem As Integer 'Aktuelles Element
Dim bReady As Boolean
Dim strLeft As String
While (bReady = False)
'aktuelle Nummer für Berechnung
If Len(strNumber) > iItem Then
intNumber = CInt(Left$(Right$(strNumber, iItem + 1), 1))
Else
intNumber = 0
End If
'akuelle Zahl für Berechnung aus zu addierender Zahl
If Len(strNumber2Add) > iItem Then
intNumber2Add = CInt(Left$(Right$(strNumber2Add, iItem + 1), 1))
Else
intNumber2Add = 0
End If
'Prüfen ob fertig
If (intNumber2Add = 0 And intNumber = 0) And (Len(strNumber) <= iItem And _
Len(strNumber2Add) <= iItem) And intCarry = 0 Then
bReady = True
Else
'Aktuelle Zahl + aktuell zu addierende Zahl + Übertrag
intCarry = intNumber + intNumber2Add + intCarry
If Len(strNumber) > iItem Then
strLeft = Left$(strNumber, Len(strNumber) - (iItem + 1))
Else
strLeft = ""
End If
strNumber = strLeft & CStr(intCarry Mod 10) & Right$(strNumber, iItem)
'Übertag berechnen
intCarry = (intCarry - (intCarry Mod 10)) / 10
iItem = iItem + 1
End If
Wend
End Function Ein Versuch auf die Schnelle, scheint aber trotzdem richtig zu rechnen.
Wenn du das mit meiner Funktion vom Anfang koppelst, dann bekommst du soetwas in der Art:
Option Explicit
Dim strNumber As String
Private Sub Form_Load()
Dim arr_vTest() As Variant
arr_vTest = Array("a", "b", "c")
Call DoIt(arr_vTest, 0, "")
Debug.Print strNumber
End Sub
Private Function DoIt(arr_vItems() As Variant, iItem As Integer, strString As _
String) As String
Dim iIndex As Integer
Dim sString As String
For iIndex = LBound(arr_vItems) To UBound(arr_vItems)
sString = strString & arr_vItems(iIndex)
If iItem > 4 Then
DoEvents
End If
If UBound(arr_vItems) = iItem Then
'letztes element erreicht
Debug.Print sString
Call AddToNumber("1")
Else
Call DoIt(arr_vItems, iItem + 1, sString)
Debug.Print sString
Call AddToNumber("1")
End If
Next iIndex
End Function
Private Function AddToNumber(ByVal strNumber2Add As String)
Dim intNumber As Integer 'akuelle Zahl
Dim intNumber2Add As Integer
Dim intCarry As Integer 'Übertrag
Dim iItem As Integer 'Aktuelles Element
Dim bReady As Boolean
Dim strLeft As String
While (bReady = False)
'aktuelle Nummer für Berechnung
If Len(strNumber) > iItem Then
intNumber = CInt(Left$(Right$(strNumber, iItem + 1), 1))
Else
intNumber = 0
End If
'akuelle Zahl für Berechnung aus zu addierender Zahl
If Len(strNumber2Add) > iItem Then
intNumber2Add = CInt(Left$(Right$(strNumber2Add, iItem + 1), 1))
Else
intNumber2Add = 0
End If
'Prüfen ob fertig
If (intNumber2Add = 0 And intNumber = 0) And (Len(strNumber) <= iItem And _
Len(strNumber2Add) <= iItem) And intCarry = 0 Then
bReady = True
Else
'Aktuelle Zahl + aktuell zu addierende Zahl + Übertrag
intCarry = intNumber + intNumber2Add + intCarry
If Len(strNumber) > iItem Then
strLeft = Left$(strNumber, Len(strNumber) - (iItem + 1))
Else
strLeft = ""
End If
strNumber = strLeft & CStr(intCarry Mod 10) & Right$(strNumber, iItem)
'Übertag berechnen
intCarry = (intCarry - (intCarry Mod 10)) / 10
iItem = iItem + 1
End If
Wend
End Function Gruß Stephan |