Herbers Excel-Forum - das Archiv

Fehler bei Worksheet_Change

Bild

Betrifft: Fehler bei Worksheet_Change
von: Fred

Geschrieben am: 08.03.2005 08:52:38
Hallo und guten Morgen,
ich möchte ein Listing automatisch bei einer Eingabe in
einen Tabellenblatt ablaufen lassen.
Wenn ich aber das Listing in das Tabellenblatt, wo es ablaufen soll, einfüge
mit dem Anfang:
Private Sub Worksheet_Change(ByVal Target As Range)
Kommt ein Fehler bei Range("B3").select
Wenn ich aber das Listing in ein Modul in diesen Projekt intregiere,
und es von Hand starte, bzw. über eine Schaltfläche, funktioniert es.
Mit diesen Anfang.
Sub Stunden_zaehlen()
Warum kommt es zu diesen Fehler ?
Kann mir da jemand genau erklären wie, und wo ich das Listing einfügen muss ?
Wie wird eigentlich das Listing / der Code in Programmierer-Sprache genannt ?
Gruß
Fred
Bild

Betrifft: Hier das Listing !!!
von: Fred

Geschrieben am: 08.03.2005 09:05:11
Sub Samstage_zaehlen()
Dim Samstage As Worksheet
Dim Ergebnis As Worksheet
Dim Name As String
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim Anzahl As Integer
Dim Heute As Date
'Damit kann ich einfacher auf die Arbeitsblätter zugreifen
Set Samstage = ThisWorkbook.Worksheets("Samstage")
Set Ergebnis = ThisWorkbook.Worksheets("Ergebnis")
'Das Arbeitsblatt "Ergebnis" wird angezeigt
Ergebnis.Select
'Zelle B3 wird markiert
Range("B3").Select
'i, j und k sind Zählvariablen und werden zu Anfang mit 0 initialisiert
i = 0
j = 0
k = 0
'Anzahl ist die Zahl die ermittelt werden soll. Sie ist zu Anfang auch 0
Anzahl = 0
'Das heutige Datum wir ermittelt
Heute = Range("A3").Value
'Der erste Name der Ergebnisliste wird ermittelt
Name = Range("B3").Cells.Offset(i, 0).Value
'Die Namensliste wird durchgegangen, bis kein Name mehr dasteht
While Name <> "" And Name <> "usw."
'Jetzt wird in der Namensliste bei den Samstagen gesucht
Samstage.Select
Name2 = Range("C3").Cells.Offset(0, j).Value
While Name2 <> ""
'Wenn der gleiche Name gefunden wird
If Name2 = Name Then
'Jetzt wird die Spalte nach unten durchgegangen bis zum Datum, das Heute am nächsten ist
While Range("B4").Cells.Offset(k, 0) < Heute
'Wenn in der Spalte ein x gefunden wird, wird die Anzahl auf 0 zurückgesetzt
'ansonsten wird die Anzahl um 1 erhöht.
If Range("C4").Cells.Offset(k, j) = "x" Then
Anzahl = 0
Else
Anzahl = Anzahl + 1
End If
'Der Zähler wird um 1 erhöht, damit die nächste Zelle in der Spalte gelesen werden kann
k = k + 1
Wend
'k muss neu initialisiert werden
k = 0
End If
'Der Zähler wird um 1 erhöht, damit der nächste Name bei den Samstagen ermittelt werden kann
j = j + 1
'Der nächste Name bei den Samstagen wird ermittelt
Name2 = Range("C3").Cells.Offset(0, j).Value
Wend
'Die Anzahl wurde ermittelt und wird jetzt eingetragen
Ergebnis.Select
Range("B3").Cells.Offset(i, 1).Value = Anzahl
'Der Zähler wird um 1 erhöht, damit der nächste Name in der Ergbniliste ermittelt werden kann
i = i + 1
'j muss neu initialisiert werden
j = 0
'Anzahl muss auch zurückgesetzt werden
Anzahl = 0
'Der nächste Name in der Ergebnisliste wird ermittelt
Name = Range("B3").Cells.Offset(i, 0).Value
Wend
End Sub

 Bild
Excel-Beispiele zum Thema "Fehler bei Worksheet_Change"
Fehlermeldung #NV ausblenden Fehlermeldung abfangen
Fehler in Workbook_Open-Prozedur abfangen Fehlermeldung #DIV/0! verhindern
Fehler entfernen Fehlermeldung abfangen und in sequentielle Datei schreiben
Fortlaufende Suche unter Vermeidung eines Laufzeitfehlers VBA-Fehlermeldungen auflisten
Alle Zellen mit der #BEZUG!-Fehlermeldung auswählen Zahlenstring mit Formel auslesen und Fehlermeldung verhindern