Fehler: Argument ist nicht optional ?

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

  • MVP für MS-Excel -

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

  • MVP für MS-Excel -