Row counter für Selection
20.04.2017 17:09:33
Max2
ich habe einen Code der Prüft ob der Nutzer einen Datensatz per "Entf" Taste auf dem Sheet Löscht oder per Button auf UserForm.
Nun möchte ich feststellen, ob der Nutzer mehrere Datensätze Selektiert hat oder nur einen.
Bei einem wird ein Sub aufgerufen der nur einen Datensatz entfernt.
Bei mehreren, so der Plan, wird ein Sub Aufgerufen der mehrere nacheinander Löschen soll.
Jetzt habe ich aber das Problem das ich mir folgende Funktion, jede Zelle in der Selection zählt, ich möchte aber immer nur die erste Zelle addieren, damit sich der Wert eben nicht verfälscht.
Hier Code ausschnitt 1:
(Das Problem ist: Function amount_of_Selection_in_Sheet())
Sub Main_Datensatz_Loeschen()
Dim warning As Byte
'Main Prozedur des Moduls "Datensatz_Loeschen"
On Error Resume Next
warning = MsgBox("Möchten Sie den Datensatz wirklich Löschen?", vbYesNo, "ACHTUNG!")
Select Case warning
Case 6
Call got_Called_by_Whom 'calledBy ist global und ist entweder 1 oder 0
MsgBox "Der Datensatz wurde gelöscht."
Case 7
End Select
End Sub
Function got_Called_by_Whom()
'Wir prüfen ob das Löschen durch den "Entf" Key auf der
'Tastatur erfolgt oder durch den Löschen Button der UserForm
If calledBy = 0 Then
Call amount_of_Selection_in_Sheet
Else
Call delete_Datensatz_execute_from_Userform(UserForm3.ComboBox1.Value)
End If
End Function
Function amount_of_Selection_in_Sheet()
Dim counter As Integer
Dim c As Object
For Each c In Selection
counter = counter + 1
Next c
If counter = 1 Then Call delete_Datensatz_execute_from_Sheet
If counter > 1 Then Call delete_Datensatz_selection_execute_from_Sheet
End Function
Ich würde jetzt einfach nochmal abfragen in der Schleife:If c.Column = 1 Then counter = counter + 1
Aber ich glaube das ist relative Fehleranfällig... schließlich
kann der Nutzer ja auch in einer anderen Spalte die Selection begonnen haben.
Habt ihr da eine Bessere Idee..?
Hier Code ausschnitt 2 (Löschen der Selection):
Sub delete_Datensatz_selection_execute_from_Sheet()
Dim curDataSet() As String
Dim deleteNumberFromTable As String
Dim c
Dim i As Long
'Löscht alle Datensätze einer Selection im Sheet
i = 0
Set ws = ThisWorkbook.Sheets(1)
With ws
For Each c In Selection
ReDim Preserve curDataSet(i)
curDataSet(i) = .Cells(c.Row, 1)
i = i + 1
c.EntireRow.Delete
Next c
End With
Set ws = ThisWorkbook.Sheets("IDs")
Do
deleteNumberFromTable = Finde_Datensatz_Zeile(curDataSet(i), 2)
With ws
.Cells(deleteNumberFromTable, 1).EntireRow.Delete
End With
i = i + 1
Loop Until i > UBound(curDataSet)
Set ws = Nothing
End Sub