Ich habe folgendes Problem:
Ich habe im StartEditMode-Event eine Prüfung eingebaut die überprüft ob die nächste Zeile editiert werden darf (is für die TAB-Taste, für den Mausklick nutze ich CellClick).
Bin ich mit der TAB-Taste am ende der Zeile angekommen springt das 'Cursor-Feld' auch in die richtige Zeile und Zelle. Tippe ich dann aber was ein, springt die Eingabe nach verlassen der Zelle eine Spalte höher als eingetragen.
Ich denke das es dadran liegt, das ich .DoEdit im StartEditMode aufrufe und es dadurch zum nochmaligen aufruf von StartEditMode kommt während der erste 'durchlauf' von StartEditMode noch nicht beendet ist und nach dem zweiten StartEditMode wieder ins erste StartEditMode zurückläuft und dann die Variablen 'nRow' und 'nCol' falsch gesetzt werden. oder so
frage also: wie mache ich es, das die Zeilen in denen keine Eingabe erfolgten soll trotz AutoEdit übersprungen werden. Außerdem hab ich das selbe Problem im Spaltenbereich. Ich habe in dem Grid Spalten (siehe bild, kleine trennspalten) die auch vom TAB übergangen werden sollen. Da funktioniert es allerdings noch weniger. .DoEdit wird gänzlich ignoriert, weil der .IsEditMode nicht gleich MODE_ADDNEW ist denke ich aber auch mit SendKeys "{TAB}" wird die Trennspalte beim druck auf TAB mit angewählt.
Meine Grid-Einstellungen:
.DataMode = Mode_List
.AutoEdit = True
...
Mein Grid sieht so aus (Essensbestellplan für Menü A,B,C):
Der Sprung in die nächste spalte (Monat wird ignoriert [sieht also richtig aus])
So sieht der Fehler aus (Eingaben sind hochgesprungen und Curser ist in der Vertikalen Trennspalte)
Code:
Private Sub grd_Bestellungen_StartEditMode(ByVal nRow As Long, ByVal nCol As _
Long, sText As String, bCancel As Boolean)
With grd_Bestellungen
If .Columns(nCol).KEY = "Woche" Then
'bCancel = True
If .ListItems(nRow).KEY = "" Then
.DoEdit nRow + 1, nCol + 1
Else
.DoEdit nRow, nCol + 1
End If
End If
End With
If grd_Bestellungen.Columns(nCol).KEY = "t1" Then 'Trennlinie1
'SendKeys "{TAB}"
'grd_Bestellungen.DoEdit nRow, "A3"
End If
End Sub Private Sub grd_Bestellungen_AfterCellEdit(nRow As Long, nCol As Long, ByVal _
sText As String)
HighlightWorked nRow, nCol
End Sub
Private Sub HighlightWorked(nRow As Long, nCol As Long)
Dim lf_Col As Integer
With grd_Bestellungen
.Text(nRow, "changed") = 1
If .ListItems(nRow).BackColor <> gc_Color_RowWasEdit Then _
.ListItems(nRow).BackColor = gc_Color_RowWasEdit
.ListItems(nRow).CellItalic("Woche") = True
.ListItems(nRow).CellBackColor(nCol) = gc_Color_CellWasEdit
End With
mf_Changes = True
End Sub Real programmer do not comment their code;
what?s hard to write should be hard to read  |