Hallo Leute,
ich bin ja bemüht,zu lernen und zu verstehen.Wenn aber Magie mit im Spiel ist,kapituliere ich.
Ich liste jetzt mal meine einzelnen Codes auf und am Ende erklär ich mal mein Problem.
Modul 1:
Function Alle(Was As String, ByRef Zelle As Range) As Boolean
Dim intI As Integer, Wert As Integer, intVergleich As Integer
Select Case Was
Case "QS-Solo"
intVergleich = Tabelle1.Cells(8, Zelle.Column + 1).Value
For intI = 1 To Len(Zelle.Value)
Wert = Wert + CInt(Mid(Zelle.Value, intI, 1))
Next
Alle = IIf(Wert = intVergleich, True, False)
Case "Durch-Solo"
intVergleich = Tabelle1.Cells(8, Zelle.Column + 5).Value
On Error Resume Next
Alle = IIf(Zelle.Value Mod intVergleich = 0, True, False)
On Error GoTo 0
Case "Prim-Solo"
For intI = 2 To Int(Sqr(Zelle.Value))
If Zelle.Value Mod intI = 0 Then Exit For
Next intI
Alle = intI \> Int(Sqr(Zelle.Value))
Case Else
'nix
End Select
End Function
Anmerkung: Alle 3 „Case-Anweisungen“ klappen einwandfrei
Sub Berechne(strWas As String, strWo As String)
Dim strZ As String, ZeiS As Long, ZeiP As Long, Zei As Long
Dim rngWo As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With Worksheets("Tabbi")
Set rngWo = .Range(strWo)
rngWo.Offset(0, 1).Resize(154, 3).ClearContents
If strWas = "Nix machen" Then GoTo Ende
For Zei = 0 To 150 Step 5
If Application.Sum(rngWo.Offset(Zei, 0).Resize(4, 1)) 0 Then
For ZeiS = 0 To 3 Step 1
If rngWo.Offset(Zei + ZeiS, 0) "" Then
If Alle(strWas, rngWo.Offset(Zei + ZeiS, 0)) = True Then
rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 5) 'rngWo.Offset(Zei + ZeiS, 1).Value = .Cells(2, rngWo.Column + 3)
End If
End If
Next ZeiS
End If
Next Zei
End With
Ende:
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Tabelle 1:
Private Sub Worksheet\_Change(ByVal Target As Range)
Dim OK As Boolean, N As Integer, Wert, Auswahl As String
On Error GoTo hell
If Target.Count \> 1 Then Exit Sub
If Target.Row \> 166 Or Target.Row 5 Then
For N = 6 To 104 Step 7
If Target.Column = N Then
OK = True
Exit For
End If
Next N
Else
OK = True
End If
If OK = False Then Exit Sub
If Target.Value = "" And Target.Column = 5 Then Exit Sub 'Von nier
If Target.Column = 5 Then
If Target.Value = "" Then Exit Sub
If Application.CountIf(Range("E13:E166"), Target.Value) \> 1 Then
Application.EnableEvents = False
MsgBox Target.Value & " ist doppelt vorhanden"
Target.ClearContents
Target.Select
Application.EnableEvents = True
End If 'bis hier ist der Teil beinahe identisch mit dem auskommentierten weiter unten
Else
Application.EnableEvents = False
Auswahl = Tabelle1.OLEObjects("Runde" & CInt((Target.Column + 1) / 7)).Object.Value
If Auswahl "Nix machen" Then
Call Berechne(Auswahl, Cells(13, Target.Column).Address(0, 0))
End If
End If
hell:
If Err.Number 0 Then MsgBox Err.Number & vbCr & Err.Description
Application.EnableEvents = True
End Sub
Private Sub Worksheet\_SelectionChange(ByVal Target As Range)
Dim Ber As Range, Index As Integer, i, Wert, N As Integer
If Target.Count 1 Then Exit Sub
If Target.Row 166 Then Exit Sub
For N = 1 To 15 'Anzahl der Runden
If Not Ber Is Nothing Then
Set Ber = Application.Union(Ber, Columns(6 + (N - 1) \* 7))
Else
Set Ber = Columns(6 + (N - 1) \* 7)
End If
Next N
If Intersect(Target, Ber) Is Nothing Then Exit Sub
Wert = Application.Sum(Target.Offset(-(Target.Row + 2) Mod 5, 0).Resize(4, 1))
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Cells(2, Target.Column + 1).Value = Wert 'Range(Ber(Index) & "2").Value = Wert Diese Zeile muss m.E. abgeändert werden
Cells(3, Target.Column + 1).Value = "Tisch " & Cells(Target.Offset(-(Target.Row + 2) Mod 5).Row, 4).Value 'Range(Ber(Index) & "3").Value = "Tisch " & Cells(Target.Offset(-(Target.Row + 2) Mod 5).Row, 4).Value Diese Zeile muss m.E. abgeändert werden
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
So,ich habe mittlerweile gelernt,dass es die Funktion „Primzahl“ als vordefinierte Funktion gibt,Quersumme und Division nicht,sondern nur als benutzerdefinierte.
Wenn ich nun aber die benutzerdefinierte Funktion von Quersumme auskommentiere,die sogar nachträglich erst hinzugekommen ist,und die Case-Anweisung QS-Solo trotzdem funktioniert,fange ich an zu verzweifeln.
Da Reinhard die gute Seele erst aus dem KH entlassen worden ist,möchte ich ihn nicht direkt damit überfallen.
Deshalb meine Frage an Euch. Wo in dem gottverdammten Code stecken die 3 Berechnungen der Case-Anweisungen „QS-Solo“,„Durch-Solo“ und „Prim-Solo“? Irgendwo müssen die doch mit qsum,prim oder dem / Strich angesprochen werden,oder mit was auch immer.
Wenn ich das gefunden habe,kann ich auch weiter nachlesen.Achso,ist es normal, dass ich diese Codezeilen nicht mit der F8-Taste Zeile für Zeile abarbeiten kann.Es kommt immer nur ein Ping.Bei anderen Teilen klappt das wunderbar.
Hier könnt ihr Euch die Tabbi mal ansehen,wer mag
http://www.file-upload.net/download-7285085/Meine-Te…
LG Frank