ich bin gerade mit Excel Office 2010 am verzweifeln mit folgendem Problem:
Ein Sheet mit ca 1000 Zeilen soll durchsucht werden und bei fehlendem Inhalt der Zelle soll eine Meldung ausgegeben werden (selbst erstellt Userform) und die betreffende Zelle(n) rot markiert werden. Das klappt auch sowiet.
Allerdings soll der User dann auch direkt den Inhalt der Zelle nach tragen oder bearbeiten können. Und hier bin ich am verzweifeln.
Wie stoppe ich den Programmablauf mitten in der Schleife z.B. bei treffer in zeile 435? Bin dann irgendwan auf Do Events gestoßen.
Damit kann ich zwar den Code anhalten und auch die aufgerufene Userform verschieben (Show Modal = False) und auch auf die anderen Sheets wechseln, aber ich kann die Zelle nicht bearbeiten. Es werden keine Tastatureingaben übernommen.
Was zur *** mache ich falsch? Ich habe dieses Problem an mehreren Stellen, nachfolgend der code für eine davon:
ws wird übergeben, Blatt3 ist global deklariert.
Code der Funktion/ der Sub
Function c_GCK_Nummer_vs_SPD_Nummer_prüfen(ByVal ws As String)
' Das Makro prüft, ob die Projekte die jeweilige richtige GCK Nummer haben. Basis ist "Blatt3". Es wird aus
' dem Import-Sheet ws die SPD und GCK ausgelesen und mit diesen Werten die Function c_SPD_vs_GCK aufgerufen.
' Diese kann die Prüfvariable p verändern. Wenn p nicht von der Function auf 0 gesetzt wird, wird die
' Userform c2_SPD_vs_GCK als Fehlermeldung aufgerufen.
Dim i As Integer ' Variable für Do-Event-Schleife
Dim cell As Variant
Dim r As Range ' Bereichsvariable für Suchbereich im Such-Sheet
Dim u As Integer ' für letzte genutzte Zeile des Such-Sheets
Dim v As Integer ' für letzte genutzte Zeile des Vergleich-Sheets
Dim p As Integer ' Prüfvariable, ob SPD und GCK stimmen
Dim spd As String ' Für SPD Bezeichnung aus Import-Sheet
Dim gck As String ' Für GCK Bezeichnung aus Import-Sheet
With ThisWorkbook.Worksheets(ws)
u = .UsedRange.Rows.count
v = ThisWorkbook.Worksheets(Blatt3).UsedRange.Rows.count
Set r = .Range(.Cells(2, 16), .Cells(u, 16)) ' Bereich wird definiert
u = 2
For Each cell In r ' Alle Zellen im Bereich r werden nacheinander durchlaufen
spd = cell ' Nummer1 wird ausgelesen
gck = .Cells(u, 17).Value ' Nummer2 wird ausgelesen
p = 1
If p 0 Then ' Wenn die SPD NICHT zur GCK passt
.Activate ' Betreffendes Sheet wird ausgewählt
cell.Select ' Betreffende Zelle wird markiert
cell.Interior.ColorIndex = 3 ' Zelle wird rot hinterlegt
.Cells(u, 17).Interior.ColorIndex = 3 ' Zelle wird rot hinterlegt
stopperC = 1
c2_SPD_vs_GCK.Show ' Userform wird aufgerufen
Do
For i = 0 To 10
DoEvents
Next
Loop Until (stopperC = 0)
End If
u = u + 1
Next cell
End With
Set r = Nothing
End Function
Code der Userform (Weiter Button)
Private Sub Weiter_Button_Click()
c2_SPD_vs_GCK.Hide
stopperC = 0
Unload c2_SPD_vs_GCK
End Sub
Ich hoffe, einer wei weiter. Wahrscheinlich ist es nur irgend was kleines (*hoff*)