Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Worksheet_Change und Target als Array

Worksheet_Change und Target als Array
16.05.2020 13:36:13
Clemens
Hallo liebes Herber Forum,
ich habe seid einigen Tagen das Problem was ich gleich schildern möchte:
ich habe eine Eingabemaske gebastelt in der im Zellverbund D11:E11 eine Formel steht "=WENN(A11=0;"";A11)", da ich die 0 leider aus anderen Gründen nicht ausblenden kann. Diese Zelle D11:E11 ist aber gleichzeitig auch ein Eingabefeld und soll überschrieben werden können. So weit so gut. Nun soll aber wenn die Zelle geleert wird wieder die Formel rein geschrieben werden.
Dafür habe ich ein Worksheet_Change eingerichtet:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target = Functions.eraseArray(Target)
If Target.value = "" Then
Target.FormulaLocal = "=WENN(A" & Target.row & "=0;"""";A" & Targfet.row & ")"
End If
Application.EnableEvents = True
End Sub
in dem Modul Functions ist jetzt die function eraseArray und hier beginnt auch meine Frage.
Wenn ich in einen Zellverbund schreibe wird als Target nur die erste Zelle des Verbundes übergeben und ich habe kein Array. Wenn ich aber die Zelle leere (entweder mit entf, Inhalt löschen und enter drücken, macht keinen unterschied) dann wird der ganze Verbund als Array übergeben und genau das möchte ich abfangen, da sonst z.B. Target.Value nicht funktioniert. Natürlich könnte ich den gesamten Code mit IsArray doppelt schreiben, aber das würde ich gerne vermeiden um es meinem Nachfolger ein weniger lesbarer und einfacher zu bearbeiten zu machen (bin vermutlich eh ich selber :-) ).
In eraseArray habe ich schon einiges versucht aber bekomme immer wieder die Range als Array zurück und verzweifle so langsam :-).
Mein Ansatz:

1 Function eraseArray(arr as Range) As Range
2     If IsArray(arr) Then
3         Set eraseArray = Arr.Cells(1, 1)
4     Else
5         Set eraseArray = arr
6     End If
7 End Function
In Zeile 3 habe ich schon "alles" versucht. Zum mindest alles was mir eingefallen ist, um in eraseArray nur die obere Linke Zelle des Arrays zu schreiben.
Da ich für mein aktuelles Projekt schon ungefähr 200 Stunden als stummer Teilnehmer verbracht habe, bin ich mir sicher hier finde ich ein offenes Ohr.
Vielen Dank fürs lesen
Clemens
PS: es könnten kleine Rechtschreibfehler im Code sein, die daher kommen, dass ich ihn abtippen musste.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change und Target als Array
16.05.2020 14:04:20
Nepumuk
Hallo Clemens,
das geht viel einfacher:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim objRange As Range, objCell As Range
    
    Set objRange = Intersect(Target, Range("D11:E11"))
    
    If Not objRange Is Nothing Then
        
        Application.EnableEvents = False
        
        For Each objCell In objRange
            
            If IsEmpty(objCell.Value) Then objCell.FormulaLocal = _
                "=WENN(A" & objCell.Row & "=0;"""";A" & objCell.Row & ")"
            
        Next
        
        Application.EnableEvents = True
        
        Set objRange = Nothing
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Worksheet_Change und Target als Array
16.05.2020 14:34:36
Clemens
Ach Nempumuk ich könnte dich küssen.
An intersect habe ich garnicht mehr gedacht...
Musste es ein wenig umschreiben um es allgemein zu halten aber das Prinzip ist gas gleiche:

1 Function eraseArray(arr as Range) As Range
2     If IsArray(arr) Then
3         Set eraseArray = Intersect(arr, arr(1, 1))
4     Else
5         Set eraseArray = arr
6     End If
7 End Function
Vielen vielen Dank.
PS: weißt du warum excel als Target manchmal ein Array und manchmal nicht ausgibt? Finde das seltsam. Aber vorallem: ist das wohl gewollt?
AW: Worksheet_Change und Target als Array
16.05.2020 14:43:50
Nepumuk
Hallo Clemens,
wenn du mehrere Zellen auf einmal änderst dann gibt die Value- und die Value2-Eigenschaft ein Array zurück.
Gruß
Nepumuk
Anzeige
AW: Worksheet_Change und Target als Array
16.05.2020 14:53:18
onur
Wenn du nur eine Zelle auf einmal änderst, ist Target nur eine Zelle (Target.Cells.Count=1).
Wenn du aber mehrere Zellen gleichzeitig veränderst (per Copy and Paste eines Bereiches, in mehrere Zellen nach unten kopieren oder markieren und löschen), dann ist Target natürlich ein ganzer Bereich (Target.Cells.Count grösser 1).

250 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige