2017-05-31 6 views
0

ich das Benutzerformular laden zu aktualisieren und die Daten bearbeiten, wenn ich das Update klicken die letzte Zeile der Tabelle statt der Zeile aktualisiert wird iVerwenden VBA Userform aktive Zeile

Private Sub UpdateExpenses_Click() 

ModifyTableRow ExpensesTable.ListRows(CurrentRow).Range 

UpdatePositionCaption 

End Sub 

Private Sub ModifyTableRow(TableRow As Range) 

With TableRow 

    .Cells(1, 1) = Calendar1.Value 
    .Cells(1, 2) = StaffName.Value 
    .Cells(1, 4) = SystemID.Value 
    .Cells(1, 6) = SystemAEnd.Value 
    .Cells(1, 7) = SystemBEnd.Value 
    .Cells(1, 3) = CircuitDesc.Value 
    .Cells(1, 9) = CircuitStatus.Value 
    .Cells(1, 10) = Comments.Value 
    .Cells(1, 8) = TypeofCircuit.Value 
    .Cells(1, 5) = ChannelNum.Value 



End With 

ChangeRecord.Max = ExpensesTable.ListRows.Count 

End Sub

ausgewählt haben

jede Hilfe mit diesem Code wäre sehr geschätzt

+0

I vermuten, dass, wenn Sie das Formular aufgerufen haben Ihre "aktive Zeile" verloren Fokus –

+0

den Code von "ModifyTableRow", oder den relevanten Teil davon. –

Antwort

0

Nachdem das Spiel mit dem Code diese Lösung für mich gearbeitet

Option Explicit 
Private ExpensesTable As ListObject 
Private CurrentRow As Long 
Private WithEvent`enter code here`s Calendar1 As cCalendar 

Private Sub UpdateExpenses_Click() 
CurrentRow = ActiveCell.Row 
Cells(CurrentRow, 2) = Calendar1.Value 
Cells(CurrentRow, 3) = Me.StaffName.Value 
Cells(CurrentRow, 4) = Me.CircuitDesc.Value 
Cells(CurrentRow, 5) = Me.SystemID.Value 
Cells(CurrentRow, 6) = Me.ChannelNum.Value 
Cells(CurrentRow, 7) = Me.SystemAEnd.Value 
Cells(CurrentRow, 8) = Me.SystemBEnd.Value 
Cells(CurrentRow, 9) = Me.TypeofCircuit.Value 
Cells(CurrentRow, 10) = Me.CircuitStatus.Value 
Cells(CurrentRow, 11) = Me.Comments.Value 
Unload ExpensesForm 

End Sub 
0

Versuchen Sie dies, um die aktive Zeile der aktuellen Tabelle zu erhalten. Fand here Zitat von @Anand beantwortet

Sub FindRowNoInTable() 

Dim ObjSheet As Worksheet 
Dim startRow, ActiveRow, ActiveCol 
Dim ObjList As ListObject 
Set ObjSheet = ActiveSheet 
ActiveRow = ActiveCell.Row 
ActiveCol = ActiveCell.Column 
For Each ObjList In ObjSheet.ListObjects 
     Application.Goto ObjList.Range 
     startRow = ObjList.Range.Row 
Next 
Debug.Print (ActiveRow - startRow) 

End Sub 

Dann setzen (ActiveRow - startRow) in die Variable "CurrentRow"

+0

Ich fügte den obigen Code hinzu und bekam Kompilierfehler: Variable nicht definiert – Andy

+0

Alle Variablen in diesem Unterprogramm sind durch eine Dim-Anweisung definiert, so dass Sie diesen Fehler nicht von diesem Code erhalten. Gibt es Arbeitsblatt-Unterprogramme, die im Hintergrund arbeiten? Etwas anderes verursacht diesen Fehler. Getestet diesen Code mehrmals, mit und ohne "Option Explicit" –

Verwandte Themen