Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1260to1264
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

Code für mehrere Zeilen umschreiben

Code für mehrere Zeilen umschreiben
Michel
Hi Leute,
ich habe ein kleines Problem. Ich habe folgenden Code programmiert der auch einwandfrei funktioniert.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = ("G33") Then
Range("E33") = Time()
End If
Jetzt meine Frage: Ich muss diese Abfrage und Zeitspeicherung für mehr als 100 Zeilen machen. ALso von G33 bis G133. Kann man das auch irgendwie anders schreiben, dass ich diesen Code nicht 100 mal hintereinander schreiben muss?
Habs mit ner Schleife versucht aber leider nicht hinbekommen.
Kann man wenn man i as Integer deklariert, i immer nur mit ner Schleife hochzählen, oder geht das auch einfach, wenn man i+1 in eine Zeile schreibt.
Hoffentlich kann mir jemand helfen.
Vielen Dank schonmal an alle.
Gruß Michel
AW: Code für mehrere Zeilen umschreiben
30.04.2012 12:35:47
Rudi
Hallo,
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G33:G133")) Is Nothing Then
Target.Offset(, -2) = Time
End If
End Sub

Gruß
Rudi
AW: Code für mehrere Zeilen umschreiben
30.04.2012 17:40:05
Michel
Hi Rudi und Reinhard,
vielen Dank für eure Antworten.
Hab mich für die Lösung von Rudi entschieden, weil Reinhard seine bei mir leider nicht funktioniert.
Leider muss ich sagen, dass ich es mit meinen geringen VBA Kenntnissen, nicht ganz verstehe. Könntet ihr mir den gefallen tun und eure Lösungen mit Kommentaren versehen. Würde mir sehr helfen.
Vielen Dank nochmal
Gruß Michel
Anzeige
AW: Code für mehrere Zeilen umschreiben
30.04.2012 19:59:50
Reinhard
Hallo Michel,
okay, hab nicht getestet, prinzipiell müßte auch mein Lösungsansatz funktionieren, hab da wohl noch einen Fehler drin.
Unabhängig davon erkläre ich mal Rudis Code. Wenn eine Prozedur wie
Private Sub Worksheet_Change(ByVal Target As Range)
im richtigen Modul, also dem Modul des jeweiligen Tabellblattes, steht so wird diese Prozedur
vollautomatisch aufgerufen wenn du im Blatt Zellinhalte änderst.
In dem Moment ist Target die Zelle die du geändert hast oder auch der Zellbereich den
du durch Einfügen abgeändert hast.
Bleiben wir mal dabei daß du nur eine Zelle abgeändert hast.
Dann entspricht Target der Zelle.
Mit
If Not Intersect(Target, Range("G33:G133")) Is Nothing Then
wird nun überprüft ob diese Zelle auch im Zellbereich G33:G133 liegt.
Wenn dem so ist so wird weiter in der IF-Schleife vorgegangen.
Da steht dann
Target.Offset(, -2) = Time
was bedeutet 2 Zellen links von target (die Targetzelle ist in G), also in Ex wird die Zeit eingetragen.
PS: gewöhn dir bitte ab zu schreiben "funktionert leider nicht", davon hab ich nix.
Beschreib bitte was passiert oder auch nicht passiert, wenn der Debugger kommt, Fehler nummer, Fehlertext und Codezeile wo das auftritt.
Gruß
Reinhard
Anzeige
AW: Code für mehrere Zeilen umschreiben
30.04.2012 20:14:34
Reinhard
Hallo Michel,
probiere bitte mal dieses:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
Set Target = Intersect(Target, Range("G33:G133"))
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Zelle In Target
Zelle.Offset(0, -2) = Time
Next Zelle
Application.EnableEvents = True
End Sub

Gruß
Reinhard
AW: Code für mehrere Zeilen umschreiben
01.05.2012 11:59:02
Michel
Hi Reinhard,
sorry wegen der stumpfen formulierung, dass dein Programm nicht funktioniert. Hast Recht, wird nicht wieder vorkommen. :-)
Ich habe mich in der Hinsicht sowieso falsch ausgedrückt. Dein Programm funktioniert schon. Das Problem ist, dass ich nachfolgend dieses Codes noch weitere If Anweisungen habe di eüber diesen Worksheet_Change(ByVal Target As Range) laufen. Wenn ich deinen Code in mein Programm reinkopiere funktionieren die anderen Anweisungen nicht mehr sondern nur noch dein Stück code.
Hie mal der Code:
Private Sub Worksheet_Change(ByVal Target As Range)         'Zeitstempel für Füllstandswerte
Dim Zelle As Range
Set Target = Intersect(Target, Range("G33:G133"))
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Zelle In Target
Zelle.Offset(0, -2) = Time
Next Zelle
Application.EnableEvents = True
  • If Target.Address(0, 0) = "G11" Then 'Wasser heizen E3108 Select Case Target Case True Sheets("Auswertung").Range("G13") = Time() Sheets("Auswertung").Range("H13") = True Case False If Sheets("Auswertung").Range("G13") "0" Then Sheets("Auswertung").Range("I13") = Time() Sheets("Auswertung").Range("J13") = False End If End Select End If If Target.Address(0, 0) = "G12" Then 'Pumpe Trinkwasser N3103 Select Case Target Case True Sheets("Auswertung").Range("G15") = Time() Sheets("Auswertung").Range("H15") = True Case False If Sheets("Auswertung").Range("G15") "0" Then Sheets("Auswertung").Range("I15") = Time() Sheets("Auswertung").Range("J15") = False End If End Select End If End Sub

  • Oder ist es Besser, die zwei letzteren If Anweisungen (Ist übrigens die Flankenauswertung, die ihr mir vorgeschlagen habt):-) auch zusammenzufassen? Muss ich nämlich auch für jede Zelle immer wieder programmieren.
    Vielen DAnk schonmal.
    Grüße Michel
    Anzeige
    AW: Code für mehrere Zeilen umschreiben
    01.05.2012 14:16:00
    Reinhard
    Hallo Michel,
    ungetestet:
    
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)         'Zeitstempel für Füllstandswerte
    Dim Zelle As Range
    Application.EnableEvents = False
    With Worksheets("Auswertung")
    If Not Intersect(Target, Range("G33:G133")) Is Nothing Then
    Set Target = Intersect(Target, Range("G33:G133"))
    For Each Zelle In Target
    Zelle.Offset(0, -2) = Time
    Next Zelle
    ElseIf Not Intersect(Target, Range("G11:G12")) Is Nothing Then
    Set Target = Intersect(Target, Range("G11:G12"))
    For Each Zelle In Target
    Select Case Zelle.Address(0, 0)
    Case "G11"                         'Wasser heizen E3108
    If Zelle = True Then
    .Range("G13") = Time
    .Range("H13") = True
    ElseIf Zelle = False Then
    If .Range("G13")  "0" Then
    .Range("I13") = Time
    .Range("J13") = False
    End If
    End If
    Case "G12"                          'Pumpe Trinkwasser N3103
    If Zelle = True Then
    .Range("G15") = Time
    .Range("H15") = True
    ElseIf Zelle = False Then
    If .Range("G15")  "0" Then
    .Range("I15") = Time
    .Range("J15") = False
    End If
    End If
    End Select
    Next Zelle
    End If
    End With
    Application.EnableEvents = True
    End Sub
    

    Gruß
    Reinhard
    Anzeige
    AW: Code für mehrere Zeilen umschreiben
    01.05.2012 18:40:30
    Michel
    Hi Reinhard,
    vielen vielen Dank für deine Zeit.
    Dein Code funktioniert auf jeden Fall mal. Trotzdem bleibt ein Problem.
    Wenn ich die Werte in den Zellen wieder Lösche (in meinem Fall steht dann eine "0" von G33-G133) dann wird das auch als Änderung der Zellen erkannt und mir stehen in allen 100 Zellen die Uhrzeit, wann ich gelöscht habe.
    Wie könnte ich das verhindern?
    Ich versuche schon die ganze Zeit zu versuchen eine weitere Bedingung dafür dranzuhängen aber ich bekomme ständig den Fehler 13, dass die Typen unverträglich sind.
    Hast du vieleicht noch eine Idee?
    Vielen Dank
    Gruß Michel
    Anzeige
    AW: Code für mehrere Zeilen umschreiben
    01.05.2012 14:03:02
    Michel
    Hi Reinhard,
    ich nochmal.
    Das Problem ist auch, dass wenn sich der Wert in einer Zelle von G22 - G72 ändert mir komplett in alle Zellen dieser angegebenen Spalte time gesetzt wird. Ich möchte eigentlich nur das die Zeit neben den Zellen steht, die sich auch von 0 auf einen Wert geändert haben.
    Habe versucht es zu ergänzen aber ich bekomme immer Fehler: Laufzeitfehler 13. Typen unverträglich.
  • 'If Not Intersect(Target, Range("G22:G72")) Is Nothing And Range("G22:G72") = "0" Then
    ' Target.Offset(, -2) = Time
    ' End If

  • Hoffe du kannst mir nochmal helfen.
    Danke und Gruß Michel
    Anzeige
    AW: Code für mehrere Zeilen umschreiben
    30.04.2012 12:39:44
    Reinhard
    Hallo Michel,
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Zelle As Range
    Set Target = Intersect(Target, Range("G33:G133"))
    If Target Is Nothing Then Exit Sub
    For Each Zelle In Target
    Zelle.Offset(0, -2) = Time()
    Next Zelle
    End Sub
    

    Gruß
    Reinhard

    303 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige