Wert finden in Range oder Array
27.07.2022 14:10:32
JoTu
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