Страницы: 1
RSS
run-time error 13: ошибка на некоторых компьютерах при работе с датам
 
Доброго дня, уважаемые эксперты!!!

Помогите решить проблему, во вложении фаил-пример. Есть форма в которой с помощью календаря выбирается 2 даты, после нажатия кнопки проверить вычисляется разнится в днях между этими датами.
На 8 компьютерах из 10 все работает нормально, на 2 появляется ошибка run-time error 13. Не могу понять в чем проблема.

При нажатие Debug строка с d
Код
Private Sub CommandButton1_Click()
Dim d As Integer
d = DateSerial(Year(ДопИнформация.ДатаОбращения.Value), Month(ДопИнформация.ДатаОбращения.Value), Day(ДопИнформация.ДатаОбращения.Value)) _
      - DateSerial(Year(ДопИнформация.ДатаПродажи.Value), Month(ДопИнформация.ДатаПродажи.Value), Day(ДопИнформация.ДатаПродажи.Value))
MsgBox (d)
End Sub
 
Lepilo, попробуйте написать
Код
vba.DateSerial...
и все другие функции.
у меня были случаи, когда напрямуюю функцию компилятор не понимает.
 
Несколько замечаний.
Не используйте русские буквы для наименования объектов и макросов - не все системы Windows к этому отнесутся с пониманием
Где гарантия, что пользователь ввел именно дату? Сначала проверьте введенные значения:

Код
Private Sub CommandButton1_Click()
  Dim d As long
  If  Not IsDate(ДопИнформация.ДатаОбращения.Value) Or Not IsDate(ДопИнформация.ДатаПродажи.Value) Then
    ' Сообщение пользователю, что нужно ввести даты
  Else
    d=Cdate(ДопИнформация.ДатаПродажи.Value) - CDate(ДопИнформация.ДатаОбращения.Value)
  End If
End Sub

Ваша книга Excel (с учетом предыдущего замечания) будет корректно работать только на системах Windows с кодовой страницей 1251 по умолчанию; разделитель компонент даты - точка; последовательность компонент - день, месяц, год.
Изменено: sokol92 - 12.10.2018 14:16:59
Владимир
 
Всем спасибо!!!

Проблема была в разных форматах даты. С помощью функции (указана ниже) определяю формат даты ОС и соответственно дата из календаря вставляется текстбокс в правильном формате. Пример во вложении.
Код
Option ExplicitPrivate Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Const LOCALE_SDECIMAL = &HE
Private Const LOCALE_SSHORTDATE As Long = &H1F    'short date format string

Private Sub Form_Load()
    'get decimal sign
    Dim S As String
 
     S = Space$(Date)
    GetLocaleInfo 0, LOCALE_SSHORTDATE, S, Len(S)
    MsgBox "Short date = " & S 'дата в коротком формате локально
    
End Sub
Изменено: Lepilo - 16.10.2018 10:20:52
 
Я бы все-таки посоветовал повнимательнее поработать с текстом макроса из приложенного к #4 файла.
Дата из календаря переносится в текстовое поле строкой:
Код
ДопИнформация.Controls(Контрол).Value = Format(TB, S)

Значение переменной S при этом - Empty. Макрос, который Вы указали в #4, не вызывается ни разу. Так что причина "исправления" не та, что Вы описали.
Владимир
Страницы: 1
Наверх