Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1848to1852
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
Inhaltsverzeichnis

Bereich festlegen will nicht

Bereich festlegen will nicht
09.10.2021 15:44:12
Lorenz
Hallo Helfende
Mit folgenden Code will ich einen Bereich zum weiterverarbeiten festlegen. Bis zum Anlegen des Bereiches funkt alles.
In der Zeile "rngBereich=" löst den Fehler: "Objektvariable oder With-Blockvariable nicht festgelegt" aus.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strDat As Date, Treffer As Range, rngBereich As Range
Dim iEnd As Integer, iStart As Integer
strDat = NächsterSonntag(Cells(1, Target.Column))
Set Treffer = Range(Cells(3, Target.Column), Cells(3, Target.Column + 14)).Find(what:=strDat)
iEnd = Treffer.Column + 1
iStart = Treffer.Column - 12
rngBereich = Range(Cells(3, iStart), Cells(3, iEnd)).Address
Set Treffer = Nothing
End Sub

Private Function NächsterSonntag(Datum As Date)
NächsterSonntag = FormatDateTime(Datum + (8 - Weekday(Datum)))
End Function
Gruß
Lorenz

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bereich festlegen will nicht
09.10.2021 16:10:18
Hajo_Zi
Halo Lorenz,
Du hast die Variable als Range definiert und Du möchtest Text drauf schreiben.
set rngBereich = Range(Cells(3, iStart), Cells(3, iEnd))
GrußformelHomepage
In diesem Forum bekomme ich kein Mailbenachrichtigung, weitere Antworten sind zufällig.
AW: Bereich festlegen will nicht
09.10.2021 17:33:11
Lorenz
Hallo Hajo
Danke für'n Tipp
Leider hat sich nach dem Schließen der Datei der nächste Fehler eingeschlichen. Jetzt Liefert der "Treffer" plötzlich "nothing", was natürlich ein weiterarbeiten blockiert.
https://www.herber.de/bbs/user/148528.xlsm.
Gruß
Lorenz
Anzeige
AW: Bereich festlegen will nicht
09.10.2021 18:21:09
Hajo_Zi
Hallo Lorenz,
Du kannst keinen Zellbereich anzeigen
MsgBox rngBereich.Address
Nothing kommt bei Find nicht
Gruß Hajo
AW: Bereich festlegen will nicht
10.10.2021 09:20:46
Lorenz
Hallo Hajo
Danke für die "Instuktionen", habe halt wieder was dazugelernt.
Grüße
Lorenz
Kleine Codeänderungen
09.10.2021 19:56:33
{Boris}
Hi,
änder Deine Function NächsterSonntag wie folgt:

Private Function NächsterSonntag(Datum As Date) As Date
NächsterSonntag = Datum + (8 - Weekday(Datum))
End Function
Und änder die Codezeile für die Zuweisung zu Treffer wie folgt:

Set Treffer = Range(Cells(3, Target.Column), Cells(3, Target.Column + 14)).Find(what:=strDat, LookIn:=xlValues, lookat:=xlWhole)
VG, Boris
Anzeige
AW: Kleine Codeänderungen
10.10.2021 09:15:44
Lorenz
Hallo Boris
;-) kleine Änderung mit GROSSER Auswirkung
Danke f. die "funktionierende" Änderung
Grüße
Lorenz
AW: Kleine Codeänderungen
10.10.2021 11:41:24
Lorenz
Hallo Boris
Habe ich "Set Treffer...." in Mappe1, funktioniert es einwandfrei. Übertrage ich den Code in die Originaldatei (Datumswerte in anderer Zeile) will´s wieder nicht. Ich habe auch das Format der ganzen Zeile Übertragen (ohne Erfolg).
Liegts Vielleicht daran: Im Lokalfenster ist der gelieferte Wert als #10.10.2021# ersichtlich.
Grüße
Lorenz
Dann zeig Deine Originaldatei...
10.10.2021 17:27:50
{Boris}
Hi,
...schmeiß alles Überflüssige raus bzw. anonymisiere sie.
VG, Boris
Bin etwas ratlos...
10.10.2021 18:42:49
{Boris}
Hi Lorenz,
folgender Test funktioniert nur, wenn der Lattenzaun in Zeile 200 nicht da ist. Dazu musst Du unter Zellen Formatieren - Ausrichtung - den Haken bei An Zellgröße anpassen setzen.

Sub test()
Dim d As Date, C As Range
d = DateSerial(2021, 1, 10)
Set C = Rows(200).Find(what:=d, LookIn:=xlValues, lookat:=xlWhole)
MsgBox C.Address
End Sub

Fazit: Es hat auch irgendwas mit der Ansicht / dem Zellformat zu tun.
Aber ich bekomme das in Deinem Change-Ereignis zum Verrecken nicht zum Laufen - auch nicht mit Umwandlungsfunktionen (CLng, CDate) oder mit der Format-Funktion und englischer Datumsschreibweise usw. usw.
Ich stell auf offen - oder Du eröffnest dazu einen neuen Thread.
Sorry!
VG, Boris
Anzeige
AW: Bin etwas ratlos...
10.10.2021 22:55:44
Piet
Hallo Lorenz
ändere deinen Code zum testen bitte mal wie unten ab. Schau dir an ob die gefundene Zelle mit Cells.Select korrekt angesprungen wird.
Dann kannst du die For Next Schleife gegen Set Find austauschen. Worin besteht der entscheidende Unterschied?
Gerade bei Datumssuche ist Find oft NICHT geeignet. Ich kann die zu suchende Findzellen NICHT auf Clng setzen!! Bei For Next geht das!
mfg Piet
  • 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim strDat As Date, Treffer As Range, rngBereich As Range
    Dim strDat As Date, Treffer As Range, rngBereich As Range
    Dim iEnd As Integer, iStart As Integer
    Dim LSp As Integer, j As Integer, AC As Range
    LSp = Cells(200, Columns.Count).End(xlToLeft).Column   '739 Spalten!!
    If Target.Column > 10 And Target.Column  LSp Then MsgBox strDat & "  Datum nicht gefunden": Exit Sub
    AC.Select           'nur zum testen
    MsgBox AC.Address
    Exit Sub  '** nur zum testen
    iEnd = Treffer.Column + 1
    iStart = Treffer.Column - 12
    rngBereich = Range(Cells(3, iStart), Cells(3, iEnd)).Address
    Set Treffer = Nothing
    End Sub
    

  • Anzeige
    AW: Bin etwas ratlos...
    11.10.2021 12:16:49
    Lorenz
    Hallo Piet
    Nach hinzufügen eines "End If" Funktionierts tadellos, und hat mein Vorhaben extrem beschleunigt.
    vielen, vielen Dank & Grüße
    Lorenz
    AW: Kleine Codeänderungen
    11.10.2021 09:50:11
    {Boris}
    Hi Lorenz,
    ich habe Deinen Code nun doch zum Laufen bekommen.
    Dabei habe ich nicht nur die Lattenzäune in Zeile 200 beseitigt (wie bereits geschrieben), sondern auch noch die in Zeile 1 (denn daraus werden die Werte in Zeile 200 ja per Zellbezug geholt).
    Dann funktioniert auch die Find-Methode. Aber das ist alles ein wenig strange, weshalb es sicherlich besser ist, dem Vorschlag von Piet mit ner Schleife zu folgen.
    Am Rande:
    rngBereich = Range(Cells(3, iStart), Cells(3, iEnd)).Address
    funktioniert natürlich so nicht, da Du rngBereich als Range deklariert hast - aber das weißt Du glaube ich inzwischen.
    VG, Boris
    Anzeige
    AW: Kleine Codeänderungen
    11.10.2021 12:01:53
    Lorenz
    Hallo Boris
    Vielen Dank für dein Bemühen.
    Das mit rngBereich als Range war ein Rückstand aus den Fehlversuchen (ist auch so nicht mehr in Verwendung).
    Ich habe aufgrund deiner Empfehlung, als auch der Erklärung v. Piet den Vorschlag von Piet genommen.
    Grüße
    Lorenz
    AW: freut mich das ich helfen konnte oWt
    11.10.2021 12:20:25
    Piet
    ,,,
    AW: Bereich festlegen will nicht
    09.10.2021 19:40:12
    Piet
    Hallo
    probier bitte mal diese Codezeile und wundere dich nicht wenn es klappt.
    Set Treffer = Range(Cells(3, Target.Column), Cells(3, Target.Column + 14)).Find(what:=CDate(strDat), LookIn:=xlValues)
    Bedenke bitte das in dem ganzen Bereich nur Formeln stehen und KEINE Werte!! Da bekommt Excel "Bauchschmerzen"

    mfg Piet
  • 
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim strDat As Date, Treffer As Range, rngBereich As Range
    Dim iEnd As Integer, iStart As Integer
    strDat = NächsterSonntag(Cells(1, Target.Column))
    Set Treffer = Range(Cells(3, Target.Column), Cells(3, Target.Column + 14)).Find(what:=CDate(strDat), LookIn:=xlValues)
    If Treffer Is Nothing Then MsgBox strDat & "  Kein Treffer gefunden": Exit Sub
    iEnd = Treffer.Column + 1
    iStart = Treffer.Column - 12
    'MsgBox Treffer.Address
    'MsgBox CStr(Range(Cells(3, iStart), Cells(3, iEnd)).Address)
    'MsgBox Range(Cells(3, iStart), Cells(3, iEnd)).Address
    Set rngBereich = Range(Cells(3, iStart), Cells(3, iEnd))
    MsgBox rngBereich.Address
    Set Treffer = Nothing
    End Sub
    

  • Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige