Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeCurrentCell As Range
Dim rangeSelected As Range
If Not Intersect(ActiveCell, Range(„rangeGroupsAndCriteria“)) Is Nothing Then
ReplaceEmptyCellWithOneBlank Target
End Sub
Private Sub ReplaceEmptyCellWithOneBlank(rangeArea As Range)
Dim rangeCell As Excel.Range
Dim sContent As String
Dim bMsgDisplayed As Boolean
For Each rangeCell In rangeArea.Cells
sContent = rangeCell.Value
Select Case sContent
Case IsNumeric
Case „“
With Application
.EnableEvents = False
End With
rangeCell.Value = " "
With Application
.EnableEvents = False
End With
Case Else
End Select
Next rangeCell
End Sub
Der Prozeduraufruf:
ReplaceEmptyCellWithOneBlank (Target)
führt zum Fehler „Objekt erforderlich“
Wie kann ich Target als Range an die Prozedur übergeben?
Hallo Grußloser,
nach End If Einfügung klappts doch:
Private Sub Worksheet\_Change(ByVal Target As Range)
Dim rangeCurrentCell As Range
Dim rangeSelected As Range
If Not Intersect(ActiveCell, Range("A1:A100")) Is Nothing Then
ReplaceEmptyCellWithOneBlank Target
End If
'If Not Intersect(ActiveCell, Range("rangeGroupsAndCriteria")) Is Nothing Then
' ReplaceEmptyCellWithOneBlank Target
End Sub
Private Sub ReplaceEmptyCellWithOneBlank(rangeArea As Range)
Dim rangeCell As Excel.Range
Dim bMsgDisplayed As Boolean
Application.EnableEvents = False
For Each rangeCell In rangeArea.Cells
If rangeCell.Value = "" Then rangeCell.Value = " "
Next rangeCell
Application.EnableEvents = True
End Sub
Gruß
Reinhard
Hallo Reinhard,
meine allererste Frage in einem Forum in meinem Leben (kaum zu glauben). Sorry für den Formfehler.
Da hab ich den Code wohl etwas zu sehr eingekürzt. Das war nicht das Problem. Ohne End If hätte ich vermutlich auch einen ganz anderen Fehler erhalten.
Es muss was mit „Target“ als „Range“ übergeben zu tun haben.
Danke für Deine Mühe!
Grüezi
Eine Frage zur Code-Struktur:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rangeCurrentCell As Range
Dim rangeSelected As Range
If Not Intersect(ActiveCell,
Range(„rangeGroupsAndCriteria“)) Is Nothing Then
Warum (um alles in der Welt) arbeitest Du hier mit ActiveCell?
Je nachdem was der User einstellt hat oder wie er die geänderte Zelle verlässt ist die irgendwo aber nicht auf der geänderten Zelle.
Genau dafür hat das Event doch den Target, der alle geänderten Zellen in Form eines Ranges enthält…
ReplaceEmptyCellWithOneBlank Target
Dieser Aufruf ist OK…
Private Sub ReplaceEmptyCellWithOneBlank(rangeArea As Range)
…und die Übergabe hier auch.
Hast mal darauf geachtet, welche Zeile der Debugger beim Auswerfen der Meldung eigentlich markiert?
Dim rangeCell As Excel.Range
Dim sContent As String
Dim bMsgDisplayed As Boolean
For Each rangeCell In rangeArea.Cells
sContent = rangeCell.Value
Select Case sContent
Case IsNumeric
…es ist diese hier!!
Du kannst die Methode IsNumeric() nicht einfach ohne Arbument verwenden.
Stele den Cursor in den Begriff ‚IsNumeric‘ und drücke F1 - da findest Du weitere Hinweise.
[restlichen Code gesnippt]
Mit freundlichen Grüssen
Thomas Ramel
Grüezi Warbe nochmals
Eine Frage zur Code-Struktur:
Und noch ein Hinweis dazu:
Du solltest die Events am Ende auch wirklich wieder einschalten, sonst klappt die ganze Herrlichkeit nur einmal…
Mit freundlichen Grüssen
Thomas Ramel