Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Worksheet_deactivate

Worksheet_deactivate
31.05.2006 14:27:04
masahiro
Hallo zusammen!
Ich kämpfe gerade mal wieder mit dem Laufzeitfehler '1004'. Ich versuche eine bestimmten Bereich meines Dokuments in Abhängigkeit vom Datum zu markieren. Dies soll beim aktivieren des Tabellenblattes geschehen, und beim verlassen wieder rückgängig geamcht werden. Die Hinrichtung funktioniert, jedoch leider die Rückrichtung nicht. Hier der Code:

Private Sub Worksheet_activate()
datensaetze = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Row
For i = 6 To datensaetze
If Cells(i, 1) = Date Then
Range(Cells(i, 3), Cells(i + 2, 14)).Activate
With Selection.Borders(xlEdgeLeft)
Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.Weight = xlMedium
End With
Exit For
End If
Next i
End Sub


Private Sub Worksheet_deactivate()
datensaetze = ActiveSheet.Cells(Rows.count, 1).End(xlUp).Row
For i = 6 To datensaetze
If Cells(i, 1) = Date Then
Range(Cells(i, 3), Cells(i + 2, 14)).Activate
With Selection.Borders(xlEdgeLeft)
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.Weight = xlThin
End With
Exit For
End If
Next i
End Sub

Das mit den Rahmen kann man auch bestimmt noch netter machen! Vielleicht würde sich dann auch automatisch der '1004' verabschieden.
Vielen Dank
Henning

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_deactivate
31.05.2006 14:46:33
haw
Hallo Henning,
bei mir funktioniert's:

Private Sub Worksheet_activate()
Dim datensaetze%, i%
datensaetze = Cells(Rows.Count, 1).End(xlUp).Row
For i = 6 To datensaetze
If Cells(i, 1) = Date Then
Range(Cells(i, 3), Cells(i + 2, 14)).BorderAround Weight:=xlMedium
Exit For
End If
Next i
End Sub


Private Sub Worksheet_deactivate()
Dim datensaetze%, i%
datensaetze = Cells(Rows.Count, 1).End(xlUp).Row
For i = 6 To datensaetze
If Cells(i, 1) = Date Then
Range(Cells(i, 3), Cells(i + 2, 14)).BorderAround Weight:=xlThin
Exit For
End If
Next i
End Sub

Es ist mir allerdings nicht klar, warum du das Rahmen mit einer dünneren Linie als Deaktivieren bezeichnest.
Gruß
Heinz
Anzeige
AW: Worksheet_deactivate
31.05.2006 14:55:56
masahiro
Hallo Heinz!
Vielen Dank, so funktioniert es. Vielen Dank!
Das ganze soll nur eine optimische orientierung für die anwender sein. Das Blatt hat eben die dünnen Linien als Rahmen, und somit stellt xlmedium die markierung dar, und xlthin eben das Aufheben dieser.
Grüße
Henning
AW: Worksheet_deactivate
31.05.2006 15:01:33
Luschi
Hallo Henning,
Du arbeitest in dem Vba-Code mit Range und Cells, ohne das Tabellenobjekt mit zu benennen. In diesenm Fall nimmt Excel das ActiveSheet als Tabellenobjekt. Beim Hineingehen in die Tabelle klappt das auch gut, aber beim Verlassen per Tabreiter ist das Objekt ActiveSheet schon bei der neu angewählten Tabelle, während das Ereignis "Worksheet_Deactivate" noch auf die vorhergehende Tabelle zeigt.
So kommt es immer zum Crash.
Bei der Benutzung von Range und Cells sollte man deshalb Objekt-Variablen benutzen, die die richtige Tabelle repräsentieren. Dir nützt die Information, daß ich in der Waldstraße 166 wohne auch nicht viel, weil der dazugehörige Ort unbekannt ist.
Dim sheetName As String
Private Sub Worksheet_Activate()
sheetName = ActiveSheet.Name
datensaetze = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For i = 6 To datensaetze
If Cells(i, 1) = Date Then
ActiveSheet.Range(Cells(i, 3), Cells(i + 2, 14)).Activate
With Selection.Borders(xlEdgeLeft)
Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.Weight = xlMedium
End With
Exit For
End If
Next i
End Sub
Private Sub Worksheet_Deactivate()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(sheetName)
For i = 6 To datensaetze
If ws.Cells(i, 1) = Date Then
With ws.Range(Cells(i, 3), Cells(i + 2, 14))
With .Borders(xlEdgeLeft)
.Weight = xlThin
End With
With .Borders(xlEdgeTop)
.Weight = xlThin
End With
With .Borders(xlEdgeBottom)
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.Weight = xlThin
End With
End With
Exit For
End If
Next i
Set ws = Nothing
End Sub
Gruß von Luschi aus klein-Paris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige