проблема заключается в:
c = Left(Right(x, 2), 1)
, что приведет к ошибке x
= "?", Поскольку:
, и интерпретатор VBA не может преобразовать "?" к любому целочисленному значению для c
, поэтому вы должны переместить это утверждение в соответствующие им и безопасные случаи
Function Zad3 (x As String, y As Date)
Dim z As String, c As Integer
z = Right(x, 1)
Select Case z
Case Is = "M"
c = Left(Right(x, 2), 1)
Zad3 = DateAdd("m", c, y)
Case Is = "R"
c = Left(Right(x, 2), 1)
Zad3 = DateAdd("yyyy", c, y)
Case Is = "L"
c = Left(Right(x, 2), 1)
Zad3 = DateAdd("yyyy", c, y)
Case Else
Zad3 = "nieznana"
End Select
End Function
, краткая версия которых может быть
Public Function Zad3(x As String, y As Date)
Dim z As String
z = Right(x, 1)
Select Case z
Case "M", "R", "L"
Zad3 = DateAdd(Switch(z = "M", "m", z = "R", "yyyy", z = "L", "yyyy"), Left(x, Len(x) - 1), y)
Case Else
Zad3 = "nieznana"
End Select
End Function
, где я использовал функцию VBA Switch()
, чтобы свернуть что было бы другим Select Case
блоком