Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1864to1868
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

Laufzeitfehler '91'

Laufzeitfehler '91'
07.01.2022 13:25:15
Max
Hallo zusammen, bei folgendem Code kommt der Laufzeitfehler 91. Kann mir jemand sagen, was ich falsch mache?

Option Explicit
Dim regex As Object
Sub ProcessRanges()
Dim cell As Range, result As String
Set regex = CreateObject("vbscript.regexp")
regex.Pattern = "^(0?[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])(19[0-9][0-9]|[2-9]\d{3})$"
With ActiveSheet
For Each cell In .Range("C2:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
FormatDate cell
Next
End With
Set regex = Nothing
End Sub
Sub FormatDate(rngCell As Range)
Dim result As Date
If regex.test(rngCell.Text) Then
result = regex.Replace(rngCell.Text, "$1.$2.$3")
rngCell.NumberFormatLocal = "TT.MM.JJJJ"
rngCell.Value = CDate(result)
End If
End Sub



		

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler '91'
07.01.2022 13:58:40
ChrisL
Hi
Der Fehler lässt sich nicht rekonstruieren. Lade mal eine Beispieldatei oder verrate uns wenigstens was im Moment des Fehlers der Input-String (Zelleninhalt) war.
Unabhängig davon würde ich den Code frisch strukturieren:

Sub ProcessRanges()
Dim cell As Range
With ActiveSheet
For Each cell In .Range("C2:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
FormatDate cell
Next cell
End With
End Sub

Private Sub FormatDate(rngCell As Range)
Dim regex As Object
Dim result As Date
Set regex = CreateObject("vbscript.regexp")
regex.Pattern = "^(0?[1-9]|[1-2][0-9]|3[0-1])(0[1-9]|1[0-2])(19[0-9][0-9]|[2-9]\d{3})$"
If regex.test(rngCell.Text) Then
result = regex.Replace(rngCell.Text, "$1.$2.$3")
rngCell.NumberFormatLocal = "TT.MM.JJJJ"
rngCell.Value = CDate(result)
End If
Set regex = Nothing
End Sub
Und obwohl ich RegEx ziemlich cool finde, würde ich es im vorliegenden Beispiel einfacher lösen, z.B.

Sub t()
Dim cell As Range, strDatum As String
With ActiveSheet
For Each cell In .Range("C2:C" & .Cells(Rows.Count, "C").End(xlUp).Row)
If IsNumeric(cell) And Len(cell) = 8 Then
strDatum = Left(cell, 2) & "." & Mid(cell, 3, 2) & "." & Right(cell, 4)
If IsDate(strDatum) Then
cell.NumberFormatLocal = "TT.MM.JJJJ"
cell.Value = CDate(strDatum)
End If
End If
Next cell
End With
End Sub
cu
Chris
Anzeige
AW: Laufzeitfehler '91'
07.01.2022 14:09:39
Noticon
Hallo Chris,
durch deine Umstrukturierung tritt das Problem nicht mehr auf, danke dir.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige