Dieser Teufel raubt mir den letzten Nerv:
Kann mir in Jemand einen Tipp geben ?
Wäre riesig.
Die Routine steht ganz hinten.
FuerDatum ist ein Date-Value
Einzelwerte und Tageswerte sind Ranges.
wsTagesHistory ist Public definiert: worksheets .....
Die Routine sucht in wsTagesHistory in HistTageSpalte nach einem definitiv vorhandenen Datum.
Hinter diesem Datum verbirgt sich eine Zusammenfassung vieler Einzelpositionen.
Hier hinterlegt sind auch die Anfangs- und Endzeile der immer als Block vorhandenen Einzelwerte
in einem anderen Bereich.
Wenn die Routine funktioniert, liefert sie in Tageswerte den Bereich der Tageszusammenfassung
(Bruchteil einer Gesamtzeile) sowie in Einzelwerte den Gesamtbereich der einzelnen Werte (die
in der Tageszusammenfassung zusammengefaßt sind).
Dadurch kann ich mit 2 lapidaren ClearContents beide Bereiche bei Bedarf löschen.
Ich entwickle unter Windows2000 und Office2000.
Solange ich dabei bleibe ist die Welt in Ordnung.
Leider bin ich nun gezwungen, solche Routinen auch unter NT zu implementieren.
Was passiert: unter 2000/2000 liefert diese Routine absolut korrekte Werte; nach dem ganzen
Debakel mit NT habe ich die Gesamtanwendung auf verschiedenen Rechnern unter 2000/2000
laufen lassen: keine Probleme.
Übernehme ich die ganze Angelegenheit mittels Diskette auf NT, dann liefert "ErgebnisObjekt"
stets den Wert NOTHING, auch dann, wenn ich temporär den "Suchbereich" auf
EndePrüfungZeile + 1 setze (wohlgemerkt: FuerDatum ist in der Tabelle enthalten).
Nehme ich die originale (also ohne jede Veränderung) Installation auf NT (2000 -> NT) wieder
zurück (NT -> 2000), dann läuft die Anwendung einwandfrei.
Anmerkung: ich habe .find schon hundertfach unter NT zum Einsatz gebracht.
Was, um alles in der Welt, bringt diese bestimmt nicht hoch elaborierte Routine auf NT zum
Absturz und immer bei "Set ErgebnisObjekt =".
Pack ich eine Worksheets(...).activate und ein Suchbereich.select vor den Set, zeigt er mir
genau den gewünschten Bereich an.
Hier die Routine:
Sub PerformDatumVorhanden(FuerDatum, Einzelwerte, Tageswerte)
Dim StartPrüfungZeile, EndePrüfungZeile As Long
Dim EinzelwerteVonZeile, EinzelwerteBisZeile As Long
Dim Suchbereich, ErgebnisObjekt As Range
Dim Blockbreite As Byte
Set Einzelwerte = Nothing
Set Tageswerte = Nothing
With wsTagesHistory
StartPrüfungZeile = 1
EndePrüfungZeile = .Cells(Rows.Count, HistTageSpalte).End(xlUp).Row
Set Suchbereich = .Range(.Cells(StartPrüfungZeile, HistTageSpalte), _
.Cells(EndePrüfungZeile, HistTageSpalte))
Set ErgebnisObjekt = Suchbereich.Find(FuerDatum, LookIn:=xlValues, _
LookAt:=xlWhole)
If Not ErgebnisObjekt Is Nothing Then
If (EndePrüfungZeile > 1) Then
EinzelwerteVonZeile = .Cells(ErgebnisObjekt.Row, vonZeileSpalte)
EinzelwerteBisZeile = .Cells(ErgebnisObjekt.Row, bisZeileSpalte)
Blockbreite = .Cells(EinzelwerteBisZeile, 1). _
End(xlToRight).Column
Set Einzelwerte = .Range(.Cells(EinzelwerteVonZeile, 1), _
.Cells(EinzelwerteBisZeile, Blockbreite))
Set Tageswerte = .Range(.Cells(ErgebnisObjekt.Row, HistTageSpalte), _
.Cells(ErgebnisObjekt.Row, Columns.Count))
End If
End If
End With
End Sub