Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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
Wert finden in Range oder Array
27.07.2022 14:10:32
JoTu
Hey,
ich bin verwirrt: Warum erhalte ich bei folgendem Code bei der Find-Funktion scheinbar random die Fehlermeldung 91 (Objekt- oder with-block-Variabel nicht festgelegt)? [Fehler z.b. bei März und Mai, nicht aber bei Januar oder April]
In Zeile 2 meines Worksheets sh_Jahresdisp stehen Zellfunktionen die immer am ersten Tag eines neuen Monats den Monatsnamen anzeigen (z.b.: =WENN(MONAT(I5)MONAT(H5);I5;"")). In Zeile 5 stehen alle Tage des Jahres hintereinander. Die Spalten wandern immer mit, sodass die aktuelle Zelle mit der vorhergehenden verglichen wird.
In meiner UserForm1 habe ich 12 Checkboxen mit den Monatsnamen als Caption.
Wenn die Checkbox angeklickt ist, soll es in Zeile 2 des Worksheets die Spalte mit dem Monat alias CheckBox.Caption finden.
Ich habe auch überlegt, es über ein Array laufen zu lassen, aber da würde ich eine Schleife durchlaufen lassen und ich dachte es würde den Code verschlanken, wenn ich eine direkte Funktion verwenden könnte. Also ob Array oder Range ist mir erstmal egal. Ich arbeite anschließend lediglich mit der Spalte weiter. Auch für weitere Projekte bin ich aber für alle Vorschläge offen.

Private Sub CommandButton1_Click()
Dim ctl As Control
Dim mon As String
Dim monCol As Long
Dim row2Data As Range: Set row2Data = sh_Jahresdispo.Range("H2:ABK2")
Dim row2Arr As Variant
ReDim row2Arr(1 To row2Data.Columns.Count)
row2Arr = row2Data.Value
For Each ctl In Me.Controls
If TypeName(ctl) = "CheckBox" Then
If ctl.Value = True Then
mon = ctl.Caption
monCol = row2Data.Find(mon, LookIn:=xlValues).Column '-> hier kommt die Fehlermeldung 91
Debug.Print mon & ":" & monCol
End If
End If
Next ctl
End Sub
LG, Johannes

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert finden in Range oder Array
27.07.2022 14:24:35
{Boris}
Hi,

die immer am ersten Tag eines neuen Monats den Monatsnamen anzeigen (z.b.: =WENN(MONAT(I5)MONAT(H5);I5;""))
Demnach muss in I5 ja ein Datum stehen - bedeutet eine ZAHL (die Du dann mittels Zellformat MMMM als Monat anzeigen lässt). Deine CheckBox-Caption ist aber TEXT.
Zudem ist die Find-Methode mitunter nicht das richtige Mittel der Wahl, zumal sie auch noch mehr Parameter hat als von Dir angegeben.
VG, Boris
AW: Wert finden in Range oder Array
27.07.2022 16:56:00
JoTu
Hey Boris,
ich war davon ausgegangen, dass es über LookIn:=xlValues möglich ist (via Schleife und .Value funzt es ja). Deshalb hatte ich mir darüber keine Gedanken gemacht.
Aber wie ich schon Daniel schrieb: Wenn ich über die Zahl gehe und etwas kompliziert ... naja, lies selbst in meiner Antwort bei Daniel.
Danke für deinen Input.
LG, Johannes
Anzeige
AW: Wert finden in Range oder Array
27.07.2022 14:33:20
Daniel
Hi
Find mit Datum ist kapriziös, da müssen Formatierung und Angabe der Werte zusammenpassen, allerdings musst du je nach Fall manchmal die Suchwerte in der amerikanischen Schreibweise angeben, obwohl sie in den Zellen auf deutsch stehen.
Deine Beobachtung : "Januar wird gefunden, Mai nicht" spricht dafür, denn Januar wird beidesmal gleich geschrieben, für Mai und März sind die Schreibweisen unterschiedlich.
Die Beispieldatei wäre hilfreich, damit man sehen kann, wie die Daten genau vorliegen.
Gruß Daniel
AW: Wert finden in Range oder Array
27.07.2022 16:53:27
JoTu
Hey Daniel,
du hast Recht. Wenn ich mich auf das Format fokussiere und mein Suchwert nicht aus der Caption nehme sondern aus der CheckBox-Nummer (praktischerweise von mir bereits passend von Januar - 1 bis Dezember - 12 deklariert) und aus der Nummer mittels CDate ein Datum generiere und das Datum dann im Array suche, dann geht es. Dann muss ich nur noch die Spalten vor Beginn des ersten Werts im Array dazurechnen (Array ist ja ab 1 und die erste Spalte mit H aber 8, also +7) und dann habe ich die Spalte.
Danke für den Denkanstoß.
LG, Johannes
Funktionierender Code:

Private Sub CommandButton1_Click()
Dim ctl As Control
Dim mon As String
Dim monCol As Long
Dim row2Data As Range: Set row2Data = sh_Jahresdispo.Range("H2:ABK2")
Dim yr As String: yr = Right(sh_Jahresdispo.Cells(2, 2).Value, 4)
Dim dat As Date
Dim strDat As String
Dim row2Arr As Variant
ReDim row2Arr(1 To row2Data.Columns.Count)
row2Arr = row2Data.Value
For Each ctl In Me.Controls
If TypeName(ctl) = "CheckBox" Then
If ctl.Value = True Then
dat = CDate("01." & Mid(ctl.Name, 9) & "." & yr)
strDat = Format(dat, "dd.mm.yyyy")
monCol = Application.Match(strDat, row2Arr, False) + 7
Debug.Print monCol
End If
End If
Next ctl
End Sub

Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige