Страницы: 1
RSS
Объявить переменную типа время (дата и время) из 2 переменных
 
Добрый вечер!
Прошу помочь со следующей прблемой:
Изначально делаю форму, и таблицу для записи пациентов на прием.
В форме 6 полей:
Фамилия, Имя, Отчество, телефон, дата приема и время.
После заполнения формы, по нажатию на кнопку (Sub AddApp), данные добавляются в умную таблицу:
Код
Option Explicit

Dim ShApp As Worksheet
Dim AppListObj As ListObject
Dim AppListRow As ListRow

Sub AddApp() ' Добавление записи
    Set ShApp = ThisWorkbook.Worksheets("Запись")
    Set AppListObj = ShApp.ListObjects("Запись_Tb")
    
    Set AppListRow = AppListObj.ListRows.Add
    
    Dim Q1 As Date
    Dim Q2 As Range
    
    Set Q1 = CDate(App.Data.Value & App.Time.Value)
    Set Q2 = AppListObj.ListColumns.Item(5).Range.Find(Q1, lookat:=xlWhole)
    
    If Q2 Is Nothing Then
    
    AppListRow.Range(1) = App.txb_surname.Value
    AppListRow.Range(2) = App.txb_name.Value
    AppListRow.Range(3) = App.txb_ptr.Value
    AppListRow.Range(4) = App.txb_mobile.Value
    AppListRow.Range(5) = App.Data.Value
    AppListRow.Range(6) = App.Time.Value
    
    Else
     MsgBox "Время уже занято!"
    End If
    
End Sub

Прежде чем добавить запись, я хочу проверить, что эти дата и время свободны.
Для этого в 7 колонке я сделал функцию "=ТЕКСТ([@[Дата приема]];"ДД.ММ.ГГГГ")&" "&ТЕКСТ([@[Время приема]];"ЧЧ:ММ")"
и в коде прописал, что хочу сделать переменную, которая в себе объединит дату и время из формы, и эту перенную надо найти в этой 7 колонке.
Но пока не получилось, так как выдает ошибку object required и выделяет Q1 в 16 строке.

Подскажите, где ошибка?
Изменено: VVS_001 - 30.09.2020 23:05:59
 
1. приложите свой файл
2. Зачем в 16-й строке вы пишите Set ? Q1 у вас переменная тип Дата. А не объект. Тут не нужен Set. Текст ошибки вам говорит: Требуется Объект! Так как вы написали ключевое слово Set. Set применяется к объектам - ячейкам, листам, книгам и тд. Set a= Range("A1"), Set s = sheets("лист1") и т.д.
3. не понятно, какие значения в этих переменных в 16 строке: App.Data.Value & App.Time.Value
Напишите что там в этих переменных

Вот смотрите, у меня без Set работает
Код
Sub Макрос1()
Dim Date1 As Date
    Date1 = CDate("30/09/2020")
    MsgBox Date1
End Sub

Кстати, вы пишите, что ищете в 7-м столбце, а в коде, вроде, указан 5-й столбец в этой строке
Код
Set Q2 = AppListObj.ListColumns.Item(5).Range.Find(Q1, lookat:=xlWhole)

4. Попробуйте Q1 дать тип String - вдруг тоже сработает )
Изменено: New - 30.09.2020 23:30:19
 
New, Спасибо за замечания.

код поправил:
Код
Sub AddApp() ' Добавление записи
    Set ShApp = ThisWorkbook.Worksheets("Запись")
    Set AppListObj = ShApp.ListObjects("Запись_Tb")
    
    Set AppListRow = AppListObj.ListRows.Add
    
    Dim Q1 As Date
    Dim Q2 As Range
    
    Q1 = App.Data.Value & " " & App.Time.Value
    Set Q2 = AppListObj.ListColumns.Item(7).Range.Find(Q1, lookat:=xlWhole)
    
    If Q2 Is Nothing Then
    
    AppListRow.Range(1) = App.txb_surname.Value
    AppListRow.Range(2) = App.txb_name.Value
    AppListRow.Range(3) = App.txb_ptr.Value
    AppListRow.Range(4) = App.txb_mobile.Value
    AppListRow.Range(5) = App.Data.Value
    AppListRow.Range(6) = App.Time.Value
    
    Else
     MsgBox "Время уже занято!"
    End If

Цитата
New написал:
3. не понятно, какие значения в этих переменных в 16 строке: App.Data.Value & App.Time.ValueНапишите что там в этих переменных
В этих переменных, то, что заполнено в форме.
В примере увидите.
Изменено: VVS_001 - 30.09.2020 23:42:51
 
1. Q1 дайте тип String
2. поиском ищите в ЗНАЧЕНИЯХ ячейки (LookIn:=xlValues), то есть всё вот так
Код
    Dim Q1 As String
    Dim Q2 As Range
    
    Q1 = App.Data.Value & " " & App.Time.Value
    'Q1 = "30.09.2020 15:00" 'я тестировал на этом так как у меня нет вашей библиотеки 
    Set Q2 = AppListObj.ListColumns.Item(7).Range.Find(Q1, , LookIn:=xlValues, lookat:=xlWhole)

у меня выскакивает сообщение  MsgBox "Время уже занято!"
Изменено: New - 01.10.2020 00:35:30
 
New, к сожалению, не работает. Точнее сказать, он добавляет запись, не смотря на то, что в 7 колонке есть такое значение.
Q2 у меня тоже отображается правильно, но на листе не видет..
 
Выложите сюда 2 строки из кода
1. Как вы объявили Q1
2. Строку с поиском значение на листе
Изменено: New - 01.10.2020 08:43:56
 
Цитата
VVS_001 написал:
Q2 у меня тоже отображается правильно
отображается правильно - не факт что в переменной содержится правильное значение
число 100
и строка содержащая единичку и 2 нуля
отображаются одинаково, но не равны между собой между ними космическая разница с точки зрения компьютера, хотя нет никакой разницы с точки зрения человеческим глазом
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
New, я выложил пример, там все можно посмотреть.

Ігор Гончаренко, да, я понимаю. Поэтому я сделал текстовое значение в колонке 7..
 
То есть вы ничего не изменили в своём коде, что я вам советовал сделать и продолжаете говорить, что ваш код не работает?
 
New, а, не, конечно изменил, как вы и написали сделал:
Код
Dim Q1 As String

Q1 = App.Data.Value & App.Time.Value

Dim Q2 As Range

Set Q2 = AppListObj.ListColumns.Item(7).Range.Find(Q1, LookIn:=xlValues, lookat:=xlWhole)
Изменено: VVS_001 - 02.10.2020 18:52:26
 
Тогда надо смотреть что у вас в переменой Q1.
Я проверить ваш файл не могу, код ругается на отсутствующие библиотеки, которые вы используете в своем коде (возможно это календарь на форме).
Возможно у вас там в конце добавлены секунды, которых нет на листе. Избавьтесь от секунд и двоеточия.
Посмотрите картинку, которую я выкладывал выше. Видите у меня в конце прописано 15:00 и всё, секунд нет.
А ваш календарь (который я не вижу на своем компе) возможно добавляет ещё секунды к времени. А секунд у вас на листе нет
Изменено: New - 02.10.2020 19:05:04
 
New, вы совершенно правы, что там дата и время. если надо, могу библитеку скинуть)
я проверил на наличие секунд, колонку 7. И в итоге в формуле "текст" добавил секунды, и пошло дело)

Так что, спасибо за помощь!!
 
Не за что. Вам надо научиться работать с точками останова.
Вы бы поставили точку останова после строки, где переменная Q1 получает значение и сравни ли бы глазами значение внутри переменной и значения в ячейке и поняли бы, что они не равны друг другу.
например
Q1 = "02.10.2020 12:30:45"
значение в ячейке: "02.10.2020 12:30"
Визуально видно, что строки разные
Изменено: New - 02.10.2020 19:44:41
 
На самом деле я примерно знаю как это работает. Просто сперва не праивльно объявил переменную, а потом просто глазами не увидел, что там без секунд. Вообще, работу с да той и временем в Екселе очень не люблю, потому что постоянно с разными приколами сталкиваюсь.
 
достаточно ОДИН раз понять принцип, и всю жизнь пользоваться, но если  что-то в организме ищет приключений, то можно постоянно сталкиваться с приколами... и недоумевать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх