Microsoft Excel

Herbers Excel/VBA-Archiv

VBA für Änderungsmodus - Formeln ziehen = Fehler | Herbers Excel-Forum


Betrifft: VBA für Änderungsmodus - Formeln ziehen = Fehler von: Jan
Geschrieben am: 04.02.2010 14:53:53

Liebe Excelianer,

ich komme heute mal mit einem kleinen Problemchen, bei dem ich aber allein nicht weiterkomme.

Der folgende hübsche Code (bereits mit eurer Hilfe) zeigt mir ab dem Teil "Case is = 7" ob Änderungen an Zellen einer Spalte durchgeführt wurden, indem er einen Kommentar anlegt, in dem die Änderung vermerkt ist. (Der Teil ab "Case is 14" ist nur der vollständigkeit halber dabei.) Das ganze funktioniert auch super, bis auf, wenn ich Formeln in dem überwachten Bereich per Maus über mehr als eine benachbarte Zelle ziehe, eine Fehlermeldung "Laufzeitfehler1004" kommt. Grund ist wahrscheinlich, dass Excel nicht zwei Zellen in einem Funktionsdurchlauf bearbeiten kann. Im Debugger bleibt der Zeiger denn auch bei "Target.AddComment" hängen.

Hat jemand eine Idee, wie ich diese Fehlermeldung unterdrücken kann. Im Fall des Formelziehens könnte auch gut auf den Kommentar verzichtet werden. Es sollte auf jeden Fall verhindert werden, dass die Option debuggen aufgerufen werden kann und VBA-Code sichtbar wird. (Dort steht unter anderem auch das Passwort.) Vielleicht so, dass die Funktion im Fall des Laufzeitfehlers beendet wird und von Anfang neu durchlaufen kann.

Danke und viele Grüße,
Jan

Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Target.Column
  Case Is = 14
    If Target.Column <> 14 Then Exit Sub
    If Cells(Target.Row, 14) > 0 Then
    Cells(Target.Row, 12) = Target
    End If
    If Cells(Target.Row, 14) = 0 Then
    Cells(Target.Row, 12).FormulaR1C1 = "=RC[-5] * RC[-6]"
    End If
    
  Case Is = 7
    If Not Intersect(Target, Range("G2:G255")) Is Nothing Then 'Ueberwachter Bereich   
            If Target.Comment Is Nothing Then 'wenn kein Kommentar vorhanden
                Target.AddComment    'erstelle einen Kommentar
                Target.Comment.Text Target.Comment.Text & Format(Target.Value, "#.##") & " geä  _
_
ndert am  " & Date 'schreibe Inhalt aus Zelle A1 in Kommentar
                Target.Comment.Visible = False
                Else  'wenn Kommentar vorhanden
                Target.Comment.Text Target.Comment.Text & Chr(10) & Format(Target.Value, "#.##") _
 _
 & " geändert am  " & Date 'alter Inhalt und neuer Inhalt Zelle A1
                Target.Comment.Shape.Height = Target.Comment.Shape.Height + 30 ' Höhe Feld
                Target.Comment.Visible = False
            End If
         End If
      
  Case Else
  Exit Sub
  End Select
End Sub

  

Betrifft: AW: VBA für Änderungsmodus - Formeln ziehen = Fehler von: Luschi
Geschrieben am: 04.02.2010 15:26:49

Hallo Jan,

versuch es mal so:

Dim rg As Range

Select Case Target.Column
    Case 14
    Case 7
        If Not Intersect(Target, ActiveSheet.Range("G2:G255")) Is Nothing Then 'Ueberwachter  _
Bereich
           For Each rg In Target
               If rg.Comment Is Nothing Then 'wenn kein Kommentar vorhanden
                  rg.AddComment    'erstelle einen Kommentar
               End If
               rg.Comment.Text rg.Comment.Text & Format(rg.Value, "#.##") & _
                  " geändert am  " & Date 'schreibe Inhalt aus Zelle A1 in Kommentar
               rg.Comment.Visible = False
           Next rg
        End If
End Select
        
Set rg = Nothing
Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: VBA für Änderungsmodus - Formeln ziehen = Fehler von: Jan
Geschrieben am: 04.02.2010 15:41:46

Vielen Dank, ich werde beide Varianten ausprobieren. Habe mir gerade so weitergeholfen (siehe unten), aber so wie ich eure Codes verstehe, werden bei euch in alle Zellen Kommentare geschrieben, was mir gut gefällt.

Herzlichen Dank,
Jan

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo fehler

Select Case Target.Column
  Case Is = 14
    If Target.Column <> 14 Then Exit Sub
    If Cells(Target.Row, 14) > 0 Then
    Cells(Target.Row, 12) = Target
    End If
    If Cells(Target.Row, 14) = 0 Then
    Cells(Target.Row, 12).FormulaR1C1 = "=RC[-5] * RC[-6]"
    End If
    
  Case Is = 7
    If Not Intersect(Target, Range("G2:G255")) Is Nothing Then 'Ueberwachter Bereich
            If Target.Comment Is Nothing Then 'wenn kein Kommentar vorhanden
                Target.AddComment    'erstelle einen Kommentar
                Target.Comment.Text Target.Comment.Text & Format(Target.Value, "#.##") & " geä _
ndert am  " & Date 'schreibe Inhalt aus Zelle A1 in Kommentar
                Target.Comment.Visible = False
                Else  'wenn Kommentar vorhanden
                Target.Comment.Text Target.Comment.Text & Chr(10) & Format(Target.Value, "#.##") _
 & " geändert am  " & Date 'alter Inhalt und neuer Inhalt Zelle A1
                Target.Comment.Shape.Height = Target.Comment.Shape.Height + 30
                Target.Comment.Visible = False
            End If
         End If
      
  Case Else
  Exit Sub
  End Select

fehler:
Err = 0
End Sub



  

Betrifft: AW: VBA für Änderungsmodus - Formeln ziehen = Fehler von: Ramses
Geschrieben am: 04.02.2010 15:35:06

Hallo

Target ist immer die aktive Zelle, du könntest allenfalls noch eine Abfrage einbauen

CAse = 7
If Not Intersect(Target, Range("G2:G255")) Is Nothing Then 'Ueberwachter Bereich
If Selection.Cells.Count > 1 Then
Selection.Cells(1, 1).Select
End If

und dann nicht mit Target weiterarbeiten sondern mit ActiveCell,.. also in dem Stil

with ActiveCell
If .Comment Is Nothing Then 'wenn kein Kommentar vorhanden
.AddComment 'erstelle einen Kommentar
.Comment.Text .Comment.Text & Format(Target.Value, "#.##") & " geä _
_
ndert am " & Date 'schreibe Inhalt aus Zelle A1 in Kommentar
.Comment.Visible = False
Else 'wenn Kommentar vorhanden
.Comment.Text .Comment.Text & Chr(10) & Format(Target.Value, "#.##") _
_
& " geändert am " & Date 'alter Inhalt und neuer Inhalt Zelle A1
.Comment.Shape.Height = Target.Comment.Shape.Height + 30 ' Höhe Feld
.Comment.Visible = False
End If
End With


Gruss Rainer


  

Betrifft: Target -> Zellformat ändern? von: Jan
Geschrieben am: 04.02.2010 15:52:00

...noch eins - ist es auch möglich neben der Erstellung eines Kommentars, über Target die Zellformatierung so zu ändern, dass z.B. der Text in Rot geschrieben wird?

LG, Jan


  

Betrifft: AW: Target -> Zellformat ändern? von: Ramses
Geschrieben am: 04.02.2010 15:55:27

Hallo

Klar geht das.
Extras - makro - Makrorecoder Aufzeichnung starten

zelle formatieren

Aufzeichnung beenden
Fertig

... und schon hast du den Code den du brauchst.

Gruss Rainer


  

Betrifft: AW: Target -> Zellformat ändern? von: Jan
Geschrieben am: 04.02.2010 16:05:53

Jupp, also so:
Target.Font.ColorIndex = 54

(hatte nur irgendwo gelesen, dass man über Target das Format nicht ändern kann, naja.)

Beste, Jan


Beiträge aus den Excel-Beispielen zum Thema "VBA für Änderungsmodus - Formeln ziehen = Fehler"