Wie kommst du darauf, dass er sich nur auf B2 bezieht?:
Beim testen des Codes hat er nur aus B2 kopiert (B3 usw. hatten auch inhalt), und da (soweit ich es richtig verstanden habe) der Code sich ja nur auf B2 Bezieht: Set rngPNr = Worksheets("Tourenplan").Range("B2")
Genau genommen arbeitet er alle Zellen in Spalte B ab, solange diese ein Inhalt haben - B2, B3, B4, usw..
Nein, macht er leider nicht. So hätte ich es allerdings gerne....
Nope, tut er.
Das Makro startet bei B2 und springt am Ende der Schleife eins tiefer; hat B3 einen Inhalt, dann gehts da weiter in der Schleife; dann B4 usw.
Bitte befasse dich mit der Range.Offset-Eigenschaft.
Außerdem merkt sich das Makro nur Zellen in B, wenn in der selben Zeile, Spalte G etwas drin steht.
Die relevanten Zeilen sind markiert.
Option Explicit
Sub Test()
Dim rngPNr As Excel.Range
Set rngPNr = Worksheets("Tourenplan").Range("B2")
With CreateObject("Scripting.Dictionary")
'zu druckende Personalnummern ermitteln
Do While rngPNr.Value <> ""
If Not .Exists(rngPNr.Text) Then
If rngPNr.Worksheet.Cells(rngPNr.Row, "G").Value <> "" Then
Call .Add(Item:=rngPNr, Key:=rngPNr.Text)
End If
End If
Set rngPNr = rngPNr.Offset(1)
Loop
Dim vntPNr As Variant
For Each vntPNr In .Items()
Debug.Print vntPNr.Text, "["; vntPNr.Address(0, 0); "]"
'<_vntPNr_kopieren_>
'<_vntPNr_drucken_>
Next
End With
End Sub
Grüße
PS: Das Makro trägt übrigens meine "Handschrift". ;o)
|