Range geht nicht unter Worksheet_Change

Bild

Betrifft: Range geht nicht unter Worksheet_Change
von: Fred
Geschrieben am: 08.03.2005 13:25:26
Muß noch mal Fragen !
Habe folgendes Makro, nur kommt es immer bei
Range("B3").Select
zum Fehler.
Hat das was mit Target zu tun ?
Was muß ich alles ändern damit das Makro läuft ?
Wo genau muß das Makro eingeführt werden ?
Das Makro soll immer nach einer Eingabe in der Tabelle ausgeführt werden.
Vielen Dank im voraus.
Gruß Fred
Hier nun das Listing:


Private Sub Worksheet_Change(ByVal Target As Range)
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

Betrifft: nur mal auf den ersten Blick
von: Franz W.
Geschrieben am: 08.03.2005 13:41:43
Hallo Fred,
muss denn B3 zwingend selektiert werden? Lass doch diese Zeile einfach mal raus. Wenn ich nicht was übersehen habe, ist es nicht nötig!
Grüße
Franz
Bild

Betrifft: AW: und auf den zweiten Blick...
von: Matthias G
Geschrieben am: 08.03.2005 13:56:46
Hallo,
...finde ich es nicht unproblematisch, innerhalb einer Ereignisprozedur des Tabellenblattes zu einem anderen Blatt zu wechseln.
Gruß Matthias
Bild

Betrifft: AW: und auf den zweiten Blick...
von: Franz W.
Geschrieben am: 08.03.2005 14:03:16
Hallo Matthias,
stimmt. Du meinst, er soll das ganze Selektieren rauslassen, alles sauber referenzieren und im Blatt bleiben?? A la:
With Worksheets("Ergebnis")
Grüße
Franz
Bild

Betrifft: so geht es auch nicht !
von: Fred
Geschrieben am: 08.03.2005 14:50:04
Hallo Leute, danke für eure Mühe,
aber ich bekomme es nicht hin.
Wenn ich die Zeile Range("B3").Select weglasse,
hängt sich das Makro beim nächsten Range wieder auf.
Da ich keinerlei Ahnung von der Programmierung habe, würde ich mich
sehr darüber freuen, wenn mir jemand das Makro umschreibt.
Wie gesagt unter
Sub Samstage_zaehlen()
funktioniert das Teil.
Nur nicht mit
Private Sub Worksheet_Change(ByVal Target As Range)
Gruß
Fred
Bild

Betrifft: AW: so geht es auch nicht !
von: Matthias G
Geschrieben am: 08.03.2005 14:58:31
Hallo Fred,
versuch doch mal selbst:
Im Prinzip solltest z.B. du statt
Ergebnis.Select
Range("B3").Cells.Offset(i, 1).Value = Anzahl
so schreiben:
Sheets("Ergebnis").Range("B3").Cells.Offset(i, 1).Value = Anzahl
oder so, wenn mehrere Bezüge da sind:
With Sheets("Ergebnis")
.Range("B3").Cells.Offset(i, 1).Value = Anzahl
End With
Das Makro ist ja nicht so hoppladihopp zu durchschauen, und du willst ja auch was lernen! ;-)
Wenn noch Fragen da sind, gerne.
Viel Erfolg,
Matthias
Bild

Betrifft: Böhmische Dörfer
von: Fred
Geschrieben am: 08.03.2005 15:26:40
Hallo Matthias,
das ganze Listing ist für mich nichts anderes als ein Buchstaben-Zahlen-Wirrwarr !
Ich habe absolut keine Ahnung von VBA.
Bis jetzt kann ich gerade mal ein Makro aufzeichnen, aber das war`s dann auch schon.
Dieses Makro hat mir jemand aus dem Forum erstellt.
Aber wie bitte soll ich das mit meinen Nicht-VBA-Kenntnissen umschreiben ?
Kann das ganze Problem nicht am Target Befehl liegen, also das sich Target mit
Range nicht versteht ?
Gibt es nicht eine andere Möglichkeit, ein Makro automatisch zu starten wenn
man eine Eingabe gemacht hat ?
Gruß
Fred
Gruß
Fred
Bild

Betrifft: AW: Böhmische Dörfer
von: Matthias G
Geschrieben am: 08.03.2005 15:31:38
Hallo Fred,
kannst du dann wenigstens mal eine Beispielmappe hochladen, damit ich sehen kann, was in den Blättern "Samstage" und "Ergebnis" überhaupt drinsteht?
Gruß Matthias
Bild

Betrifft: AW: @Matthias...
von: HermannZ
Geschrieben am: 08.03.2005 16:04:17
Hallo Matthias,
schau dir einmal den Beitrag vom 07.03.2005 11:06:59 an da wirst du auch das Makro finden und sehen das die ganze schose schon einmal durchgekaut wurde nur unter anderem Namen.
Gruß hermann
Bild

Betrifft: Genau !
von: Fred
Geschrieben am: 08.03.2005 16:11:02
Hallo leute, genau da habe ich das her.
Muß es aber für meine Zwecke ein wenig abändern !
Gruß
Fred
Bild

Betrifft: Ich bin raus
von: Matthias G
Geschrieben am: 08.03.2005 16:17:09
Hallo,
Sorry, ich bin raus.
Sollen sich die damit beschäftigen, die das Problem schon kennen.
@Hermann: Danke für den Hinweis!
Gruß Matthias
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Makro in "Diese Arbeitsmappe" in andere verschiebe"