Thema Datum  Von Nutzer Rating
Antwort
10.03.2018 15:48:18 Kevin
NotSolved
10.03.2018 16:29:26 Gast14316
NotSolved
10.03.2018 22:50:02 Kevin
NotSolved
Blau Zeilen bei bestimmten Werten in aktiver Reihe verbinden ".merge"
11.03.2018 09:31:24 Gast70117
Solved
13.03.2018 08:14:16 Kevin
NotSolved

Ansicht des Beitrags:
Von:
Gast70117
Datum:
11.03.2018 09:31:24
Views:
399
Rating: Antwort:
 Nein
Thema:
Zeilen bei bestimmten Werten in aktiver Reihe verbinden ".merge"

Moin Kevin,
du schreibst am Code herumgedoktort, ich denke das trifft es.
Lassen wir uns einmal deine fett dargestellte Anweisung "Set rngsource = .Range(Cells(ActiveCell.Row, 4))" zum Frühstück auf der Zunge zergehen.

Die Schreibweise .Range(....  nimmt also Bezug auf das übergeordnete Objekt ActiveSheet.
Da keimt bei mir erstmals die bange Frage: Warum dann ein Workbook_SheetChange(... - Ereignis
Der Nährwert dieser Auswahl besteht doch in erster Linie darin, dass die dort enthaltenen Anweisungen
bei jeder Änderung eines Zellinhaltes eines jeden Arbeitsblattes der aktiven Arbeitsmappe abgearbeitet werden (müssen).
Jetzt grenzt die Anweisung "With ActiveSheet" aber auf das gerade aktive Arbeitsblatt ein.
Das bedeutet einen Widerspruch in sich, denn so eine Konstruktion verwendet man(n) wenn irgendwelche Prozeduren
Änderungen von Zellinhalten in mehreren, oder nicht aktiven Arbeitsblättern bewerkstelligen.
Dagegen gibt es das Synonym "ActiveCell" nur für das gerade aktive Fenster und ist dies nicht gerade der Fall, dann mault die Applikation ohnedies.

Aber zurück zur Schreibweise .Range(.... für den Fall, dass gerade glücklicherweise der Umstand zutrifft, wonach die Änderung auch greift.
Bedeutet, der Variablen rngsource diese aktive Zelle wiederum als Objekt zuzuweisen.
Somit mit der Range-Anweisung ein Ziel in Form einer Adresse zu definieren.
Das darauffolgende "Cells(ActiveCell.Row, 4)", egal ob mit oder ohne führendem Punkt interpretiert sich nochmals selbst wie folgt:
Es wird ein eigenständiges Range-Objekt angenommen und mangels einer gültigen Eigenschaftsanweisung die erste Eigenschaft der Liste, der Inhalt (.Value).
Ergibt nun "Ausgabe", "Einnahme" oder "woswasi".
OK, und nun will die o.g. Range-Anweisung diesen Text in einen Zellbezug umwandeln.
A1Z1 - Notation ist nicht, daher wird nach einem benannten Zellbereich weitergesucht und selbstplaudernd keiner gefunden.
So, nun hat der Interpreter die Nase aber endgültig voll und haucht eine Fehlermeldung aus, verweigert den weiteren Ablauf.

" herumgedoktort " lässt sich auch dieses Manko lösen, dann schreibe es  "eben so", die führende Punktation ist bei dem ganzen Code-Murks ohnedies egal.

  Set rngsource = Range(Cells(ActiveCell.Row, 4).Address)

es geht aber auch einfach und geschmacklos, dafür aber richtig als Ereignis in der Tabellen-Klasse

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngsource As Range

   Set rngsource = Cells(ActiveCell.Row, 4)
   If Not Application.Intersect(rngsource, Target) Is Nothing Then
        Select Case rngsource.Value
         Case "Ausgabe", "Einnahme"
            Range(rngsource.Offset(0, 1), rngsource.Offset(0, 2)).Merge
         Case Else
            Range(rngsource.Offset(0, 1), rngsource.Offset(0, 2)).UnMerge
         End Select
   End If

End Sub

LG


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
10.03.2018 15:48:18 Kevin
NotSolved
10.03.2018 16:29:26 Gast14316
NotSolved
10.03.2018 22:50:02 Kevin
NotSolved
Blau Zeilen bei bestimmten Werten in aktiver Reihe verbinden ".merge"
11.03.2018 09:31:24 Gast70117
Solved
13.03.2018 08:14:16 Kevin
NotSolved